通过 prometheus(statsd 和 prometheus)支持多个指标

Supporting multiple metrics via prometheus (statsd and prometheus)

我正在将指标收集系统从 statsd 转移到 Prometheus。它是一个 spring 启动应用程序,基于千分尺。我想知道是否有一种方法可以同时支持分层 statsd 指标和维度 Prometheus 指标。

目前我创建定时器的方式是

Metrics.timer("apiName.endpointName.latency").record(latency)

这适用于 statsd,但不适用于 Prometheus。我需要支持带有标签的单独指标,例如

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

是否可以同时支持两者?

您可以同时支持两者。推荐的方式是

Metrics.timer("latency", Tags.of("api", apiName, "endpoint", endpointName.)).record(latency)

然后使用'hierarchical naming convention'

这样,statsd 标签会根据需要放置在层次结构中,并且 Prometheus 指标已被标记并准备好使用。

备选(不推荐)

另一种(不太吸引人的方法)是在 2 个计量存储库之间复制计量。

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

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

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

不幸的是,这将需要您进行更多的手动更改,并且需要在注册表之间重复代码。但是,您确实可以选择它。