Spring Boot Actuator/Micrometer Metrics 禁用一些

Posted

技术标签:

【中文标题】Spring Boot Actuator/Micrometer Metrics 禁用一些【英文标题】:Spring Boot Actuator/Micrometer Metrics Disable Some 【发布时间】:2018-07-05 04:54:11 【问题描述】:

有没有办法关闭 Actuator/Micrometer 中返回的一些度量值?现在看看它们,我看到大约 1000 个,并且想将它们缩减到少数几个,比如 100 个,以便实际发送到我们的注册表。

【问题讨论】:

也许仪表过滤器可以提供帮助? micrometer.io/docs/concepts#_meter_filters 【参考方案1】:

让我通过几个例子详细说明checketts 发布的答案。您可以像这样在application.yml 中启用/禁用某些指标:

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.x 中语法发生了变化【参考方案2】:

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

    禁用指标 组合维度 高基数上限过滤器

Micrometer 内置了第一种 meter 过滤器。它还支持分层启用/禁用,类似于日志记录的工作方式(如果有像 my.request.totalmy.request.latency 这样的计量器,你可以禁用所有以my.request 开头的指标。

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

捕获高基数维度的最后一种类型尚未创建,但将作为安全阀存在,确保如果指标可能具有大量标签值,它将计算唯一标签的数量,一旦达到最大值,禁用或将附加标签组合到一个公共存储桶中,这样该值就不会爆炸并可能压倒您的监控(如果付费,则可能会花费您很多美元)每个指标)

【讨论】:

我想作为对这个问题的跟进,我可以使用@PostConstruct 更改全局仪表过滤器,但这感觉不对。是否有更好的方法或覆盖 Globabl Registry bean 的方法? 使用MeterRegistryCustomizer 像这样:@Bean MeterRegistryCustomizer<MeterRegistry> customizer( @Value("$spring.application.name") String applicationName) return (registry) -> registry.config().commonTags("application", applicationName); 在新问题中会更容易阅读。 在发布指标之前有什么方法可以从指标中删除特定的标签/标签 @omjego 将此作为一个新问题提出。快速回答是:micrometer.io/docs/concepts#_transforming_metrics。请参阅“忽略标签”【参考方案3】:

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

management.metrics.binders.jvm.enabled=false

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

【讨论】:

以上是关于Spring Boot Actuator/Micrometer Metrics 禁用一些的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Spring Boot 应用程序 pom 同时需要 spring-boot-starter-parent 和 spring-boot-starter-web?

《02.Spring Boot连载:Spring Boot实战.Spring Boot核心原理剖析》

spring-boot-quartz, 依赖spring-boot-parent

spring-boot系列:初试spring-boot

Spring Boot:Spring Boot启动原理分析

Spring Boot:Spring Boot启动原理分析