如何调整PromQL查询:无错误指标时返回100%HTTP请求成功率?
解决PromQL无错误指标时成功率无数据的问题
你的查询在没有error="true"的请求时,错误请求的求和结果为空,导致整个表达式返回空值,Grafana无法展示数据。可以通过or vector(0)将空的错误请求计数替换为0,从而在无错误时显示100%的成功率:
1 - (sum by(api_name) ( increase(demo_http_requests_seconds_count{error="true", api_name="Demo_API", consumer="Demo_Consumer"}[$__range]) ) or vector(0)) / sum by(api_name) ( increase(demo_http_requests_seconds_count{api_name="Demo_API", consumer="Demo_Consumer"}[$__range]) )
原理说明
- 当没有匹配
error="true"的请求时,sum by(api_name)(increase(...))会返回空的时间序列,or vector(0)会将其替换为值为0的序列。 - 此时
1 - 0/总请求数的结果为1,对应100%成功率,Grafana就能正常展示数据。
额外优化(可选)
如果存在一段时间内没有任何请求(总请求数也为空)的情况,分母会出现0导致结果为NaN,可以进一步用or vector(1)处理分母,确保无请求时也显示100%:
1 - (sum by(api_name) ( increase(demo_http_requests_seconds_count{error="true", api_name="Demo_API", consumer="Demo_Consumer"}[$__range]) ) or vector(0)) / (sum by(api_name) ( increase(demo_http_requests_seconds_count{api_name="Demo_API", consumer="Demo_Consumer"}[$__range]) ) or vector(1))
内容的提问来源于stack exchange,提问作者user3684829
相关产品推荐
相关产品推荐

