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

问题描述 投票:0回答:1

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

Counter.builder("request_count")
            .tags("method","GET")
            .tags("path","/my/test/path")
            .register(meterRegistry)
            .increment();

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

# HELP request_count_total  
# TYPE request_count_total counter
request_count_total{method="GET",path="/my/test/path"} 1.0

请注意指标名称后附加的 _total 后缀。显然这是由默认的

PrometheusNamingConvention
引起的,因此我重写此类并提供自定义
name()
实现,该实现显式省略了附加 _total 后缀的过程。然而,这仍然会导致指标以后缀发布。

在将调试器附加到应用程序并跟踪代码时,我确定这是因为任何定义的自定义 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;

因此,在我看来,此时唯一可以想到的选择是直接使用 PrometheusMeterRegistry 类;它的构造函数允许指定

CollectorRegistry
实例,因此我应该能够传入此类的自定义实现,该类不进行此重命名操作。我的问题本质上是:
1)除了将 Micometer 绑定到单个实现(即 prometheus)之外,这种方法还有其他缺点吗?

2)您能给我指出任何提供直接使用

PrometheusMeterRegistry

示例的文档吗?

    

java spring-boot spring-mvc prometheus spring-micrometer
1个回答
0
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.