通过 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")...
不幸的是,这将需要您进行更多的手动更改,并且需要在注册表之间重复代码。但是,您确实可以选择它。
我正在将指标收集系统从 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")...
不幸的是,这将需要您进行更多的手动更改,并且需要在注册表之间重复代码。但是,您确实可以选择它。