有没有办法在执行器/千分尺中关闭一些返回的公制值?现在看着它们我已经看到了1000左右,并希望将它们减少到少数几个说100实际被发送到我们的注册表。
Meter filters可以通过Micrometer松弛通道讨论的3种方式提供帮助:
千分尺内置了第一种类型的仪表过滤器。它还支持分层启用/禁用类似于日志记录的工作方式(如果有像my.request.total
和my.request.latency
这样的仪表,你可以禁用所有以my.request
开头的指标。
我已经实现了我自己的组合过滤器示例,如果您有一个具有高基数的指标并希望将它们组合在新的维度中,这将非常有用。例如,您在状态代码上有一个维度,这使您可以将200,201,203个响应代码组合为标记2xx
。这类似于Netflix Spectator'placeholder'的支持。我很乐意在上游贡献该代码,但目前它是非常自定义的,因此需要一些工作才能使它通常可用。
用于捕获高基数维度的最后一种类型尚未创建,但作为安全阀存在,确保如果度量标准可能具有大量标记值,则它将计算唯一标记的数量并且最多一次值被命中,要么禁用或将其他标签组合到一个公共存储桶中,这样该值就不会爆炸并可能使您的监控失败(或者如果按度量计算,则会花费很多$$$)
让我详细说明checketts发布的答案,并举几个例子。您可以在application.yml
中启用/禁用某些指标,如下所示:
management:
metrics:
enable:
tomcat: true
jvm: false
process: false
hikaricp: false
system: false
jdbc: 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;
}
};
}
Mzzl's answer中的属性命名在Spring Boot 2中已更改。例如,要禁用现在的JVM指标:
management.metrics.binders.jvm.enabled=false
有关其他选项,请参阅this class。 Spring团队再次在2.1.x
进行了重构,那些内部工厂bean类现在被提升为独立文件,但属性命名仍然与2.0.x
相同。