Spring Cloud Stream provides a module called spring-cloud-stream-metrics
that can be used to emit any available metric from Spring Boot metrics endpoint to a named channel.
This module allow operators to collect metrics from stream applications without relying on polling their endpoints.
The module is activated when you set the destination name for metrics binding, e.g. spring.cloud.stream.bindings.applicationMetrics.destination=<DESTINATION_NAME>
.
applicationMetrics
can be configured in a similar fashion to any other producer binding.
The default contentType
setting of applicationMetrics
is application/json
.
The following properties can be used for customizing the emission of metrics:
${spring.application.name:${vcap.application.name:${spring.config.name:application}}}
Prefix string to be prepended to the metrics key.
Default: ``
Just like the includes
option, it allows white listing application properties that will be added to the metrics payload
Default: null.
A detailed overview of the metrics export process can be found in the Spring Boot reference documentation.
Spring Cloud Stream provides a metric exporter named application
that can be configured via regular Spring Boot metrics configuration properties.
The exporter can be configured either by using the global Spring Boot configuration settings for exporters, or by using exporter-specific properties.
For using the global configuration settings, the properties should be prefixed by spring.metric.export
(e.g. spring.metric.export.includes=integration**
).
These configuration options will apply to all exporters (unless they have been configured differently).
Alternatively, if it is intended to use configuration settings that are different from the other exporters (e.g. for restricting the number of metrics published), the Spring Cloud Stream provided metrics exporter can be configured using the prefix spring.metrics.export.triggers.application
(e.g. spring.metrics.export.triggers.application.includes=integration**
).
![]() | Note |
---|---|
Due to Spring Boot’s relaxed binding the value of a property being included can be slightly different than the original value. As a rule of thumb, the metric exporter will attempt to normalize all the properties in a consistent format using the dot notation (e.g. The goal of normalization is to make downstream consumers of those metrics capable of receiving property names consistently, regardless of how they are set on the monitored application ( |
Below is a sample of the data published to the channel in JSON format by the following command:
java -jar time-source.jar \ --spring.cloud.stream.bindings.applicationMetrics.destination=someMetrics \ --spring.cloud.stream.metrics.properties=spring.application** \ --spring.metrics.export.includes=integration.channel.input**,integration.channel.output**
The resulting JSON is:
{ "name":"time-source", "metrics":[ { "name":"integration.channel.output.errorRate.mean", "value":0.0, "timestamp":"2017-04-11T16:56:35.790Z" }, { "name":"integration.channel.output.errorRate.max", "value":0.0, "timestamp":"2017-04-11T16:56:35.790Z" }, { "name":"integration.channel.output.errorRate.min", "value":0.0, "timestamp":"2017-04-11T16:56:35.790Z" }, { "name":"integration.channel.output.errorRate.stdev", "value":0.0, "timestamp":"2017-04-11T16:56:35.790Z" }, { "name":"integration.channel.output.errorRate.count", "value":0.0, "timestamp":"2017-04-11T16:56:35.790Z" }, { "name":"integration.channel.output.sendCount", "value":6.0, "timestamp":"2017-04-11T16:56:35.790Z" }, { "name":"integration.channel.output.sendRate.mean", "value":0.994885872292989, "timestamp":"2017-04-11T16:56:35.790Z" }, { "name":"integration.channel.output.sendRate.max", "value":1.006247080013156, "timestamp":"2017-04-11T16:56:35.790Z" }, { "name":"integration.channel.output.sendRate.min", "value":1.0012035220116378, "timestamp":"2017-04-11T16:56:35.790Z" }, { "name":"integration.channel.output.sendRate.stdev", "value":6.505181111084848E-4, "timestamp":"2017-04-11T16:56:35.790Z" }, { "name":"integration.channel.output.sendRate.count", "value":6.0, "timestamp":"2017-04-11T16:56:35.790Z" } ], "createdTime":"2017-04-11T20:56:35.790Z", "properties":{ "spring.application.name":"time-source", "spring.application.index":"0" } }