You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止Micrometer为Counter指标名称添加_total后缀?

关于Micrometer Counter指标自动添加_total后缀的问题解答

问题1:使用自定义CollectorRegistry的PrometheusMeterRegistry的其他弊端

  • 需自行维护指标生命周期:默认PrometheusMeterRegistry已封装了指标注册、注销、去重等细节,自定义Registry后这些逻辑需要手动实现,增加维护成本。
  • 丢失Micrometer的标准化能力:Micrometer默认会对指标名称、标签做跨监控系统的标准化处理,自定义Registry若未适配,可能导致指标不符合Prometheus最佳实践。
  • 调试排查难度提升:出现指标异常时,需同时排查Micrometer层面和自定义CollectorRegistry的逻辑,而默认实现有成熟的社区文档和调试方案支撑。
  • 兼容扩展功能成本高:Micrometer的全局标签、指标过滤、分层命名等扩展功能,需要额外适配才能在自定义Registry中生效。

问题2:直接使用PrometheusMeterRegistry的示例代码

依赖准备(Maven)

添加Micrometer Prometheus依赖:

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
    <version>1.12.0</version> <!-- 使用最新稳定版本 -->
</dependency>

代码示例

import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.config.NamingConvention;
import io.micrometer.prometheus.PrometheusConfig;
import io.micrometer.prometheus.PrometheusMeterRegistry;
import io.prometheus.client.Collector;
import io.prometheus.client.CollectorRegistry;

public class CustomPrometheusMeterExample {
    public static void main(String[] args) {
        // 创建自定义CollectorRegistry,可自定义指标注册逻辑
        CollectorRegistry customRegistry = new CollectorRegistry(true) {
            @Override
            public void register(Collector collector) {
                // 此处可根据需求调整指标处理逻辑,示例保留父类默认行为
                super.register(collector);
            }
        };

        // 初始化PrometheusMeterRegistry,使用自定义Registry和原生命名规则
        PrometheusMeterRegistry meterRegistry = new PrometheusMeterRegistry(
                PrometheusConfig.DEFAULT,
                customRegistry,
                NamingConvention.identity() // 确保Micrometer不修改原始指标名称
        );

        // 创建并递增Counter指标
        Counter.builder("request_count")
                .tags("method", "GET")
                .tags("path", "/my/test/path")
                .register(meterRegistry)
                .increment();

        // 输出抓取到的指标内容,验证名称是否为request_count而非request_count_total
        System.out.println(meterRegistry.scrape());
    }
}

关键说明

  • NamingConvention.identity() 用于保持你定义的原始指标名称,避免Micrometer层面的名称修改。
  • 若需完全禁用_total后缀,可在自定义CollectorRegistry的register方法中,修改Collector返回的MetricFamilySamples名称。

内容的提问来源于stack exchange,提问作者Giles Thompson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 01:30:20