Spring 启动 Actuator/Micrometer 指标禁用一些

Spring Boot Actuator/Micrometer Metrics Disable Some

有没有办法关闭 Actuator/Micrometer 中的某些返回指标值?现在看着它们,我看到大约 1000 个,我想将它们减少到 select 少数人说 100 个实际发送到我们的注册表。

Meter filters 可以通过 Micrometer slack 频道讨论过的 3 种方式提供帮助:

  1. 禁用指标
  2. 合并维度
  3. 高基数上限过滤器

Micrometer 内置第一种 meter 过滤器。它还支持分层 enabling/disabling,类似于日志记录的工作方式(如果有像 my.request.totalmy.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.