如何编写Prometheus查询以返回标签的值?

62

我正在制作一个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仪表盘单值面板中时,它不会显示版本字符串,而是计数值(1)。

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

9个回答

33

我的回答试图阐述Carl的回答。我假设GUI布局可能自2016年以来有所变化,因此我花了一些时间才找到“名称”选项。

假设您有以下指标:

# 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" 可视化。
  • 前往 "Queries" 选项卡:
    • 输入指标的名称(这里为 db2_prometheus_adapter_info)。
    • 使用 {{[LABEL]}} 表示法将标签名作为图例进行输入(这里为 {{app_state}})。
    • 激活 "instant" 选项。

Settings in Queries Tab

  • 前往 "Visualization" 选项卡:
    • 在 "Value - Stat" 下选择 "Name"。

Setting in Visualization Tab

关于 "Instant" 设置的说明:此设置从区间查询切换到仅返回度量最新值的简化查询(也可参见What does the "instant" checkbox in grafana graphs based on prometheus do?)。如果未激活该选项,当标签在指标历史记录中具有多个不同的值时,面板将显示错误。对于 "正常" 指标,您可以通过在 "Value - Stat" 选项中选择 "current" 来解决此问题。但是,在此情况下这样做会导致无法显示标签值。


2
SingleStat 在 v7 中已被弃用,在 v8 中已被移除。它已被 Stat 所取代。 - Barry

17
我们最近添加了支持在单个数据面板中将系列名称显示为值的功能(https://github.com/grafana/grafana/issues/4740)。因此,在我们发布4.0之前,您需要运行我们的每夜构建版本。
只需确保查询返回一个系列,并且您可以在选项->大数值下拉菜单中使用"name"值。然后,您可以使用图例格式化程序格式化字符串。例如,{{job}}将返回系列名称"node"。
希望这回答了您的问题。

8
使用Grafana 8+中的Stat可视化功能,您可以将图例设置为所需的标签名称,然后将Stat Styles -> Text Mode更改为Nameenter image description here

8

这个对我有用。

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

5
不起作用。你把它放在哪个字段,因为它不能被PromQL处理? - Orabîg
11
是的,“label_values”函数在PromQL中不存在。这是Grafana的一种功能,我用它来在仪表板上创建变量。 - fargusto

6

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

enter image description here


2

3
这个功能现在已经实现。 - Franklin Piat

2
我希望能够从Prometheus获取一个标签的各种值,并将其放入Grafana的变量中。我使用了这个简单的查询来填充我的变量下拉列表: 这返回了预期的"value01","value02"等值。

是的,我同意这个。对我来说有效。 - B.Kingsun

2

最新的kube-prometheus-stack使用grafana 8.0.3的更新。我仍然遇到了这个问题,在Bar gauge中,当它只返回一个值时,我仍然会遇到这个问题,但是在有2个或更多值的情况下,图例字段可以正常工作。

我的解决方案:

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

${__field.labels.插入你的图例数值}


2

您可以使用sum再加上要获取值的标签。

例如:

sum(windows_cpu_info{instance="$hostname"}) by l2_cache_size

在这种情况下,“l2_cache_size”是我想要从中获取返回值的标签。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接