Java 通过普罗米修斯(statsd和普罗米修斯)支持多种指标 我正把度量收集系统从STATSD移到普罗米修斯。这是一款基于千分尺的spring boot应用程序。我想知道是否有一种方法可以同时支持分层statsd度量和多维普罗米修斯度量

Java 通过普罗米修斯(statsd和普罗米修斯)支持多种指标 我正把度量收集系统从STATSD移到普罗米修斯。这是一款基于千分尺的spring boot应用程序。我想知道是否有一种方法可以同时支持分层statsd度量和多维普罗米修斯度量,java,spring,metrics,statsd,micrometer,Java,Spring,Metrics,Statsd,Micrometer,目前,我创建计时器的方式是 Metrics.timer("apiName.endpointName.latency").record(latency) 这对statsd很好,但对普罗米修斯不起作用。我需要支持一个单独的带有标记的度量,例如 service_latency {api="apiName", endpoint="endpointName"} 是否可以同时支持这两种功能?您可以同时支持这两种功能。推荐的方法是 Metrics

目前,我创建计时器的方式是

Metrics.timer("apiName.endpointName.latency").record(latency)
这对statsd很好,但对普罗米修斯不起作用。我需要支持一个单独的带有标记的度量,例如

service_latency {api="apiName", endpoint="endpointName"}

是否可以同时支持这两种功能?

您可以同时支持这两种功能。推荐的方法是

Metrics.timer("latency", Tags.of("api", apiName, "endpoint", endpointName.)).record(latency)
然后使用“层次结构”

这样,statsd标记就可以根据需要放置在层次结构中,普罗米修斯指标已经标记好,可以使用了

备选方案(不推荐) 另一种方法(也是不太吸引人的方法)是在两个米存储库之间复制米

当前,当您使用
Metrics.timer(“myMeter”)
时,您使用的是全局复合仪表注册表,它将仪表委托给基础注册表

相反,如果您单独调用每个注册表:

statsdRegistry.timer("myMeter")...
prometheusRegistry.timer("myMeter")...

不幸的是,这将需要您进行更多的手动更改,并且需要在注册中心之间复制代码。但是,你可以选择这样做。

这是有道理的。我的问题是:在statsD的情况下,
Metrics.timer(“latency”,Tags.of(“api”,apiName,“endpoint”,endpointName.))))。record(latency)
会产生类似latency.apiName.endpointName或apiName.endpointName.latency的度量吗?控制它。因此,您可以自定义它以满足您的需要。我自己也没用过,所以我没有一个方便的代码片段给你。我使用的是statsd注册表,一旦我添加了依赖项,spring就会自动配置它。但是,当我向Metrics.timer(..)添加标记时,它们会得到很多,因此上面示例中的度量名称就是
latency
。找不到自动配置的映射程序使用的名称。有什么想法吗?我怎样才能覆盖它?