【问题标题】:How do I write a Prometheus query that returns the value of a label?如何编写返回标签值的 Prometheus 查询?
【发布时间】:2016-11-26 07:47:32
【问题描述】:

我正在制作一个 Grafana 仪表板,并且想要一个能够报告我们应用的最新版本的面板。版本在app_version(比如)指标中报告为标签,如下所示:

app_version_updated{instance="eu99",version="1.5.0-abcdefg"}

我尝试了许多 Prometheus 查询来从这个时间序列的最新成员中提取版本标签作为字符串,但没有效果。

例如查询

count(app_version_updated) by (version)

返回值为1{version="1.5.0-abcdefg"} 元素。当将 Grafana 仪表板放入单个值面板中时,它不会显示版本 string,而是显示计数值 (1)。

如何构造一个返回版本字符串的 Prometheus 查询?

【问题讨论】:

    标签: grafana prometheus


    【解决方案1】:

    Prometheus 没有任何返回字符串的函数,您正在寻找的是 Grafana singlestat 能够显示标签值 - 不幸的是它还不支持。

    https://github.com/grafana/grafana/issues/5094 跟踪此内容。

    【讨论】:

    • 此功能现已实现
    【解决方案2】:

    我们最近添加了对在单个统计面板 (https://github.com/grafana/grafana/issues/4740) 中将系列名称显示为值的支持。因此,在我们发布 4.0 之前,您必须运行我们的夜间构建。

    只需确保查询返回一个系列,您可以在选项 -> 大值下的下拉列表中使用“名称”值。然后您可以使用图例格式化程序格式化字符串。 Ex {{job}} 将返回“node”作为系列名称。

    我希望这能回答您的问题。

    【讨论】:

      【解决方案3】:

      我的回答试图详细说明卡尔的回答。我认为自 2016 年以来 GUI 布局可能发生了一些变化,所以我花了一段时间才找到“名称”选项。

      假设您有如下指标:

      # HELP db2_prometheus_adapter_info Information on the state of the DB2-Prometheus-Adapter
      # TYPE db2_prometheus_adapter_info gauge
      db2_prometheus_adapter_info{app_state="UP") 1.0
      

      并且您想显示标签 app_state 的值。

      按照以下步骤操作:

      • 创建“SingleStat”可视化。
      • 转到“查询”选项卡:
        • 输入指标的名称(此处为db2_prometheus_adapter_info)。
        • 使用{{[LABEL]}} 表示法输入标签名称作为图例(此处为{{app_state}})。
        • 激活“即时”选项。

      • 转到“可视化”选项卡:
        • 在“值 - 统计”下选择值“名称”。

      关于“即时”设置的注意事项:此设置从范围查询切换到仅返回指标的最新值的简化查询(另请参阅What does the "instant" checkbox in grafana graphs based on prometheus do?)。如果未激活,一旦指标历史中的标签有多个不同的值,面板就会显示错误。对于“正常”指标,您可以通过在“值 - 统计”选项中选择“当前”来解决此问题。但是在这里这样做会阻止显示您的标签值。

      【讨论】:

      • SingleStat 在 v7 中已弃用并在 v8 中删除。它被替换为Stat
      【解决方案4】:

      这对我有用。

      label_values(my_metric{type= "xxx", another_label="xxx"},target_label)
      

      【讨论】:

      • 那行不通。我把这个放在哪个字段,因为它不能被 PromQL 处理?
      • 是的,PromQL 中不存在“label_values”函数。例如,我曾经在仪表板中创建一个变量,这是一个 grafana 的东西。
      【解决方案5】:

      虽然@marcus-rickert 的大部分答案在 Grafana 7 中仍然有效,但还是有一些变化。 'Stat' 'Name' 字段似乎消失了,取而代之的是在 'Field' 面板中,您可以将 'Display name' 设置为要显示的标签。

      【讨论】:

        【解决方案6】:

        我想从 Prometheus 获取标签的所有各种值,然后放入 Grafana 中的变量中。我使用这个简单的查询来填充我的变量下拉列表:

        label_values(myLabelName)

        这返回了预期的“value01”、“value02”等

        【讨论】:

          【解决方案7】:

          另一个使用 grafana 8.0.3 的最新 kube-prometheus-stack 更新。我仍然面临这个问题,对我来说,在 Bar 仪表中,我仍然遇到这个问题,它只返回 1 个值,但有 2 个以上的值,Legend 字段可以正常工作。

          我的解决方案:

          进入编辑面板,找到显示名称,输入

          ${__field.labels.insertYourLegendValueHere}

          【讨论】:

            猜你喜欢
            • 2020-05-14
            • 1970-01-01
            • 1970-01-01
            • 2019-01-23
            • 2022-08-09
            • 1970-01-01
            • 2018-09-15
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多