自定义Grafana错误率面板No Data问题排查

一、现象

最近基于Grafana新建了一个Http请求错误率展示面板,具体的PromQL语句如下:

sum(rate(http_server_request_duration_seconds_count{exported_job="${job}", http_route="${http_route}", 
http_request_method="${http_method}", http_response_status_code=~"4..|5.."}[$__rate_interval])) 
by (exported_job, http_route, http_request_method)
/
sum(rate(http_server_request_duration_seconds_count{exported_job="${job}", http_route="${http_route}", 
http_request_method="${http_method}"}[$__rate_interval])) 
by (exported_job, http_route, http_request_method)

即按照exported_job, http_route, http_request_method维度统计http status code为4xx、5xx请求所占的百分比。

以如下3个指标为例:

  • http_server_request_duration_seconds_count (exported_job="app-aggr", http_route=“/api/v1/sample/list”,
    http_request_method=“GET”, http_response_status_code="200" )
  • http_server_request_duration_seconds_count (exported_job="app-aggr", http_route=“/api/v1/sample/list”,
    http_request_method=“GET”, http_response_status_code="400")
  • http_server_request_duration_seconds_count (exported_job="app-atom", http_route=“/api/v1/sample/{id}|”,
    http_request_method=“GET”, http_response_status_code="200")

在统计app-aggr应用的/api/v1/sample/listHttp请求错误率时,可以正确显示错误率百分比:
在这里插入图片描述

在统计app-atom应用的/api/v1/sample/{id}Http请求错误率时,却提示No Data在这里插入图片描述

二、问题分析

实际通过promethues查询指标:

http_server_request_duration_seconds_count (
exported_job="app-atom",
http_route="/api/v1/sample/{id}|",
http_request_method="GET"
)

在这里插入图片描述

可以发现app-atom应用的/api/v1/sample/{id}请求没有http_response_status_code4xx5xx的指标记录,仅有http_response_status_code200的指标记录。Prometheus 查询分子没有数据时,Grafana 面板会显示 No data 而不是显示为 0,而我的需求是在分子没有数据时要让面板显示为 0

三、解决方案

最终调整为如下PromQL语句:

(
  sum(rate(http_server_request_duration_seconds_count{exported_job="${job}", http_route="${http_route}", 
	http_request_method="${http_method}", http_response_status_code=~"4..|5.."}[$__rate_interval])) 
	by (exported_job, http_route, http_request_method)
	or	
	sum(rate(http_server_request_duration_seconds_count{exported_job="${job}", http_route="${http_route}", 
	http_request_method="${http_method}"}[$__rate_interval])) 
	by (exported_job, http_route, http_request_method) * 0
)
/
sum(rate(http_server_request_duration_seconds_count{exported_job="${job}", http_route="${http_route}", 
http_request_method="${http_method}"}[$__rate_interval])) 
by (exported_job, http_route, http_request_method)

即在分子处通过or组合分母 * 0,即解决了分子不存在时替换为0,又能和分母对齐标签,满足了分子不存在时的Http错误率显示为0的需求。

调整后再次查询app-atom应用的/api/v1/sample/{id}Http请求错误率时显示效果如下图,此时的错误率均为0
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

罗小爬EX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值