Spring 启动 Actuator/Micrometer 指标禁用一些
Spring Boot Actuator/Micrometer Metrics Disable Some
有没有办法关闭 Actuator/Micrometer 中的某些返回指标值?现在看着它们,我看到大约 1000 个,我想将它们减少到 select 少数人说 100 个实际发送到我们的注册表。
Meter filters 可以通过 Micrometer slack 频道讨论过的 3 种方式提供帮助:
- 禁用指标
- 合并维度
- 高基数上限过滤器
Micrometer 内置第一种 meter 过滤器。它还支持分层 enabling/disabling,类似于日志记录的工作方式(如果有像 my.request.total
和 my.request.latency
您可以禁用所有以 my.request
.
开头的指标
我已经实现了我自己的 组合过滤器 示例,如果您有一个具有高基数的指标并希望将它们组合到新的维度中,这将非常有用。例如,您有一个关于状态代码的维度,这使您可以将 200、201、203 响应代码组合为一个标记 2xx
。这类似于 Netflix Spectator 'placeholder' 支持。我很乐意在上游贡献该代码,但目前它是非常定制的,因此需要一些工作才能使其普遍可用。
用于捕获 高基数 维度的最后一种类型尚未创建,但将作为安全阀存在,确保如果指标可能具有大量标签值,它将计算唯一标签的数量,一旦达到最大值,禁用或将其他标签组合到一个公共桶中,这样该值就不会爆炸并可能使您的监控不堪重负(或花费您很多美元$$,如果按指标付费)
让我用几个例子详细说明 checketts 发布的答案。您可以在 application.yml
中 enable/disable 某些指标,如下所示:
management:
metrics:
enable:
tomcat: true
jvm: false
process: false
hikaricp: false
system: false
jdbc: false
http: false
logback: true
或者在代码中定义一个 MeterFilter bean:
@Bean
public MeterFilter meterFilter() {
return new MeterFilter() {
@Override
public MeterFilterReply accept(Meter.Id id) {
if(id.getName().startsWith("tomcat.")) {
return MeterFilterReply.DENY;
}
if(id.getName().startsWith("jvm.")) {
return MeterFilterReply.DENY;
}
if(id.getName().startsWith("process.")) {
return MeterFilterReply.DENY;
}
if(id.getName().startsWith("system.")) {
return MeterFilterReply.DENY;
}
return MeterFilterReply.NEUTRAL;
}
};
}
中的 属性 命名在 Spring Boot 2 中发生了变化。例如,要禁用现在的 JVM 指标:
management.metrics.binders.jvm.enabled=false
有关其他选项,请参阅 this class。 Spring 团队在 2.1.x
中再次重构,那些内部工厂 bean 类 现在被提取到独立文件中,但 属性 命名与 2.0.x
.
有没有办法关闭 Actuator/Micrometer 中的某些返回指标值?现在看着它们,我看到大约 1000 个,我想将它们减少到 select 少数人说 100 个实际发送到我们的注册表。
Meter filters 可以通过 Micrometer slack 频道讨论过的 3 种方式提供帮助:
- 禁用指标
- 合并维度
- 高基数上限过滤器
Micrometer 内置第一种 meter 过滤器。它还支持分层 enabling/disabling,类似于日志记录的工作方式(如果有像 my.request.total
和 my.request.latency
您可以禁用所有以 my.request
.
我已经实现了我自己的 组合过滤器 示例,如果您有一个具有高基数的指标并希望将它们组合到新的维度中,这将非常有用。例如,您有一个关于状态代码的维度,这使您可以将 200、201、203 响应代码组合为一个标记 2xx
。这类似于 Netflix Spectator 'placeholder' 支持。我很乐意在上游贡献该代码,但目前它是非常定制的,因此需要一些工作才能使其普遍可用。
用于捕获 高基数 维度的最后一种类型尚未创建,但将作为安全阀存在,确保如果指标可能具有大量标签值,它将计算唯一标签的数量,一旦达到最大值,禁用或将其他标签组合到一个公共桶中,这样该值就不会爆炸并可能使您的监控不堪重负(或花费您很多美元$$,如果按指标付费)
让我用几个例子详细说明 checketts 发布的答案。您可以在 application.yml
中 enable/disable 某些指标,如下所示:
management:
metrics:
enable:
tomcat: true
jvm: false
process: false
hikaricp: false
system: false
jdbc: false
http: false
logback: true
或者在代码中定义一个 MeterFilter bean:
@Bean
public MeterFilter meterFilter() {
return new MeterFilter() {
@Override
public MeterFilterReply accept(Meter.Id id) {
if(id.getName().startsWith("tomcat.")) {
return MeterFilterReply.DENY;
}
if(id.getName().startsWith("jvm.")) {
return MeterFilterReply.DENY;
}
if(id.getName().startsWith("process.")) {
return MeterFilterReply.DENY;
}
if(id.getName().startsWith("system.")) {
return MeterFilterReply.DENY;
}
return MeterFilterReply.NEUTRAL;
}
};
}
management.metrics.binders.jvm.enabled=false
有关其他选项,请参阅 this class。 Spring 团队在 2.1.x
中再次重构,那些内部工厂 bean 类 现在被提取到独立文件中,但 属性 命名与 2.0.x
.