34. Metrics Emitter
Spring Cloud Stream 提供了一个名为spring-cloud-stream-metrics
的模块,可用于从Spring Boot metrics 端点发出任何可用的度量标准到命名的 channel。此模块允许 operators 从 stream applications 收集 metrics,而不依赖于轮询其 endpoints。
为 metrics binding,e.g 设置目标 name 时,将激活该模块。 spring.cloud.stream.bindings.applicationMetrics.destination=<DESTINATION_NAME>
。 applicationMetrics
可以以与任何其他 producer binding 类似的方式配置。 applicationMetrics
的默认contentType
设置为application/json
。
以下 properties 可用于自定义 metrics 的发射:
-
spring.cloud.stream.metrics.key
- 要发出的度量标准的 name。应该是每个 application 的唯一 value。
-
默认
${spring.application.name:${vcap.application.name:${spring.config.name:application}}}
-
spring.cloud.stream.metrics.prefix
- 前缀 string 将添加到 metrics key 之前。
默认值:``
-
spring.cloud.stream.metrics.properties
- 就像
includes
选项一样,它允许将白名单 application properties 添加到 metrics 有效负载中
- 就像
默认值:null。
可以在Spring Boot reference 文档中找到 metrics export process 的详细概述。 Spring Cloud Stream 提供了一个名为application
的度量导出器,可以通过常规Spring Boot metrics configuration properties进行配置。
可以使用导出程序的 global Spring Boot configuration 设置或使用 exporter-specific properties 来配置导出程序。要使用 global configuration 设置,properties 应以spring.metric.export
(e.g. spring.metric.export.includes=integration**
)作为前缀。这些 configuration 选项将应用于所有导出器(除非它们的配置不同)。或者,如果打算使用与其他导出程序不同的 configuration 设置(e.g. 用于限制已发布的 metrics 的数量),则可以使用前缀spring.metrics.export.triggers.application
(e.g .spring.metrics.export.triggers.application.includes=integration**
)配置 Spring Cloud Stream 提供的 metrics 导出程序。
由于 Spring Boot 的轻松 binding,包含 property 的 value 可能与原始 value 略有不同。
根据经验,度量标准导出器将尝试使用点表示法(e.g. JAVA_HOME
变为java.home
)以一致格式标准化所有 properties。
规范化的目标是使那些 metrics 的下游消费者能够始终如一地接收 property 名称,无论他们如何在受监视的 application 上设置它们(--spring.application.name
或SPRING_APPLICATION_NAME
总是 yield spring.application.name
)。
下面是通过以下命令以 JSON 格式发布到 channel 的数据的示例:
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**
生成的 JSON 是:
{
"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"
}
}