使用向量除法计算百分比时,如何在分子无数据时显示无数据?
解决PromQL分子无数据时返回空结果的问题
你的问题出在给分子加了OR vector(0)——当分子的count查询无数据时,这条语句会把空值强制替换成0,而分母的OR vector(1)会把空值替换成1,0除以1自然得到1。要实现分子无数据时整体返回无数据,只需要去掉分子的默认值设置即可。
正确的查询语句
count(job{branch="qa", status="failed", project_id="123"}) / (count(job{branch="qa", status="success", project_id="123"}) OR vector(1))
逻辑说明
- 当分子的
count有结果时:正常执行除法运算;如果分母的count无结果,会被替换为1,避免出现除以0的错误。 - 当分子的
count无结果时:分子是空向量,PromQL中空向量与任何向量的运算结果都是空向量,因此整个查询不会返回任何数据,完全符合你想要的效果。
你之前尝试的absent函数没用对——absent(pipeline_job_duration{project_id="123"})在指标不存在时返回1,再用clamp_max限制为0,本质还是给分子设了默认值0,所以依然会得到1的结果。
内容的提问来源于stack exchange,提问作者Max Bojorquez
相关产品推荐
相关产品推荐

