You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Prometheus查询中替换字符串以简化Grafana服务名显示?

解决Grafana中Prometheus查询图例显示问题

最简方案:调整Grafana图例格式

不用修改PromQL,直接在Grafana面板的Legend设置里,把Legend format改成{{name}}即可。这样不管查询返回的标签包含哪些字段,图例都会只显示name标签的值(比如certbot.service)。

优化查询维度(更高效)

原查询中已经过滤了state="failed",所有结果的state字段都是固定值,没必要在聚合维度里保留它。修改查询为:

sum(node_systemd_unit_state{instance=~"^.*$",state="failed"}) by (name) > 0

此时查询结果的标签只有name,再配合Grafana图例格式{{name}},就能完美显示服务名。

保留聚合维度的方案(用label_replace)

如果确实需要保留state在聚合维度中,用label_replace提取服务名到新标签:

label_replace(
  sum(node_systemd_unit_state{instance=~"^.*$",state="failed"}) by (name, state) > 0,
  "service", "$1", "name", "(.*)"
)
  • 语法解释:label_replace(指标, 新标签名, 替换模板, 源标签名, 匹配正则),这里把name的完整内容复制到service标签中。
  • 之后在Grafana图例设置里指定{{service}}作为显示格式即可。

关于regex_replace管道符错误的说明

PromQL的regex_replace是字符串处理函数,仅在Prometheus 2.42+版本支持,且需配合标签操作使用,不能直接用管道符连接聚合查询。比如正确的用法是对单个标签值处理,而非直接拼接在聚合查询后。相比之下,label_replace更适合这类标签提取场景,语法也更直观。

内容的提问来源于stack exchange,提问作者JJandke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 13:23:21