See: Description
| Interface | Description |
|---|---|
| MetricsService |
The metrics service mainly allows to return a snapshot of measured objects.
|
| Class | Description |
|---|---|
| DropwizardMetricsOptions |
Vert.x Dropwizard metrics configuration.
|
| Match |
A match for a value.
|
| ScheduledMetricsConsumer |
TODO - support listening to more than one Measured
|
| ThroughputMeter |
A throughput metric, wraps a
Meter object to provide a one second instant
throughput value returned by ThroughputMeter.getValue(). |
| ThroughputTimer |
A throughput metric, wraps a
Meter object to provide a one second instant
throughput value returned by ThroughputTimer.getValue(). |
| Enum | Description |
|---|---|
| MatchType |
The type of match.
|
Measured
interface which is implemented by various Vert.x components like HttpServer,
NetServer, and even Vertx itself.
Confiugrable JMX reporting based on Dropwizard implementation, exposing Vert.x as JMX MBeans.
== Getting started
To enable metrics, add the following dependency to the _dependencies_ section of your build descriptor:
* Maven (in your `pom.xml`):
[source,xml,subs="+attributes"]
----
DropwizardMetricsOptions:
[source,$lang]
----
examples.MetricsExamples#setup()
----
You can also enable JMX:
[source,$lang]
----
examples.MetricsExamples#setupJMX()
----
To see details about JMX see the <vertx.metrics.options.registryName
configures the <vertx.metrics.options.jmxEnabled and
vertx.metrics.options.jmxDomain
configures the <vertx.metrics.options.configPath
option allows to reconfigure the metrics from a property file.
== Metrics service
While Vert.x core defines an SPI for reporting metrics (implemented for instance in this project), it does not define
an API for retrieving metrics (because some metrics collectors just do reporting and nothing more).
The MetricsService provides an API in front of the Dropwizard Registry to get
metrics data snapshots.
=== Naming
Each measured component listed below (except for Vertx) will have a base name associated with it. Each metric
can be retrieved by providing the fully qualified name examples.MetricsExamples#naming1
----
or from the measured component itself using just the metric name:
[source,$lang]
----
examples.MetricsExamples#naming2
----
See more examples below on how to retrieve/use metrics for a specific component.
Metrics names can also be listed:
[source,$lang]
----
examples.MetricsExamples#naming3
----
=== Retrieving metrics
Once enabled, the MetricsService allows to retrieve metrics snapshots from any
Measured object which provides a map of the metric name to the data,
represented by a JsonObject. So for example if we were to print out all metrics
for a particular Vert.x instance:
[source,$lang]
----
examples.MetricsExamples#example1
----
NOTE: For details on the actual contents of the data (the actual metric) represented by the JsonObject
consult the implementation documentation like https://github.com/vert-x3/vertx-metrics[vertx-metrics]
Often it is desired that you only want to capture specific metrics for a particular component, like an http server
without having to know the details of the naming scheme of every metric (something which is left to the implementers of the SPI).
Since HttpServer implements Measured, you can easily grab all metrics
that are specific for that particular http server.
[source,$lang]
----
examples.MetricsExamples#example2
----
Metrics can also be retrieved using a base name:
[source,$lang]
----
examples.MetricsExamples#example3
----
== Data
Below is how each dropwizard metric is represented in JSON. Please refer to the
https://github.com/dropwizard/metrics[Dropwizard metrics] documentation for detailed information on each metric.
[[gauge]]
=== Gauge
[source,javascript]
----
{
"type" : "gauge",
"value" : value // any json value
}
----
[[counter]]
=== Counter
[source,$lang]
----
{
"type" : "counter",
"count" : 1 // number
}
----
[[histogram]]
=== Histogram
[source,javascript]
----
{
"type" : "histogram",
"count" : 1 // long
"min" : 1 // long
"max" : 1 // long
"mean" : 1.0 // double
"stddev" : 1.0 // double
"median" : 1.0 // double
"75%" : 1.0 // double
"95%" : 1.0 // double
"98%" : 1.0 // double
"99%" : 1.0 // double
"99.9%" : 1.0 // double
}
----
[[meter]]
=== Meter
[source,$lang]
----
{
"type" : "meter",
"count" : 1 // long
"meanRate" : 1.0 // double
"oneMinuteRate" : 1.0 // double
"fiveMinuteRate" : 1.0 // double
"fifteenMinuteRate" : 1.0 // double
"rate" : "events/second" // string representing rate
}
----
[[throughput_meter]]
=== ThroughputMeter
Extends a <DropwizardMetricsOptions via
a specific address match or a regex match:
[source,$lang]
----
examples.MetricsExamples#setupMonitoredHandlers()
----
WARNING: if you use regex match, a wrong regex can potentially match a lot of handlers.
[[http-server-metrics]]
=== Http server metrics
Base name: `vertx.http.servers.examples.MetricsExamples#setupMonitoredUris()
----
*For `bytes-read` and `bytes-written` the bytes represent the body of the request/response, so headers, etc are ignored.*
=== Http client metrics
Base name: `vertx.http.clients.@examples.MetricsExamples#setupJMX()
----
If running Vert.x from the command line you can enable metrics and JMX by uncommented the JMX_OPTS line in the
`vertx` or `vertx.bat` script:
----
JMX_OPTS="-Dcom.sun.management.jmxremote -Dvertx.options.jmxEnabled=true"
----
You can configure the domain under which the MBeans will be created:
[source,$lang]
----
examples.MetricsExamples#setupJMXWithDomain()
----
== Enabling remote JMX
If you want the metrics to be exposed remotely over JMX, then you need to set, at minimum the following system property:
`com.sun.management.jmxremote`
If running from the command line this can be done by editing the `vertx` or `vertx.bat` and uncommenting the
`JMX_OPTS` line.
Please see the http://docs.oracle.com/javase/8/docs/technotes/guides/management/agent.html[Oracle JMX documentation] for more information on configuring JMX
*If running Vert.x on a public server please be careful about exposing remote JMX access*
[[dropwizard-registry]]
== Accessing Dropwizard Registry
When configuring the metrics service, an optional registry name can be specified for registering the underlying
https://dropwizard.github.io/metrics/3.1.0/getting-started/#the-registry[Dropwizard Registry] in the
the https://dropwizard.github.io/metrics/3.1.0/apidocs/com/codahale/metrics/SharedMetricRegistries.html[Dropwizard Shared Registry]
so you can retrieve this registry and use according to your needs.
[source,java]
----
VertxOptions options = new VertxOptions().setMetricsOptions(
new MetricsServiceOptions().setEnabled(true).setRegistryName("the_name")
);
Vertx vertx = Vertx.vertxt(options);
// Get the registry
MetricRegistry registry = SharedMetricRegistries.getOrCreate("the_name");
// Do whatever you need with the registry
----Copyright © 2015. All rights reserved.