使用Statsd与Datadog为Spring Micrometer指标设置前缀后禁用指标仍显示问题
问题原因
management.metrics.enable.<指标类型>=false配置仅控制指标是否导出到Statsd等监控后端,不控制指标是否被采集、是否在Actuator metrics端点展示,二者属于独立的控制逻辑,因此会出现已配置禁用但指标仍出现在接口返回中的问题。
解决方案
方案1:彻底禁用内置指标自动采集
直接排除对应内置指标的自动配置类,这类指标根本不会被注册到MeterRegistry中,自然不会出现在任何地方。
在启动类的@SpringBootApplication注解中添加exclude配置:
import org.springframework.boot.actuate.autoconfigure.metrics.jvm.JvmMetricsAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.metrics.logging.LogbackMetricsAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.metrics.system.SystemMetricsAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.metrics.tomcat.TomcatMetricsAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.metrics.process.ProcessMetricsAutoConfiguration; @SpringBootApplication(exclude = { JvmMetricsAutoConfiguration.class, LogbackMetricsAutoConfiguration.class, SystemMetricsAutoConfiguration.class, TomcatMetricsAutoConfiguration.class, ProcessMetricsAutoConfiguration.class }) public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
方案2:仅过滤内置指标不对外展示
如果仍需要保留内置指标做内部逻辑使用,仅不想让它们出现在/actuator/metrics接口返回中,可以添加MeterFilter直接拒绝这类指标对外暴露:
在你现有的MetricConfiguration类中添加如下Bean:
@Bean public MeterFilter denyBuiltInMetricsFilter() { return MeterFilter.deny(id -> { String metricName = id.getName(); return metricName.startsWith("jvm.") || metricName.startsWith("logback.") || metricName.startsWith("system.") || metricName.startsWith("tomcat.") || metricName.startsWith("process."); }); }
补充说明
你当前配置的统一前缀拼接逻辑是正常生效的,所有注册到MeterRegistry的指标都会自动加上配置的spring.application.name前缀,和上述禁用逻辑不冲突。
内容的提问来源于stack exchange,提问作者nijogeorgep
相关产品推荐
相关产品推荐

