如何防止 Micrometer 在计数器指标名称中添加 _total 后缀

Gil*_*son 5 java spring-mvc spring-boot prometheus spring-micrometer

在我的代码中,我定义了自定义(计数器)指标,如下所示:

Counter.builder("request_count")
            .tags("method","GET")
            .tags("path","/my/test/path")
            .register(meterRegistry)
            .increment();
Run Code Online (Sandbox Code Playgroud)

您会注意到指标名称定义为request_count但是,当我运行应用程序时,指标将按如下方式发布:

# HELP request_count_total  
# TYPE request_count_total counter
request_count_total{method="GET",path="/my/test/path"} 1.0
Run Code Online (Sandbox Code Playgroud)

请注意_total后缀附加到指标名称。显然这是由默认引起的PrometheusNamingConvention,因此我重写了此类并提供了一个自定义实现,该实现显式省略了附加_totalname()后缀的过程。然而,这仍然会导致指标以后缀发布。

在将调试器附加到应用程序并跟踪代码时,我确定这是因为与计数器指标相关的任何定义的自定义 NamingConvention 类最终都会被忽略,因为内部类定义了一个PrometheusMeterRegistry更新CollectorRegistry所有计数器指标名称以包含_total后缀,就在指标发布之前。CollectorRegistry.collectorNames()以下是进行重命名的方法的片段:

 while(var4.hasNext()) {
        Collector.MetricFamilySamples family = (Collector.MetricFamilySamples)var4.next();
        switch (family.type) {
            case COUNTER:
                names.add(family.name + "_total");
                names.add(family.name + "_created");
                names.add(family.name);
                break;
Run Code Online (Sandbox Code Playgroud)

因此,在我看来,此时唯一PrometheusMeterRegistry可行的选择是直接使用该类;它的构造函数允许指定实例CollectorRegistry,因此我应该能够传入此类的自定义实现,该类不进行此重命名操作。我的问题本质上是:

1)除了将 Micometer 绑定到单个实现(即 prometheus)之外,这种方法还有其他缺点吗?

2)你能给我指出任何提供直接使用示例的文档吗PrometheusMeterRegistry