使用 Micrometer 同时向多个监控系统发布 Spring MVC 指标
Publish Spring MVC Metrics To Multiple Monitoring System Simultaneously Using Micrometer
我有一个用例,其中我想将我的 spring 启动 API 指标同时发布到 Datadog 和 CloudWatch。
我已将以下依赖项添加到我的 pom。
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-statsd</artifactId>
<version>${micrometer.version}</version>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-cloudwatch</artifactId>
<version>${micrometer.version}</version>
</dependency>
主要应用程序class
@SpringBootApplication
public class MyApplication {
@Bean
MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {
return registry -> registry.config().commonTags("my-tag", "my-common-tag");
}
}
我也在 application. properties
中添加了所有必需的属性。
我可以看到正在使用默认指标名称将指标发布到 Datadog 和 CloudWatch http.server.request
但我希望 Datadog 的指标名称不同,为此,我添加了以下 属性.
management.metrics.web.server.requests-metric-name = i.want.to.be.different
但这会更改 CloudWatch 和 Datadog 的名称。
我的问题是,我怎样才能只更改 Datadog 的默认指标名称或使两者的词不同。
Micrometer 使用在 MeterRegistry
中注册的 MeterFilter
来修改已注册的仪表。修改包括将仪表 ID 映射到不同内容的能力。
在 Spring 引导中,您可以使用 MeterRegistryCustomizer
bean 将 MeterFilter
添加到注册表。您可以使用泛型来处理特定类型的注册表,例如 MeterRegistryCustomizer<DatadogMeterRegistry>
对于只对自定义 Datadog 注册表感兴趣的定制器。
综合起来,您可以使用以下 bean 将 http.server.request
仪表的 ID 映射到 i.want.to.be.different
:
@Bean
MeterRegistryCustomizer<DatadogMeterRegistry> datadogMeterIdCustomizer() {
return (registry) -> registry.config().meterFilter(new MeterFilter() {
@Override
public Id map(Id id) {
if ("http.server.request".equals(id.getName())) {
return id.withName("i.want.to.be.different");
}
return id;
}
});
}
我有一个用例,其中我想将我的 spring 启动 API 指标同时发布到 Datadog 和 CloudWatch。
我已将以下依赖项添加到我的 pom。
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-statsd</artifactId>
<version>${micrometer.version}</version>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-cloudwatch</artifactId>
<version>${micrometer.version}</version>
</dependency>
主要应用程序class
@SpringBootApplication
public class MyApplication {
@Bean
MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {
return registry -> registry.config().commonTags("my-tag", "my-common-tag");
}
}
我也在 application. properties
中添加了所有必需的属性。
我可以看到正在使用默认指标名称将指标发布到 Datadog 和 CloudWatch http.server.request
但我希望 Datadog 的指标名称不同,为此,我添加了以下 属性.
management.metrics.web.server.requests-metric-name = i.want.to.be.different
但这会更改 CloudWatch 和 Datadog 的名称。
我的问题是,我怎样才能只更改 Datadog 的默认指标名称或使两者的词不同。
Micrometer 使用在 MeterRegistry
中注册的 MeterFilter
来修改已注册的仪表。修改包括将仪表 ID 映射到不同内容的能力。
在 Spring 引导中,您可以使用 MeterRegistryCustomizer
bean 将 MeterFilter
添加到注册表。您可以使用泛型来处理特定类型的注册表,例如 MeterRegistryCustomizer<DatadogMeterRegistry>
对于只对自定义 Datadog 注册表感兴趣的定制器。
综合起来,您可以使用以下 bean 将 http.server.request
仪表的 ID 映射到 i.want.to.be.different
:
@Bean
MeterRegistryCustomizer<DatadogMeterRegistry> datadogMeterIdCustomizer() {
return (registry) -> registry.config().meterFilter(new MeterFilter() {
@Override
public Id map(Id id) {
if ("http.server.request".equals(id.getName())) {
return id.withName("i.want.to.be.different");
}
return id;
}
});
}