【问题标题】:Supporting multiple metrics via prometheus (statsd and prometheus)通过 prometheus 支持多个指标(statsd 和 prometheus)
【发布时间】:2020-09-07 22:54:04
【问题描述】:

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

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

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

这对 statsd 很好,但对 Prometheus 不起作用。我需要支持带有标签的单独指标,例如

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

是否可以同时支持两者?

【问题讨论】:

    标签: java spring metrics statsd micrometer


    【解决方案1】:

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

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

    然后使用“分层naming convention”

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

    替代(不推荐)

    另一种(但吸引力较小的方法)是在 2 米存储库之间复制米。

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

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

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

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

    【讨论】:

    • 这是有道理的。我的问题是:在 statsD 的情况下,Metrics.timer("latency", Tags.of("api", apiName, "endpoint", endpointName.)).record(latency) 会产生像 delay.apiName.endpointName 或 apiName.endpointName.latency 这样的指标
    • HierarchicalNameMapper 控制它。因此,您将能够对其进行自定义以满足您的需求。不过我自己没用过,所以没有方便的sn-p给你
    • 好的,有道理。一旦我添加了依赖项,我正在使用 spring 自动配置的 statsd 注册表。但是当我将标签添加到 Metrics.timer(..) 时,它们会得到很多,所以上面示例的度量名称最终只是 latency。找不到自动配置的名称映射器使用的名称。有任何想法吗?我该如何覆盖它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 2021-10-27
    • 2019-10-16
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    相关资源
    最近更新 更多