2021-04-30 00:11:56 +08:00
[[actuator.metrics]]
== Metrics
Spring Boot Actuator provides dependency management and auto-configuration for https://micrometer.io[Micrometer], an application metrics facade that supports {micrometer-docs}[numerous monitoring systems], including:
- <<actuator#actuator.metrics.export.appoptics,AppOptics>>
- <<actuator#actuator.metrics.export.atlas,Atlas>>
- <<actuator#actuator.metrics.export.datadog,Datadog>>
- <<actuator#actuator.metrics.export.dynatrace,Dynatrace>>
- <<actuator#actuator.metrics.export.elastic,Elastic>>
- <<actuator#actuator.metrics.export.ganglia,Ganglia>>
- <<actuator#actuator.metrics.export.graphite,Graphite>>
- <<actuator#actuator.metrics.export.humio,Humio>>
- <<actuator#actuator.metrics.export.influx,Influx>>
- <<actuator#actuator.metrics.export.jmx,JMX>>
- <<actuator#actuator.metrics.export.kairos,KairosDB>>
- <<actuator#actuator.metrics.export.newrelic,New Relic>>
- <<actuator#actuator.metrics.export.prometheus,Prometheus>>
- <<actuator#actuator.metrics.export.signalfx,SignalFx>>
- <<actuator#actuator.metrics.export.simple,Simple (in-memory)>>
- <<actuator#actuator.metrics.export.stackdriver,Stackdriver>>
- <<actuator#actuator.metrics.export.statsd,StatsD>>
- <<actuator#actuator.metrics.export.wavefront,Wavefront>>
2021-09-09 04:42:40 +08:00
TIP: To learn more about Micrometer's capabilities, see its https://micrometer.io/docs[reference documentation], in particular the {micrometer-concepts-docs}[concepts section].
2021-04-30 00:11:56 +08:00
[[actuator.metrics.getting-started]]
=== Getting started
Spring Boot auto-configures a composite `MeterRegistry` and adds a registry to the composite for each of the supported implementations that it finds on the classpath.
Having a dependency on `micrometer-registry-\{system}` in your runtime classpath is enough for Spring Boot to configure the registry.
Most registries share common features.
For instance, you can disable a particular registry even if the Micrometer registry implementation is on the classpath.
2021-09-09 03:50:08 +08:00
The following example disables Datadog:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
datadog:
enabled: false
----
2021-09-09 03:50:08 +08:00
You can also disable all registries unless stated otherwise by the registry-specific property, as the following example shows:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
defaults:
enabled: false
----
2021-09-09 04:42:40 +08:00
Spring Boot also adds any auto-configured registries to the global static composite registry on the `Metrics` class, unless you explicitly tell it not to:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
use-global-registry: false
----
You can register any number of `MeterRegistryCustomizer` beans to further configure the registry, such as applying common tags, before any meters are registered with the registry:
2021-05-05 01:42:11 +08:00
[source,java,indent=0,subs="verbatim"]
2021-04-30 00:11:56 +08:00
----
2021-05-06 14:41:52 +08:00
include::{docs-java}/actuator/metrics/gettingstarted/commontags/MyMeterRegistryConfiguration.java[]
2021-04-30 00:11:56 +08:00
----
You can apply customizations to particular registry implementations by being more specific about the generic type:
2021-05-05 01:42:11 +08:00
[source,java,indent=0,subs="verbatim"]
2021-04-30 00:11:56 +08:00
----
2021-05-06 14:41:52 +08:00
include::{docs-java}/actuator/metrics/gettingstarted/specifictype/MyMeterRegistryConfiguration.java[]
2021-04-30 00:11:56 +08:00
----
2021-09-09 04:42:40 +08:00
Spring Boot also <<actuator#actuator.metrics.supported,configures built-in instrumentation>> that you can control through configuration or dedicated annotation markers.
2021-04-30 00:11:56 +08:00
[[actuator.metrics.export]]
=== Supported Monitoring Systems
2021-09-09 04:42:40 +08:00
This section briefly describes each of the supported monitoring systems.
2021-04-30 00:11:56 +08:00
[[actuator.metrics.export.appoptics]]
==== AppOptics
2021-09-09 04:42:40 +08:00
By default, the AppOptics registry periodically pushes metrics to `https://api.appoptics.com/v1/measurements`.
2021-04-30 00:11:56 +08:00
To export metrics to SaaS {micrometer-registry-docs}/appOptics[AppOptics], your API token must be provided:
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
appoptics:
api-token: "YOUR_TOKEN"
----
[[actuator.metrics.export.atlas]]
==== Atlas
By default, metrics are exported to {micrometer-registry-docs}/atlas[Atlas] running on your local machine.
2021-09-09 04:00:58 +08:00
You can provide the location of the https://github.com/Netflix/atlas[Atlas server]:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
atlas:
uri: "https://atlas.example.com:7101/api/v1/publish"
----
[[actuator.metrics.export.datadog]]
==== Datadog
2021-09-09 04:42:40 +08:00
A Datadog registry periodically pushes metrics to https://www.datadoghq.com[datadoghq].
To export metrics to {micrometer-registry-docs}/datadog[Datadog], you must provide your API key:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
datadog:
api-key: "YOUR_KEY"
----
You can also change the interval at which metrics are sent to Datadog:
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
datadog:
step: "30s"
----
[[actuator.metrics.export.dynatrace]]
==== Dynatrace
2021-07-16 21:24:03 +08:00
Dynatrace offers two metrics ingest APIs, both of which are implemented for {micrometer-registry-docs}/dynatrace[Micrometer].
2021-09-09 04:42:40 +08:00
Configuration properties in the `v1` namespace apply only when exporting to the {dynatrace-help}/dynatrace-api/environment-api/metric-v1/[Timeseries v1 API].
Configuration properties in the `v2` namespace apply only when exporting to the {dynatrace-help}/dynatrace-api/environment-api/metric-v2/post-ingest-metrics/[Metrics v2 API].
Note that this integration can export only to either the `v1` or `v2` version of the API at a time.
If the `device-id` (required for v1 but not used in v2) is set in the `v1` namespace, metrics are exported to the `v1` endpoint.
2021-07-17 00:17:57 +08:00
Otherwise, `v2` is assumed.
2021-04-19 16:33:10 +08:00
2021-07-15 19:41:52 +08:00
[[actuator.metrics.export.dynatrace.v2-api]]
2021-07-16 21:24:03 +08:00
===== v2 API
2021-09-09 04:00:58 +08:00
You can use the v2 API in two ways.
2021-04-19 16:33:10 +08:00
2021-09-09 04:42:40 +08:00
If a local OneAgent is running on the host, metrics are automatically exported to the {dynatrace-help}/how-to-use-dynatrace/metrics/metric-ingestion/ingestion-methods/local-api/[local OneAgent ingest endpoint].
2021-07-17 00:17:57 +08:00
The ingest endpoint forwards the metrics to the Dynatrace backend.
2021-09-09 04:42:40 +08:00
This is the default behavior and requires no special setup beyond a dependency on `io.micrometer:micrometer-registry-dynatrace`.
2021-04-19 16:33:10 +08:00
2021-07-17 00:17:57 +08:00
If no local OneAgent is running, the endpoint of the {dynatrace-help}/dynatrace-api/environment-api/metric-v2/post-ingest-metrics/[Metrics v2 API] and an API token are required.
2021-09-09 04:42:40 +08:00
The {dynatrace-help}/dynatrace-api/basics/dynatrace-api-authentication/[API token] must have the "`Ingest metrics`" (`metrics.ingest`) permission set.
We recommend limiting the scope of the token to this one permission.
You must ensure that the endpoint URI contains the path (for example, `/api/v2/metrics/ingest`):
2021-04-19 16:33:10 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
----
management:
metrics:
export:
dynatrace:
# uri: "https://{your-domain}/e/{your-environment-id}/api/v2/metrics/ingest" for managed deployments.
uri: "https://{your-environment-id}.live.dynatrace.com/api/v2/metrics/ingest"
api-token: "YOUR_TOKEN" # should be read from a secure source and not hard-coded.
----
When using the Dynatrace v2 API, the following optional features are available:
2021-09-09 04:42:40 +08:00
* Metric key prefix: Sets a prefix that is prepended to all exported metric keys.
* Enrich with Dynatrace metadata: If a OneAgent or Dynatrace operator is running, enrich metrics with additional metadata (for example, about the host, process, or pod).
* Default dimensions: Specify key-value pairs that are added to all exported metrics.
If tags with the same key are specified with Micrometer, they overwrite the default dimensions.
2021-07-16 21:24:03 +08:00
2021-04-19 16:33:10 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
----
management:
metrics:
export:
dynatrace:
2021-07-16 21:24:03 +08:00
# specify token and uri or leave blank for OneAgent export
2021-07-15 19:41:52 +08:00
v2:
metric-key-prefix: "your.key.prefix"
enrich-with-dynatrace-metadata: true
default-dimensions:
key1: "value1"
key2: "value2"
2021-04-19 16:33:10 +08:00
----
2021-07-17 00:17:57 +08:00
2021-07-15 19:41:52 +08:00
[[actuator.metrics.export.dynatrace.v1-api]]
===== v1 API (Legacy)
2021-09-09 04:42:40 +08:00
The Dynatrace v1 API metrics registry pushes metrics to the configured URI periodically by using the {dynatrace-help}/dynatrace-api/environment-api/metric-v1/[Timeseries v1 API].
For backwards-compatibility with existing setups, when `device-id` is set (required for v1, but not used in v2), metrics are exported to the Timeseries v1 endpoint.
2021-04-30 00:11:56 +08:00
To export metrics to {micrometer-registry-docs}/dynatrace[Dynatrace], your API token, device ID, and URI must be provided:
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
dynatrace:
2021-04-19 16:33:10 +08:00
# uri: "https://{your-domain}/e/{your-environment-id}" on managed deployments.
uri: "https://{your-environment-id}.live.dynatrace.com"
api-token: "YOUR_TOKEN" # should be read from a secure property source
2021-07-15 19:41:52 +08:00
v1:
device-id: "YOUR_DEVICE_ID"
2021-04-30 00:11:56 +08:00
----
2021-09-09 04:42:40 +08:00
For the v1 API, you must specify the base environment URI without a path, as the v1 endpoint path is added automatically.
2021-07-15 19:41:52 +08:00
2021-04-19 16:33:10 +08:00
2021-07-17 00:17:57 +08:00
[[actuator.metrics.export.dynatrace.version-independent-settings]]
===== Version-independent Settings
2021-07-16 21:24:03 +08:00
In addition to the API endpoint and token, you can also change the interval at which metrics are sent to Dynatrace.
2021-04-19 16:33:10 +08:00
The default export interval is `60s`.
2021-09-09 03:50:08 +08:00
The following example sets the export interval to 30 seconds:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
dynatrace:
step: "30s"
----
2021-09-09 04:00:58 +08:00
You can find more information on how to set up the Dynatrace exporter for Micrometer in {micrometer-registry-docs}/dynatrace[the Micrometer documentation].
2021-04-30 00:11:56 +08:00
2021-07-17 00:17:57 +08:00
2021-04-30 00:11:56 +08:00
[[actuator.metrics.export.elastic]]
==== Elastic
By default, metrics are exported to {micrometer-registry-docs}/elastic[Elastic] running on your local machine.
2021-09-09 04:00:58 +08:00
You can provide the location of the Elastic server to use by using the following property:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
elastic:
host: "https://elastic.example.com:8086"
----
[[actuator.metrics.export.ganglia]]
==== Ganglia
By default, metrics are exported to {micrometer-registry-docs}/ganglia[Ganglia] running on your local machine.
2021-09-09 03:50:08 +08:00
You can provide the http://ganglia.sourceforge.net[Ganglia server] host and port, as the following example shows:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
ganglia:
host: "ganglia.example.com"
port: 9649
----
[[actuator.metrics.export.graphite]]
==== Graphite
By default, metrics are exported to {micrometer-registry-docs}/graphite[Graphite] running on your local machine.
2021-09-09 03:50:08 +08:00
You can provide the https://graphiteapp.org[Graphite server] host and port, as the following example shows:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
graphite:
host: "graphite.example.com"
port: 9004
----
2021-09-09 04:42:40 +08:00
Micrometer provides a default `HierarchicalNameMapper` that governs how a dimensional meter ID is {micrometer-registry-docs}/graphite#_hierarchical_name_mapping[mapped to flat hierarchical names].
2021-04-30 00:11:56 +08:00
2021-09-09 03:18:33 +08:00
[TIP]
====
To take control over this behavior, define your `GraphiteMeterRegistry` and supply your own `HierarchicalNameMapper`.
2021-04-30 00:11:56 +08:00
An auto-configured `GraphiteConfig` and `Clock` beans are provided unless you define your own:
2021-05-05 01:42:11 +08:00
[source,java,indent=0,subs="verbatim"]
2021-04-30 00:11:56 +08:00
----
2021-05-06 14:41:52 +08:00
include::{docs-java}/actuator/metrics/export/graphite/MyGraphiteConfiguration.java[]
2021-04-30 00:11:56 +08:00
----
2021-09-09 03:18:33 +08:00
====
2021-04-30 00:11:56 +08:00
[[actuator.metrics.export.humio]]
==== Humio
2021-09-09 04:42:40 +08:00
By default, the Humio registry periodically pushes metrics to https://cloud.humio.com.
To export metrics to SaaS {micrometer-registry-docs}/humio[Humio], you must provide your API token:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
humio:
api-token: "YOUR_TOKEN"
----
2021-09-09 04:42:40 +08:00
You should also configure one or more tags to identify the data source to which metrics are pushed:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
humio:
tags:
alpha: "a"
bravo: "b"
----
[[actuator.metrics.export.influx]]
==== Influx
By default, metrics are exported to an {micrometer-registry-docs}/influx[Influx] v1 instance running on your local machine with the default configuration.
To export metrics to InfluxDB v2, configure the `org`, `bucket`, and authentication `token` for writing metrics.
2021-09-09 04:00:58 +08:00
You can provide the location of the https://www.influxdata.com[Influx server] to use by using:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
influx:
uri: "https://influx.example.com:8086"
----
[[actuator.metrics.export.jmx]]
==== JMX
Micrometer provides a hierarchical mapping to {micrometer-registry-docs}/jmx[JMX], primarily as a cheap and portable way to view metrics locally.
By default, metrics are exported to the `metrics` JMX domain.
2021-09-09 04:00:58 +08:00
You can provide the domain to use by using:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
jmx:
domain: "com.example.app.metrics"
----
2021-09-09 04:42:40 +08:00
Micrometer provides a default `HierarchicalNameMapper` that governs how a dimensional meter ID is {micrometer-registry-docs}/jmx#_hierarchical_name_mapping[mapped to flat hierarchical names].
2021-04-30 00:11:56 +08:00
2021-09-09 03:18:33 +08:00
[TIP]
====
To take control over this behavior, define your `JmxMeterRegistry` and supply your own `HierarchicalNameMapper`.
2021-04-30 00:11:56 +08:00
An auto-configured `JmxConfig` and `Clock` beans are provided unless you define your own:
2021-05-05 01:42:11 +08:00
[source,java,indent=0,subs="verbatim"]
2021-04-30 00:11:56 +08:00
----
2021-05-06 14:41:52 +08:00
include::{docs-java}/actuator/metrics/export/jmx/MyJmxConfiguration.java[]
2021-04-30 00:11:56 +08:00
----
2021-09-09 03:18:33 +08:00
====
2021-04-30 00:11:56 +08:00
[[actuator.metrics.export.kairos]]
==== KairosDB
By default, metrics are exported to {micrometer-registry-docs}/kairos[KairosDB] running on your local machine.
2021-09-09 04:00:58 +08:00
You can provide the location of the https://kairosdb.github.io/[KairosDB server] to use by using:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
kairos:
uri: "https://kairosdb.example.com:8080/api/v1/datapoints"
----
[[actuator.metrics.export.newrelic]]
==== New Relic
2021-09-09 04:42:40 +08:00
A New Relic registry periodically pushes metrics to {micrometer-registry-docs}/new-relic[New Relic].
To export metrics to https://newrelic.com[New Relic], you must provide your API key and account ID:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
newrelic:
api-key: "YOUR_KEY"
account-id: "YOUR_ACCOUNT_ID"
----
You can also change the interval at which metrics are sent to New Relic:
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
newrelic:
step: "30s"
----
2021-09-09 04:42:40 +08:00
By default, metrics are published through REST calls, but you can also use the Java Agent API if you have it on the classpath:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
newrelic:
client-provider-type: "insights-agent"
----
Finally, you can take full control by defining your own `NewRelicClientProvider` bean.
[[actuator.metrics.export.prometheus]]
==== Prometheus
2021-09-09 04:42:40 +08:00
{micrometer-registry-docs}/prometheus[Prometheus] expects to scrape or poll individual application instances for metrics.
Spring Boot provides an actuator endpoint at `/actuator/prometheus` to present a https://prometheus.io[Prometheus scrape] with the appropriate format.
2021-04-30 00:11:56 +08:00
2021-09-09 04:42:40 +08:00
TIP: By default, the endpoint is not available and must be exposed. See <<actuator#actuator.endpoints.exposing,exposing endpoints>> for more details.
2021-04-30 00:11:56 +08:00
2021-09-09 03:50:08 +08:00
The following example `scrape_config` adds to `prometheus.yml`:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim"]
2021-04-30 00:11:56 +08:00
----
scrape_configs:
- job_name: 'spring'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['HOST:PORT']
----
2021-09-09 04:42:40 +08:00
For ephemeral or batch jobs that may not exist long enough to be scraped, you can use https://github.com/prometheus/pushgateway[Prometheus Pushgateway] support to expose the metrics to Prometheus.
2021-04-30 00:11:56 +08:00
To enable Prometheus Pushgateway support, add the following dependency to your project:
2021-05-05 01:42:11 +08:00
[source,xml,indent=0,subs="verbatim"]
2021-04-30 00:11:56 +08:00
----
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_pushgateway</artifactId>
</dependency>
----
When the Prometheus Pushgateway dependency is present on the classpath and the configprop:management.metrics.export.prometheus.pushgateway.enabled[] property is set to `true`, a `PrometheusPushGatewayManager` bean is auto-configured.
This manages the pushing of metrics to a Prometheus Pushgateway.
2021-09-09 04:00:58 +08:00
You can tune the `PrometheusPushGatewayManager` by using properties under `management.metrics.export.prometheus.pushgateway`.
2021-04-30 00:11:56 +08:00
For advanced configuration, you can also provide your own `PrometheusPushGatewayManager` bean.
[[actuator.metrics.export.signalfx]]
==== SignalFx
2021-09-09 04:42:40 +08:00
SignalFx registry periodically pushes metrics to {micrometer-registry-docs}/signalFx[SignalFx].
To export metrics to https://www.signalfx.com[SignalFx], you must provide your access token:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
signalfx:
access-token: "YOUR_ACCESS_TOKEN"
----
You can also change the interval at which metrics are sent to SignalFx:
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
signalfx:
step: "30s"
----
[[actuator.metrics.export.simple]]
==== Simple
Micrometer ships with a simple, in-memory backend that is automatically used as a fallback if no other registry is configured.
2021-09-09 04:42:40 +08:00
This lets you see what metrics are collected in the <<actuator#actuator.metrics.endpoint,metrics endpoint>>.
2021-04-30 00:11:56 +08:00
2021-09-09 04:42:40 +08:00
The in-memory backend disables itself as soon as you use any other available backend.
2021-04-30 00:11:56 +08:00
You can also disable it explicitly:
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
simple:
enabled: false
----
[[actuator.metrics.export.stackdriver]]
==== Stackdriver
2021-09-09 04:42:40 +08:00
The Stackdriver registry periodically pushes metrics to https://cloud.google.com/stackdriver/[Stackdriver].
To export metrics to SaaS {micrometer-registry-docs}/stackdriver[Stackdriver], you must provide your Google Cloud project ID:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
stackdriver:
project-id: "my-project"
----
You can also change the interval at which metrics are sent to Stackdriver:
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
stackdriver:
step: "30s"
----
[[actuator.metrics.export.statsd]]
==== StatsD
2021-09-09 04:42:40 +08:00
The StatsD registry eagerly pushes metrics over UDP to a StatsD agent.
2021-04-30 00:11:56 +08:00
By default, metrics are exported to a {micrometer-registry-docs}/statsD[StatsD] agent running on your local machine.
2021-09-09 04:00:58 +08:00
You can provide the StatsD agent host, port, and protocol to use by using:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
statsd:
host: "statsd.example.com"
port: 9125
protocol: "udp"
----
2021-09-09 04:42:40 +08:00
You can also change the StatsD line protocol to use (it defaults to Datadog):
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
statsd:
flavor: "etsy"
----
[[actuator.metrics.export.wavefront]]
==== Wavefront
2021-09-09 04:42:40 +08:00
The Wavefront registry periodically pushes metrics to {micrometer-registry-docs}/wavefront[Wavefront].
If you are exporting metrics to https://www.wavefront.com/[Wavefront] directly, you must provide your API token:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
wavefront:
api-token: "YOUR_API_TOKEN"
----
2021-09-09 04:42:40 +08:00
Alternatively, you can use a Wavefront sidecar or an internal proxy in your environment to forward metrics data to the Wavefront API host:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
wavefront:
uri: "proxy://localhost:2878"
----
2021-09-09 04:42:40 +08:00
NOTE: If you publish metrics to a Wavefront proxy (as described in https://docs.wavefront.com/proxies_installing.html[the Wavefront documentation]), the host must be in the `proxy://HOST:PORT` format.
2021-04-30 00:11:56 +08:00
You can also change the interval at which metrics are sent to Wavefront:
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
export:
wavefront:
step: "30s"
----
[[actuator.metrics.supported]]
=== Supported Metrics and Meters
Spring Boot provides automatic meter registration for a wide variety of technologies.
2021-09-09 04:42:40 +08:00
In most situations, the defaults provide sensible metrics that can be published to any of the supported monitoring systems.
2021-04-30 00:11:56 +08:00
[[actuator.metrics.supported.jvm]]
==== JVM Metrics
2021-09-09 04:42:40 +08:00
Auto-configuration enables JVM Metrics by using core Micrometer classes.
2021-08-16 20:53:42 +08:00
JVM metrics are published under the `jvm.` meter name.
2021-04-30 00:11:56 +08:00
The following JVM metrics are provided:
* Various memory and buffer pool details
* Statistics related to garbage collection
2021-09-09 04:42:40 +08:00
* Thread utilization
* The number of classes loaded and unloaded
2021-04-30 00:11:56 +08:00
[[actuator.metrics.supported.system]]
==== System Metrics
2021-09-09 04:42:40 +08:00
Auto-configuration enables system metrics by using core Micrometer classes.
2021-08-16 20:53:42 +08:00
System metrics are published under the `system.`, `process.`, and `disk.` meter names.
2021-04-30 00:11:56 +08:00
The following system metrics are provided:
* CPU metrics
* File descriptor metrics
2021-09-09 04:42:40 +08:00
* Uptime metrics (both the amount of time the application has been running and a fixed gauge of the absolute start time)
2021-08-16 20:53:42 +08:00
* Disk space available
2021-04-30 00:11:56 +08:00
2021-09-16 16:00:39 +08:00
[[actuator.metrics.supported.application-startup]]
==== Application Startup Metrics
Auto-configuration exposes application startup time metrics:
* `application.started.time`: time taken to start the application.
* `application.ready.time`: time taken for the application to be ready to serve requests.
Metrics are tagged by the fully qualified name of the application class.
2021-04-30 00:11:56 +08:00
[[actuator.metrics.supported.logger]]
==== Logger Metrics
Auto-configuration enables the event metrics for both Logback and Log4J2.
2021-09-09 04:42:40 +08:00
The details are published under the `log4j2.events.` or `logback.events.` meter names.
2021-04-30 00:11:56 +08:00
2021-04-21 19:57:00 +08:00
[[actuator.metrics.supported.tasks]]
==== Task Execution and Scheduling Metrics
Auto-configuration enables the instrumentation of all available `ThreadPoolTaskExecutor` and `ThreadPoolTaskScheduler` beans, as long as the underling `ThreadPoolExecutor` is available.
2021-09-09 04:42:40 +08:00
Metrics are tagged by the name of the executor, which is derived from the bean name.
2021-04-21 19:57:00 +08:00
2021-04-30 00:11:56 +08:00
[[actuator.metrics.supported.spring-mvc]]
==== Spring MVC Metrics
Auto-configuration enables the instrumentation of all requests handled by Spring MVC controllers and functional handlers.
By default, metrics are generated with the name, `http.server.requests`.
2021-09-09 04:00:58 +08:00
You can customized the name by setting the configprop:management.metrics.web.server.request.metric-name[] property.
2021-04-30 00:11:56 +08:00
`@Timed` annotations are supported on `@Controller` classes and `@RequestMapping` methods (see <<actuator#actuator.metrics.supported.timed-annotation>> for details).
2021-09-09 04:42:40 +08:00
If you do not want to record metrics for all Spring MVC requests, you can set configprop:management.metrics.web.server.request.autotime.enabled[] to `false` and exclusively use `@Timed` annotations instead.
2021-04-30 00:11:56 +08:00
By default, Spring MVC related metrics are tagged with the following information:
|===
| Tag | Description
| `exception`
2021-09-09 04:42:40 +08:00
| The simple class name of any exception that was thrown while handling the request.
2021-04-30 00:11:56 +08:00
| `method`
2021-09-09 04:42:40 +08:00
| The request's method (for example, `GET` or `POST`)
2021-04-30 00:11:56 +08:00
| `outcome`
2021-09-09 04:42:40 +08:00
| The request's outcome, based on the status code of the response.
1xx is `INFORMATIONAL`, 2xx is `SUCCESS`, 3xx is `REDIRECTION`, 4xx is `CLIENT_ERROR`, and 5xx is `SERVER_ERROR`
2021-04-30 00:11:56 +08:00
| `status`
2021-09-09 04:42:40 +08:00
| The response's HTTP status code (for example, `200` or `500`)
2021-04-30 00:11:56 +08:00
| `uri`
2021-09-09 04:42:40 +08:00
| The request's URI template prior to variable substitution, if possible (for example, `/api/person/\{id}`)
2021-04-30 00:11:56 +08:00
|===
To add to the default tags, provide one or more ``@Bean``s that implement `WebMvcTagsContributor`.
To replace the default tags, provide a `@Bean` that implements `WebMvcTagsProvider`.
2021-09-09 04:42:40 +08:00
TIP: In some cases, exceptions handled in web controllers are not recorded as request metrics tags.
Applications can opt in and record exceptions by <<web#web.servlet.spring-mvc.error-handling, setting handled exceptions as request attributes>>.
2021-04-30 00:11:56 +08:00
[[actuator.metrics.supported.spring-webflux]]
==== Spring WebFlux Metrics
Auto-configuration enables the instrumentation of all requests handled by Spring WebFlux controllers and functional handlers.
By default, metrics are generated with the name, `http.server.requests`.
2021-09-09 04:00:58 +08:00
You can customize the name by setting the configprop:management.metrics.web.server.request.metric-name[] property.
2021-04-30 00:11:56 +08:00
`@Timed` annotations are supported on `@Controller` classes and `@RequestMapping` methods (see <<actuator#actuator.metrics.supported.timed-annotation>> for details).
2021-09-09 04:42:40 +08:00
If you do not want to record metrics for all Spring WebFlux requests, you can set configprop:management.metrics.web.server.request.autotime.enabled[] to `false` and exclusively use `@Timed` annotations instead.
2021-04-30 00:11:56 +08:00
By default, WebFlux related metrics are tagged with the following information:
|===
| Tag | Description
| `exception`
2021-09-09 04:42:40 +08:00
| The simple class name of any exception that was thrown while handling the request.
2021-04-30 00:11:56 +08:00
| `method`
2021-09-09 04:42:40 +08:00
| The request's method (for example, `GET` or `POST`)
2021-04-30 00:11:56 +08:00
| `outcome`
2021-09-09 04:42:40 +08:00
| The request's outcome, based on the status code of the response.
1xx is `INFORMATIONAL`, 2xx is `SUCCESS`, 3xx is `REDIRECTION`, 4xx is `CLIENT_ERROR`, and 5xx is `SERVER_ERROR`
2021-04-30 00:11:56 +08:00
| `status`
2021-09-09 04:42:40 +08:00
| The response's HTTP status code (for example, `200` or `500`)
2021-04-30 00:11:56 +08:00
| `uri`
2021-09-09 04:42:40 +08:00
| The request's URI template prior to variable substitution, if possible (for example, `/api/person/\{id}`)
2021-04-30 00:11:56 +08:00
|===
2021-09-09 04:42:40 +08:00
To add to the default tags, provide one or more beans that implement `WebFluxTagsContributor`.
To replace the default tags, provide a bean that implements `WebFluxTagsProvider`.
2021-04-30 00:11:56 +08:00
TIP: In some cases, exceptions handled in controllers and handler functions are not recorded as request metrics tags.
2021-09-09 04:42:40 +08:00
Applications can opt in and record exceptions by <<web#web.reactive.webflux.error-handling, setting handled exceptions as request attributes>>.
2021-04-30 00:11:56 +08:00
[[actuator.metrics.supported.jersey]]
==== Jersey Server Metrics
Auto-configuration enables the instrumentation of all requests handled by the Jersey JAX-RS implementation whenever Micrometer's `micrometer-jersey2` module is on the classpath.
By default, metrics are generated with the name, `http.server.requests`.
2021-09-09 04:00:58 +08:00
You can customize the name by setting the configprop:management.metrics.web.server.request.metric-name[] property.
2021-04-30 00:11:56 +08:00
`@Timed` annotations are supported on request-handling classes and methods (see <<actuator#actuator.metrics.supported.timed-annotation>> for details).
2021-09-09 04:42:40 +08:00
If you do not want to record metrics for all Jersey requests, you can set configprop:management.metrics.web.server.request.autotime.enabled[] to `false` and exclusively use `@Timed` annotations instead.
2021-04-30 00:11:56 +08:00
By default, Jersey server metrics are tagged with the following information:
|===
| Tag | Description
| `exception`
2021-09-09 04:42:40 +08:00
| The simple class name of any exception that was thrown while handling the request.
2021-04-30 00:11:56 +08:00
| `method`
2021-09-09 04:42:40 +08:00
| The request's method (for example, `GET` or `POST`)
2021-04-30 00:11:56 +08:00
| `outcome`
2021-09-09 04:42:40 +08:00
| The request's outcome, based on the status code of the response.
1xx is `INFORMATIONAL`, 2xx is `SUCCESS`, 3xx is `REDIRECTION`, 4xx is `CLIENT_ERROR`, and 5xx is `SERVER_ERROR`
2021-04-30 00:11:56 +08:00
| `status`
2021-09-09 04:42:40 +08:00
| The response's HTTP status code (for example, `200` or `500`)
2021-04-30 00:11:56 +08:00
| `uri`
2021-09-09 04:42:40 +08:00
| The request's URI template prior to variable substitution, if possible (for example, `/api/person/\{id}`)
2021-04-30 00:11:56 +08:00
|===
To customize the tags, provide a `@Bean` that implements `JerseyTagsProvider`.
[[actuator.metrics.supported.http-clients]]
==== HTTP Client Metrics
Spring Boot Actuator manages the instrumentation of both `RestTemplate` and `WebClient`.
For that, you have to inject the auto-configured builder and use it to create instances:
* `RestTemplateBuilder` for `RestTemplate`
* `WebClient.Builder` for `WebClient`
2021-09-09 04:00:58 +08:00
You can also manually apply the customizers responsible for this instrumentation, namely `MetricsRestTemplateCustomizer` and `MetricsWebClientCustomizer`.
2021-04-30 00:11:56 +08:00
By default, metrics are generated with the name, `http.client.requests`.
2021-09-09 04:00:58 +08:00
You can customize the name by setting the configprop:management.metrics.web.client.request.metric-name[] property.
2021-04-30 00:11:56 +08:00
By default, metrics generated by an instrumented client are tagged with the following information:
|===
| Tag | Description
| `clientName`
2021-09-09 04:42:40 +08:00
| The host portion of the URI
2021-04-30 00:11:56 +08:00
| `method`
2021-09-09 04:42:40 +08:00
| The request's method (for example, `GET` or `POST`)
2021-04-30 00:11:56 +08:00
| `outcome`
2021-09-09 04:42:40 +08:00
| The request's outcome, based on the status code of the response.
1xx is `INFORMATIONAL`, 2xx is `SUCCESS`, 3xx is `REDIRECTION`, 4xx is `CLIENT_ERROR`, and 5xx is `SERVER_ERROR`. Otherwise, it is `UNKNOWN`.
2021-04-30 00:11:56 +08:00
| `status`
2021-09-09 04:42:40 +08:00
| The response's HTTP status code if available (for example, `200` or `500`) or `IO_ERROR` in case of I/O issues. Otherwise, it is `CLIENT_ERROR`.
2021-04-30 00:11:56 +08:00
| `uri`
2021-09-09 04:42:40 +08:00
| The request's URI template prior to variable substitution, if possible (for example, `/api/person/\{id}`)
2021-04-30 00:11:56 +08:00
|===
To customize the tags, and depending on your choice of client, you can provide a `@Bean` that implements `RestTemplateExchangeTagsProvider` or `WebClientExchangeTagsProvider`.
There are convenience static functions in `RestTemplateExchangeTags` and `WebClientExchangeTags`.
[[actuator.metrics.supported.tomcat]]
==== Tomcat Metrics
2021-09-09 04:42:40 +08:00
Auto-configuration enables the instrumentation of Tomcat only when an `MBeanRegistry` is enabled.
2021-04-30 00:11:56 +08:00
By default, the `MBeanRegistry` is disabled, but you can enable it by setting configprop:server.tomcat.mbeanregistry.enabled[] to `true`.
Tomcat metrics are published under the `tomcat.` meter name.
[[actuator.metrics.supported.cache]]
==== Cache Metrics
2021-09-09 04:42:40 +08:00
Auto-configuration enables the instrumentation of all available `Cache` instances on startup, with metrics prefixed with `cache`.
2021-04-30 00:11:56 +08:00
Cache instrumentation is standardized for a basic set of metrics.
Additional, cache-specific metrics are also available.
The following cache libraries are supported:
* Caffeine
* EhCache 2
* Hazelcast
* Any compliant JCache (JSR-107) implementation
* Redis
2021-09-09 04:42:40 +08:00
Metrics are tagged by the name of the cache and by the name of the `CacheManager`, which is derived from the bean name.
2021-04-30 00:11:56 +08:00
NOTE: Only caches that are configured on startup are bound to the registry.
2021-09-09 04:42:40 +08:00
For caches not defined in the cache’ s configuration, such as caches created on the fly or programmatically after the startup phase, an explicit registration is required.
2021-04-30 00:11:56 +08:00
A `CacheMetricsRegistrar` bean is made available to make that process easier.
[[actuator.metrics.supported.jdbc]]
==== DataSource Metrics
Auto-configuration enables the instrumentation of all available `DataSource` objects with metrics prefixed with `jdbc.connections`.
2021-09-09 04:42:40 +08:00
Data source instrumentation results in gauges that represent the currently active, idle, maximum allowed, and minimum allowed connections in the pool.
2021-04-30 00:11:56 +08:00
Metrics are also tagged by the name of the `DataSource` computed based on the bean name.
2021-09-09 04:42:40 +08:00
TIP: By default, Spring Boot provides metadata for all supported data sources.
2021-09-09 03:18:33 +08:00
You can add additional `DataSourcePoolMetadataProvider` beans if your favorite data source is not supported.
2021-04-30 00:11:56 +08:00
See `DataSourcePoolMetadataProvidersConfiguration` for examples.
Also, Hikari-specific metrics are exposed with a `hikaricp` prefix.
2021-09-09 04:42:40 +08:00
Each metric is tagged by the name of the pool (you can control it with `spring.datasource.name`).
2021-04-30 00:11:56 +08:00
[[actuator.metrics.supported.hibernate]]
==== Hibernate Metrics
If `org.hibernate:hibernate-micrometer` is on the classpath, all available Hibernate `EntityManagerFactory` instances that have statistics enabled are instrumented with a metric named `hibernate`.
2021-09-09 04:42:40 +08:00
Metrics are also tagged by the name of the `EntityManagerFactory`, which is derived from the bean name.
2021-04-30 00:11:56 +08:00
To enable statistics, the standard JPA property `hibernate.generate_statistics` must be set to `true`.
2021-09-09 04:42:40 +08:00
You can enable that on the auto-configured `EntityManagerFactory`:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
spring:
jpa:
properties:
"[hibernate.generate_statistics]": true
----
[[actuator.metrics.supported.spring-data-repository]]
==== Spring Data Repository Metrics
Auto-configuration enables the instrumentation of all Spring Data `Repository` method invocations.
By default, metrics are generated with the name, `spring.data.repository.invocations`.
2021-09-09 04:00:58 +08:00
You can customize the name by setting the configprop:management.metrics.data.repository.metric-name[] property.
2021-04-30 00:11:56 +08:00
`@Timed` annotations are supported on `Repository` classes and methods (see <<actuator#actuator.metrics.supported.timed-annotation>> for details).
2021-09-09 04:42:40 +08:00
If you do not want to record metrics for all `Repository` invocations, you can set configprop:management.metrics.data.repository.autotime.enabled[] to `false` and exclusively use `@Timed` annotations instead.
2021-04-30 00:11:56 +08:00
By default, repository invocation related metrics are tagged with the following information:
|===
| Tag | Description
| `repository`
2021-09-09 04:42:40 +08:00
| The simple class name of the source `Repository`.
2021-04-30 00:11:56 +08:00
| `method`
| The name of the `Repository` method that was invoked.
| `state`
2021-09-09 04:42:40 +08:00
| The result state (`SUCCESS`, `ERROR`, `CANCELED`, or `RUNNING`).
2021-04-30 00:11:56 +08:00
| `exception`
2021-09-09 04:42:40 +08:00
| The simple class name of any exception that was thrown from the invocation.
2021-04-30 00:11:56 +08:00
|===
To replace the default tags, provide a `@Bean` that implements `RepositoryTagsProvider`.
[[actuator.metrics.supported.rabbitmq]]
==== RabbitMQ Metrics
2021-09-09 04:42:40 +08:00
Auto-configuration enables the instrumentation of all available RabbitMQ connection factories with a metric named `rabbitmq`.
2021-04-30 00:11:56 +08:00
[[actuator.metrics.supported.spring-integration]]
==== Spring Integration Metrics
2021-09-09 04:42:40 +08:00
Spring Integration automatically provides {spring-integration-docs}system-management.html#micrometer-integration[Micrometer support] whenever a `MeterRegistry` bean is available.
2021-04-30 00:11:56 +08:00
Metrics are published under the `spring.integration.` meter name.
[[actuator.metrics.supported.kafka]]
==== Kafka Metrics
2021-09-09 04:42:40 +08:00
Auto-configuration registers a `MicrometerConsumerListener` and `MicrometerProducerListener` for the auto-configured consumer factory and producer factory, respectively.
It alsos registers a `KafkaStreamsMicrometerListener` for `StreamsBuilderFactoryBean`.
For more detail, see the {spring-kafka-docs}#micrometer-native[Micrometer Native Metrics] section of the Spring Kafka documentation.
2021-04-30 00:11:56 +08:00
[[actuator.metrics.supported.mongodb]]
==== MongoDB Metrics
2021-09-09 03:18:33 +08:00
This section briefly describes the available metrics for MongoDB.
2021-04-30 00:11:56 +08:00
[[actuator.metrics.supported.mongodb.command]]
2021-09-09 04:42:40 +08:00
===== MongoDB Command Metrics
Auto-configuration registers a `MongoMetricsCommandListener` with the auto-configured `MongoClient`.
2021-04-30 00:11:56 +08:00
2021-09-09 04:42:40 +08:00
A timer metric named `mongodb.driver.commands` is created for each command issued to the underlying MongoDB driver.
2021-04-30 00:11:56 +08:00
Each metric is tagged with the following information by default:
|===
| Tag | Description
| `command`
2021-09-09 04:42:40 +08:00
| The name of the command issued.
2021-04-30 00:11:56 +08:00
| `cluster.id`
2021-09-09 04:42:40 +08:00
| The identifier of the cluster to which the command was sent.
2021-04-30 00:11:56 +08:00
| `server.address`
2021-09-09 04:42:40 +08:00
| The address of the server to which the command was sent.
2021-04-30 00:11:56 +08:00
| `status`
2021-09-09 04:42:40 +08:00
| The outcome of the command (`SUCCESS` or `FAILED`).
2021-04-30 00:11:56 +08:00
|===
2021-09-09 03:50:08 +08:00
To replace the default metric tags, define a `MongoCommandTagsProvider` bean, as the following example shows:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,java,indent=0,subs="verbatim"]
2021-04-30 00:11:56 +08:00
----
2021-05-04 12:16:45 +08:00
include::{docs-java}/actuator/metrics/supported/mongodb/command/MyCommandTagsProviderConfiguration.java[]
2021-04-30 00:11:56 +08:00
----
To disable the auto-configured command metrics, set the following property:
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
mongo:
command:
enabled: false
----
[[actuator.metrics.supported.mongodb.connection-pool]]
2021-09-09 04:42:40 +08:00
===== MongoDB Connection Pool Metrics
Auto-configuration registers a `MongoMetricsConnectionPoolListener` with the auto-configured `MongoClient`.
2021-04-30 00:11:56 +08:00
The following gauge metrics are created for the connection pool:
2021-09-09 04:42:40 +08:00
* `mongodb.driver.pool.size` reports the current size of the connection pool, including idle and and in-use members.
* `mongodb.driver.pool.checkedout` reports the count of connections that are currently in use.
* `mongodb.driver.pool.waitqueuesize` reports the current size of the wait queue for a connection from the pool.
2021-04-30 00:11:56 +08:00
Each metric is tagged with the following information by default:
|===
| Tag | Description
| `cluster.id`
2021-09-09 04:42:40 +08:00
| The identifier of the cluster to which the connection pool corresponds.
2021-04-30 00:11:56 +08:00
| `server.address`
2021-09-09 04:42:40 +08:00
| The address of the server to which the connection pool corresponds.
2021-04-30 00:11:56 +08:00
|===
2021-09-09 04:42:40 +08:00
To replace the default metric tags, define a `MongoConnectionPoolTagsProvider` bean:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,java,indent=0,subs="verbatim"]
2021-04-30 00:11:56 +08:00
----
2021-05-04 12:16:45 +08:00
include::{docs-java}/actuator/metrics/supported/mongodb/connectionpool/MyConnectionPoolTagsProviderConfiguration.java[]
2021-04-30 00:11:56 +08:00
----
To disable the auto-configured connection pool metrics, set the following property:
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
mongo:
connectionpool:
enabled: false
----
2021-07-13 19:18:07 +08:00
[[actuator.metrics.supported.jetty]]
==== Jetty Metrics
2021-09-09 04:42:40 +08:00
Auto-configuration binds metrics for Jetty's `ThreadPool` by using Micrometer's `JettyServerThreadPoolMetrics`.
Metrics for Jetty's `Connector` instances are bound by using Micrometer's `JettyConnectionMetrics` and, when configprop:server.ssl.enabled[] is set to `true`, Micrometer's `JettySslHandshakeMetrics`.
2021-07-13 19:18:07 +08:00
2021-04-30 00:11:56 +08:00
[[actuator.metrics.supported.timed-annotation]]
==== @Timed Annotation Support
2021-09-09 04:00:58 +08:00
You can use the `@Timed` annotation from the `io.micrometer.core.annotation` package with several of the supported technologies described earlier.
If supported, you can use the annotation at either the class level or the method level.
2021-04-30 00:11:56 +08:00
2021-09-09 04:42:40 +08:00
For example, the following code shows how you can use the annotation to instrument all request mappings in a `@RestController`:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,java,indent=0,subs="verbatim"]
2021-04-30 00:11:56 +08:00
----
2021-05-03 06:59:28 +08:00
include::{docs-java}/actuator/metrics/supported/timedannotation/all/MyController.java[]
2021-04-30 00:11:56 +08:00
----
2021-09-09 04:42:40 +08:00
If you want only to instrument a single mapping, you can use the annotation on the method instead of the class:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,java,indent=0,subs="verbatim"]
2021-04-30 00:11:56 +08:00
----
2021-05-03 06:59:28 +08:00
include::{docs-java}/actuator/metrics/supported/timedannotation/single/MyController.java[]
2021-04-30 00:11:56 +08:00
----
2021-09-09 04:42:40 +08:00
You can also combine class-level and method-level annotations if you want to change the timing details for a specific method:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,java,indent=0,subs="verbatim"]
2021-04-30 00:11:56 +08:00
----
2021-05-03 06:59:28 +08:00
include::{docs-java}/actuator/metrics/supported/timedannotation/change/MyController.java[]
2021-04-30 00:11:56 +08:00
----
2021-09-09 04:42:40 +08:00
NOTE: A `@Timed` annotation with `longTask = true` enables a long task timer for the method.
Long task timers require a separate metric name and can be stacked with a short task timer.
2021-04-30 00:11:56 +08:00
2021-09-03 20:34:34 +08:00
[[actuator.metrics.supported.redis]]
==== Redis Metrics
2021-09-14 15:32:47 +08:00
Auto-configuration registers a `MicrometerCommandLatencyRecorder` for the auto-configured `LettuceConnectionFactory`.
For more details refer to the {lettuce-docs}#command.latency.metrics.micrometer[Micrometer Metrics section] of the Lettuce documentation.
2021-09-03 20:34:34 +08:00
2021-04-30 00:11:56 +08:00
[[actuator.metrics.registering-custom]]
=== Registering Custom Metrics
2021-09-09 04:42:40 +08:00
To register custom metrics, inject `MeterRegistry` into your component:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,java,indent=0,subs="verbatim"]
2021-04-30 00:11:56 +08:00
----
2021-05-04 12:16:45 +08:00
include::{docs-java}/actuator/metrics/registeringcustom/MyBean.java[]
2021-04-30 00:11:56 +08:00
----
2021-09-09 04:42:40 +08:00
If your metrics depend on other beans, we recommend that you use a `MeterBinder` to register them:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,java,indent=0,subs="verbatim"]
2021-04-30 00:11:56 +08:00
----
2021-05-04 12:16:45 +08:00
include::{docs-java}/actuator/metrics/registeringcustom/MyMeterBinderConfiguration.java[]
2021-04-30 00:11:56 +08:00
----
Using a `MeterBinder` ensures that the correct dependency relationships are set up and that the bean is available when the metric's value is retrieved.
A `MeterBinder` implementation can also be useful if you find that you repeatedly instrument a suite of metrics across components or applications.
2021-09-09 04:42:40 +08:00
NOTE: By default, metrics from all `MeterBinder` beans are automatically bound to the Spring-managed `MeterRegistry`.
2021-04-30 00:11:56 +08:00
[[actuator.metrics.customizing]]
=== Customizing Individual Metrics
2021-09-09 04:42:40 +08:00
If you need to apply customizations to specific `Meter` instances, you can use the `io.micrometer.core.instrument.config.MeterFilter` interface.
2021-04-30 00:11:56 +08:00
For example, if you want to rename the `mytag.region` tag to `mytag.area` for all meter IDs beginning with `com.example`, you can do the following:
2021-05-05 01:42:11 +08:00
[source,java,indent=0,subs="verbatim"]
2021-04-30 00:11:56 +08:00
----
2021-05-04 12:16:45 +08:00
include::{docs-java}/actuator/metrics/customizing/MyMetricsFilterConfiguration.java[]
2021-04-30 00:11:56 +08:00
----
2021-09-09 04:42:40 +08:00
NOTE: By default, all `MeterFilter` beans are automatically bound to the Spring-managed `MeterRegistry`.
Make sure to register your metrics by using the Spring-managed `MeterRegistry` and not any of the static methods on `Metrics`.
2021-04-30 00:11:56 +08:00
These use the global registry that is not Spring-managed.
[[actuator.metrics.customizing.common-tags]]
==== Common Tags
2021-09-09 04:42:40 +08:00
Common tags are generally used for dimensional drill-down on the operating environment, such as host, instance, region, stack, and others.
2021-09-09 03:50:08 +08:00
Commons tags are applied to all meters and can be configured, as the following example shows:
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
tags:
region: "us-east-1"
stack: "prod"
----
2021-09-09 04:42:40 +08:00
The preceding example adds `region` and `stack` tags to all meters with a value of `us-east-1` and `prod`, respectively.
2021-04-30 00:11:56 +08:00
2021-09-09 04:42:40 +08:00
NOTE: The order of common tags is important if you use Graphite.
As the order of common tags cannot be guaranteed by using this approach, Graphite users are advised to define a custom `MeterFilter` instead.
2021-04-30 00:11:56 +08:00
[[actuator.metrics.customizing.per-meter-properties]]
==== Per-meter Properties
2021-09-09 04:00:58 +08:00
In addition to `MeterFilter` beans, you can apply a limited set of customization on a per-meter basis by using properties.
Per-meter customizations apply to any meter IDs that start with the given name.
2021-09-09 03:50:08 +08:00
The following example disables any meters that have an ID starting with `example.remote`
2021-04-30 00:11:56 +08:00
2021-05-05 01:42:11 +08:00
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
2021-04-30 00:11:56 +08:00
----
management:
metrics:
enable:
example:
remote: false
----
The following properties allow per-meter customization:
.Per-meter customizations
|===
| Property | Description
| configprop:management.metrics.enable[]
2021-09-09 04:42:40 +08:00
| Whether to prevent meters from emitting any metrics.
2021-04-30 00:11:56 +08:00
| configprop:management.metrics.distribution.percentiles-histogram[]
| Whether to publish a histogram suitable for computing aggregable (across dimension) percentile approximations.
| configprop:management.metrics.distribution.minimum-expected-value[], configprop:management.metrics.distribution.maximum-expected-value[]
2021-09-09 04:42:40 +08:00
| Publish fewer histogram buckets by clamping the range of expected values.
2021-04-30 00:11:56 +08:00
| configprop:management.metrics.distribution.percentiles[]
| Publish percentile values computed in your application
2021-08-16 16:05:47 +08:00
| configprop:management.metrics.distribution.expiry[], configprop:management.metrics.distribution.buffer-length[]
| Give greater weight to recent samples by accumulating them in ring buffers which rotate after a configurable expiry, with a
configurable buffer length.
2021-04-30 00:11:56 +08:00
| configprop:management.metrics.distribution.slo[]
| Publish a cumulative histogram with buckets defined by your service-level objectives.
|===
2021-09-09 04:42:40 +08:00
For more details on the concepts behind `percentiles-histogram`, `percentiles`, and `slo`, see the {micrometer-concepts-docs}#_histograms_and_percentiles["`Histograms and percentiles`" section] of the Micrometer documentation.
2021-04-30 00:11:56 +08:00
[[actuator.metrics.endpoint]]
=== Metrics Endpoint
2021-09-09 04:42:40 +08:00
Spring Boot provides a `metrics` endpoint that you can use diagnostically to examine the metrics collected by an application.
The endpoint is not available by default and must be exposed. See <<actuator#actuator.endpoints.exposing,exposing endpoints>> for more details.
2021-04-30 00:11:56 +08:00
Navigating to `/actuator/metrics` displays a list of available meter names.
2021-09-09 03:18:33 +08:00
You can drill down to view information about a particular meter by providing its name as a selector -- for example, `/actuator/metrics/jvm.memory.max`.
2021-04-30 00:11:56 +08:00
[TIP]
====
2021-09-09 04:42:40 +08:00
The name you use here should match the name used in the code, not the name after it has been naming-convention normalized for a monitoring system to which it is shipped.
2021-04-30 00:11:56 +08:00
In other words, if `jvm.memory.max` appears as `jvm_memory_max` in Prometheus because of its snake case naming convention, you should still use `jvm.memory.max` as the selector when inspecting the meter in the `metrics` endpoint.
====
2021-09-09 04:42:40 +08:00
You can also add any number of `tag=KEY:VALUE` query parameters to the end of the URL to dimensionally drill down on a meter -- for example, `/actuator/metrics/jvm.memory.max?tag=area:nonheap`.
2021-04-30 00:11:56 +08:00
[TIP]
====
2021-09-09 04:42:40 +08:00
The reported measurements are the _sum_ of the statistics of all meters that match the meter name and any tags that have been applied.
In the preceding example, the returned `Value` statistic is the sum of the maximum memory footprints of the "`Code Cache`", "`Compressed Class Space`", and "`Metaspace`" areas of the heap.
If you wanted to see only the maximum size for the "`Metaspace`", you could add an additional `tag=id:Metaspace` -- that is, `/actuator/metrics/jvm.memory.max?tag=area:nonheap&tag=id:Metaspace`.
2021-04-30 00:11:56 +08:00
====