在我的代码中,我定义了自定义(计数器)指标,如下所示:
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
示例的文档吗?