弹簧启动执行器/千分尺度量禁用一些

时间:2018-01-25 20:30:46

标签: metrics spring-boot-actuator micrometer

有没有办法在执行器/千分尺中关闭一些返回的公制值?现在看着它们我已经看到了大约1000个,并希望将它们减少到选择的少数100个实际发送到我们的注册表。

3 个答案:

答案 0 :(得分:5)

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

  1. 禁用指标
  2. 合并尺寸
  3. 高基数封顶过滤器
  4. Micrometer附带内置的第一种米过滤器。它还支持与记录工作方式类似的分层启用/禁用(如果有my.request.total和{{1您可以停用所有以my.request.latency开头的指标。

    我已经实现了我自己的组合过滤器示例,如果您有一个具有高基数的指标并希望将它们组合在新的维度中,这将非常有用。例如,您在状态代码上有维度,这样您就可以将200,201,203个响应代码组合为标记my.request。这类似于Netflix Spectator'placeholder'的支持。我很乐意在上游贡献该代码,但目前它非常习惯,因此需要做一些工作才能使其普遍可用。

    用于捕获高基数维度的最后一种类型尚未创建,但是作为安全阀存在,确保如果度量标准可能具有大量标记值,它将计算唯一标记的数量,一旦达到最大值,就可以禁用或将其他标记组合到一个公共存储桶中,这样该值就不会爆炸并可能会使您的监控失败(或者如果付费则会花费很多$$$每个度量)

答案 1 :(得分:1)

让我详细说明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;
        }
    };
}

答案 2 :(得分:0)

Mzzl's answer中的属性命名在Spring Boot 2中已更改。例如,现在要禁用JVM指标:

management.metrics.binders.jvm.enabled=false

有关其他选项,请参见this class。 Spring团队在2.1.x中再次进行了重构,现在将这些内部工厂bean类提升到独立文件中,但属性命名与2.0.x相同。