【问题标题】:How to create a multi-value tag metric gauge?如何创建多值标签度量标准?
【发布时间】:2019-01-17 18:45:27
【问题描述】:

已经阅读this,但没有幸运。

我发现的所有示例都展示了如何创建一个像这样的单值标签:

{
  "name" : "jvm.gc.memory.allocated",
  "measurements" : [ {
    "statistic" : "COUNT",
    "value" : 1.98180864E8
  } ],
  "availableTags" : [ {
    "tag" : "stack",
    "values" : [ "prod" ]
  }, {
    "tag" : "region",
    "values" : [ "us-east-1" ]
  } ]
}

但我需要像这样创建一个多值标签:

availableTags: [
{
    tag: "method",
    values: [
        "POST",
        "GET"
    ]
},

到目前为止我的代码:

    List<Tag> tags = new ArrayList<Tag>();
    tags.add( Tag.of("test", "John") );
    tags.add( Tag.of("test", "Doo") );
    tags.add( Tag.of("test", "Foo Bar") );
    Metrics.gauge("my.metric", tags, new AtomicLong(3) );

如你所见,我想我可以重复这个键,但事实并非如此,Tag.of 的第二个参数是字符串而不是字符串数组。

【问题讨论】:

    标签: spring-boot spring-micrometer


    【解决方案1】:

    我不认为这是这些计量库作者的真正意图 - 为指标提供多值标签。

    指标标签的全部意义在于提供一个“鉴别器”——稍后可以使用它来检索标签具有特定、单一值的指标。

    通常,该值用于度量存储系统,如 Prometheus、DataDog、InfluxDB 等。而在此之上,Grafana 可以在其查询中合并单个标签值。

    我看到的这种请求的唯一可能用例是可以以一种更方便的方式查看执行器中的指标值,但这也不是这里整个功能的重点,所以,底线我怀疑它是否可能。

    【讨论】:

    • 呃。好的......但是如果他们认为不会添加更多值,那么values 是一个数组而不是像tag 这样的字符串又有什么意义呢?我的意思是如果Tag.of( K, V ) 的第二个参数是一个字符串,为什么它在度量端点中由一个数组表示?为什么叫values 而只是value?
    • 我认为它是一种具体度量存储系统的序列化格式,我并没有真正深入了解细节......我知道千分尺会自行调整(通过公开每个系统注册表)到格式...
    • 我基本上是从纯粹实用的角度提供了一个答案(阅读,我们在生产系统中使用这个堆栈:))。你能解释一下这个功能的实际用法吗?当然你可以扩展千分尺来支持这一点,具体的度量系统确实允许这样做,但是为了什么?例如,您能否基于此信息构建 grafana 仪表板?
    • 我需要在我的 Grafana 仪表板中跟踪所有登录用户。我需要的是一个指标来显示用户计数的主要值和一个名为users 的标签,所有用户名都在values... 就像http.server.requests 指标在其uri 标签中所做的一样。
    • 我认为这个答案和你提出的问题的答案已经给出了足够的解释,但我只是想指出,对于 Spring Boot Actuator 的指标端点,“availableTags”中的“值”显示了不同标签的集合来自不同指标的值。例如,您提到的“方法”标签有两个标签值,“POST”和“GET”,它们是来自不同指标的不同标签值,其中一个具有标签的“POST”值,另一个具有“GET”值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 2018-05-25
    • 1970-01-01
    • 2016-08-18
    • 2018-11-16
    • 2017-03-08
    • 1970-01-01
    相关资源
    最近更新 更多