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

如何用通配符编写Prometheus查询以在Grafana展示多响应码指标

问题:如何用单一查询聚合多响应码的Counter指标到Grafana面板

我的应用输出以下Counter类型指标:

app_counters_some_client_response_code_201_count_value{}
app_counters_some_client_response_code_400_count_value{}
app_counters_some_client_response_code_404_count_value{}

我想在Grafana仪表盘的同一个面板中展示这些不同指标的值,以响应码作为图例。但因为响应码种类未知且无法获取完整列表,没法逐个编写查询,请问如何用通配符写一个单一查询?


解决方案

1. 编写带通配符的基础查询

用*通配符匹配所有包含响应码的指标,结合rate函数(Counter类型指标必须用增长率展示才具备监控意义)和聚合函数筛选目标数据:

sum(rate(app_counters_some_client_response_code_*_count_value[5m])) by (__name__)
  • *:匹配任意响应码数字
  • rate(...):计算5分钟内的指标增长率,避免Counter累计值持续上涨导致图表失去可读性
  • sum(...) by (__name__):按指标名聚合数据,确保每个响应码对应一条独立的数据系列

2. 用label_replace提取响应码作为图例

通过正则表达式从指标名中提取响应码,生成专门用于图例展示的新标签:

label_replace(sum(rate(app_counters_some_client_response_code_*_count_value[5m])) by (__name__), "response_code", "$1", "__name__", "app_counters_some_client_response_code_(.*)_count_value")
  • label_replace函数参数说明:
    • 第一个参数:基础查询的结果集
    • 第二个参数:新生成的标签名称(这里命名为response_code)
    • 第三个参数:标签的取值($1对应正则匹配到的第一个分组,也就是响应码数字)
    • 第四个参数:要匹配的原标签(这里是指标名字段__name__)
    • 第五个参数:正则表达式,精准匹配指标名的结构,捕获其中的响应码部分

3. 配置Grafana图例

进入面板的「图例」设置界面,选择response_code作为图例字段,这样每个数据系列就会以对应的响应码(如201、400)作为标识展示。

可选:展示累计值而非增长率

如果不需要监控变化趋势,只想查看当前的累计计数,可直接去掉rate函数:

label_replace(sum(app_counters_some_client_response_code_*_count_value) by (__name__), "response_code", "$1", "__name__", "app_counters_some_client_response_code_(.*)_count_value")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 09:47:24