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

如何使用Prometheus max函数且保留指标名称与标签?

解决Prometheus聚合后丢失指标名称与标签的问题

问题原因

Prometheus的聚合函数(如max())默认会丢弃所有标签(除非显式指定保留规则),同时原指标名称会被替换为聚合函数名(比如max),导致你看不到原指标名和标签。

解决方案

1. 保留指定标签

使用by子句明确列出需要保留的标签,同时用=~匹配多种mode值替代or,让查询更简洁:

max(sys_cpu_host_seconds_total{mode=~"sys|user"}) by (instance, mode)

这里by (instance, mode)表示聚合时保留instance和mode标签,你可以根据实际需求调整要保留的标签列表。

2. 恢复原指标名称

如果需要还原原指标名称sys_cpu_host_seconds_total,可以用label_replace()函数给结果添加__name__标签:

label_replace(
  max(sys_cpu_host_seconds_total{mode=~"sys|user"}) by (instance, mode),
  "__name__",
  "sys_cpu_host_seconds_total",
  "",
  ""
)

这个函数的作用是将聚合结果的__name__标签设置为原指标名,最后两个空字符串表示不依赖其他标签匹配,直接设置。

补充说明

  • 用mode=~"sys|user"替代sys_cpu_host_seconds_total{mode="sys"} or sys_cpu_host_seconds_total{mode="user"}是PromQL的最佳实践,避免重复书写指标名。
  • 如果想保留所有标签(除了聚合时自动丢弃的),可以用without()子句,但需要明确排除不需要的标签,不过by子句更直观可控。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 18:53:14