You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Prometheus网络I/O指标的rate计算Z-score检测K8s Pod异常

基于Kubernetes网络I/O rate值的Z-score计算方法

问题原因

直接将rate(...)代入原Z-score公式报错parse error: ranges only allowed for vector selectors,是因为PromQL规则限制:range聚合函数(如avg_over_time、stddev_over_time)仅接受范围向量(带时间范围的原始指标选择器,如metric[...])作为输入,而rate()输出的是瞬时向量,无法直接嵌套在range聚合函数内部。

正确的Z-score公式

(
  avg_over_time(rate(container_network_receive_bytes_total{pod=~"xxx-.*"}[120s])[$__rate_interval:120s])
  - avg_over_time(rate(container_network_receive_bytes_total{pod=~"xxx-.*"}[120s])[1d:120s])
)
/ stddev_over_time(rate(container_network_receive_bytes_total{pod=~"xxx-.*"}[120s])[1d:120s])

公式拆解

  1. 计算实时速率:内层的rate(container_network_receive_bytes_total{pod=~"xxx-.*"}[120s])对原始累计字节指标,以120秒为窗口计算每秒网络接收速率,得到瞬时向量序列。
  2. 聚合当前窗口的平均速率:avg_over_time(...)[$__rate_interval:120s]对上述速率序列,在Grafana自动适配的$__rate_interval窗口内取平均值,:后的120s是子查询步长,必须和rate的窗口大小一致,保证数据点对齐。
  3. 计算历史基准值:avg_over_time(...)和stddev_over_time(...)的[1d:120s]部分,对过去1天内的速率序列分别取平均值(基准值)和标准差,步长同样设为120s,确保粒度统一。

注意事项

  • 子查询的步长(冒号后的数值)必须与rate的窗口大小完全一致,否则会导致数据采样错位,影响计算准确性。
  • 该语法要求Prometheus版本≥2.7(支持子查询功能)。
  • $__rate_interval是Grafana内置变量,会根据仪表盘的时间范围自动调整窗口大小,避免小时间范围下rate计算出现抖动。

内容的提问来源于stack exchange,提问作者TPPZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 12:40:09