PromQL中向量求和除法返回无数据,如何计算过滤器使用率占比?
解决PromQL计算过滤器类型使用率占比返回NO DATA的问题
你的查询返回NO DATA通常有两种核心原因:
- 目标时间段
$__range内,filter_counter计数器没有产生任何增量(比如没有请求触发过滤器),导致increase()返回空序列,后续的sum运算也会得到空结果。 - 指标
filter_counter不存在type标签,或者标签值为空,导致sum by (type)无法生成分组结果。
修复后的查询写法
先确保filter_counter是计数器类型指标(Prometheus中计数器指标名称通常带_total后缀),然后使用以下查询处理空值和分母为0的情况:
sum by (type) (increase(filter_counter[$__range]) or vector(0)) / clamp_min(sum(increase(filter_counter[$__range]) or vector(0)), 1)
关键优化点说明
or vector(0):兜底空序列,避免因某类过滤器无增量或全局无数据导致整个查询返回NO DATA。clamp_min(..., 1):防止分母为0时出现无穷大结果,确保查询始终返回合法数值。
排查步骤
如果修复后仍无数据,按以下步骤排查:
- 单独执行
increase(filter_counter[$__range]),确认指标是否存在且有增量数据。 - 检查指标标签,确认
type标签存在且有有效取值。 - 调整
$__range时间范围,确保覆盖计数器产生增量的时间段。
内容的提问来源于stack exchange,提问作者Mislav
相关产品推荐
相关产品推荐

