Grafana面板查询问题:如何统计选定时段内HTTP状态码请求数
正确的PromQL查询语句方案
一、统计具体HTTP状态码的请求次数
如果需要单独统计200、400、500这类具体状态码的请求次数,只需将查询中的固定时间范围[1m]替换为Grafana内置变量[$__range],让时间范围自动适配面板选定的时间段:
sum(increase(http_client_requests_second_count{uri=~"$apiUri"}[$__range])) by (status)
如果需要同时按接口URI和请求方法拆分结果,保留by (uri, method, status)即可:
sum(increase(http_client_requests_second_count{uri=~"$apiUri"}[$__range])) by (uri, method, status)
二、统计聚合类别(SUCCESS/CLIENT_ERROR/SERVER_ERROR)的请求次数
要得到2xx(SUCCESS)、4xx(CLIENT_ERROR)、5xx(SERVER_ERROR)的汇总次数,需要通过标签映射将状态码归类后再聚合,这里提供两种直观的写法:
写法1:先拆分具体状态码,再替换标签并聚合
sum(increase(http_client_requests_second_count{uri=~"$apiUri"}[$__range])) by (status) | label_replace("$1", "status_category", "SUCCESS", "status", "2..") | label_replace("$1", "status_category", "CLIENT_ERROR", "status", "4..") | label_replace("$1", "status_category", "SERVER_ERROR", "status", "5..") | sum by (status_category)
写法2:直接关联状态码与类别标签后聚合
sum by (status_category) ( increase(http_client_requests_second_count{uri=~"$apiUri"}[$__range]) * on(status) group_left(status_category) ( label_replace(1, "status_category", "SUCCESS", "status", "2..") or label_replace(1, "status_category", "CLIENT_ERROR", "status", "4..") or label_replace(1, "status_category", "SERVER_ERROR", "status", "5..") ) )
关键说明
- 替换
[1m]为[$__range]是核心:固定时间范围会导致结果和面板选定时间段不匹配,而$__range会自动使用面板当前的时间范围参数。 - 聚合类别时,通过
label_replace将匹配的状态码映射到对应的类别标签,再通过sum by完成最终汇总。
内容的提问来源于stack exchange,提问作者asli
相关产品推荐
相关产品推荐

