如何编写PromQL实现按namespace统计my_metric<1的次数并补0?
解决按Namespace统计指标小于1的次数并补0的PromQL查询
正确查询语句
sum by (namespace) (my_metric < 1) or on(namespace) group_left() (count by(namespace) (my_metric) * 0)
语句解释
my_metric < 1:将每个指标值转换为数值结果——当指标值小于1时返回1,否则返回0。sum by(namespace):按namespace分组求和,得到每个namespace下指标值小于1的总次数。这一步仅会返回存在符合条件记录的namespace(比如示例中的a)。count by(namespace)(my_metric) * 0:先统计每个namespace下的my_metric序列数量(核心作用是保留所有存在my_metric的namespace标签),再乘以0将值置为0,生成所有namespace对应的0值记录。or on(namespace) group_left():通过namespace标签匹配左右两边的结果,左边已存在的记录保留原值,左边缺失的记录用右边的0值补充,最终所有namespace都会有输出。
示例验证
执行上述查询后,会得到你期望的结果:
{namespace="a"} 2 {namespace="b"} 0 {namespace="c"} 0
之前尝试的问题分析
sum by (namespace) (count(my_metric < 1) by (namespace)):my_metric < 1会先过滤掉不满足条件的序列,count操作仅统计有符合条件序列的namespace,因此最终结果仅包含a。or on(namespace) vector(0):vector(0)没有任何标签,无法通过namespace标签与缺失的namespace匹配,因此无法为b、c补充0值。
内容的提问来源于stack exchange,提问作者Rohan
相关产品推荐
相关产品推荐

