如何编写支持多变量选择的PromQL实现指定流量异常检测?
支持多变量的异常检测PromQL实现
直接使用以下PromQL即可满足需求,支持$My_Name多选且保留所有标签:
(bool changes(my_bytes_in{My_Name=~"$My_Name"}[5m]) > 0) * (bool changes(my_bytes_out{My_Name=~"$My_Name"}[5m]) == 0)
逻辑说明
changes(metric[5m]):统计指标在过去5分钟内的样本变化次数,次数>0表示指标有波动,=0表示指标完全无变化bool 比较表达式:将比较结果转换为布尔值(满足条件返回1,不满足返回0),同时保留原时间序列的所有标签- 两个布尔值相乘:仅当
my_bytes_in有变化和my_bytes_out无变化两个条件同时满足时结果为1,其余情况为0 My_Name=~"$My_Name":通过正则匹配支持变量多选,会自动展开所有选中的My_Name值,每个实例独立计算结果
原写法问题解析
你之前用vector()导致标签丢失,是因为vector()会生成不带任何标签的单一时间序列,无法区分多实例。上面的写法全程基于原指标标签计算,每个实例的结果都会独立保留标签,多选时会返回对应多条曲线。
内容的提问来源于stack exchange,提问作者elbino
相关产品推荐
相关产品推荐

