如何在Spring Boot 2中通过Actuator修改Prometheus暴露的指标名称
调整Spring Boot Actuator Prometheus指标名称的方案
嘿,这个需求我之前折腾过,完全可以借助Micrometer的自定义命名策略来实现,不用动太多底层代码,咱们一步步来:
1. 自定义Meter命名规则
Micrometer负责把Spring Boot的指标转换成Prometheus格式,咱们可以通过实现MeterNamingConvention接口,重写指标名称的生成逻辑,精准修改你想要调整的那些指标:
import io.micrometer.core.instrument.Meter; import io.micrometer.core.instrument.config.NamingConvention; import io.micrometer.prometheus.PrometheusNamingConvention; public class CustomPrometheusNamingConvention extends PrometheusNamingConvention { private static final String HTTP_REQUESTS_PREFIX = "http_server_requests_seconds"; @Override public String name(String name, Meter.Type type, String baseUnit) { // 先调用父类的默认处理,保证其他指标不受影响 String originalName = super.name(name, type, baseUnit); // 针对http_server_requests相关指标做自定义替换 if (originalName.startsWith(HTTP_REQUESTS_PREFIX)) { String suffix = originalName.substring(HTTP_REQUESTS_PREFIX.length()); switch (suffix) { case "_count": return "http_server_requests_count"; case "_max": return "latency_seconds_max"; case "_sum": return "latency_seconds_sum"; default: // 其他后缀比如_bucket之类的,保持原名称或者按你需求修改 return originalName; } } // 其他指标保持默认命名 return originalName; } }
2. 注册自定义命名规则到Spring容器
接下来需要把咱们自定义的命名规则注册成Bean,替换掉默认的Prometheus命名策略:
import io.micrometer.core.instrument.config.NamingConvention; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MicrometerConfig { @Bean public NamingConvention prometheusNamingConvention() { return new CustomPrometheusNamingConvention(); } }
3. 验证效果
启动你的Spring Boot应用,访问/actuator/prometheus端点,就能看到指标名称已经按你的要求修改了:
- 原来的
http_server_requests_seconds_count变成http_server_requests_count - 原来的
http_server_requests_seconds_max变成latency_seconds_max - 原来的
http_server_requests_seconds_sum变成latency_seconds_sum
如果还有其他需要调整的指标,只需要在CustomPrometheusNamingConvention的name方法里添加对应的判断逻辑就行,灵活得很。
内容的提问来源于stack exchange,提问作者Rafael
相关产品推荐
相关产品推荐

