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

PromQL统计指定时间段node/IP组合的指标宣告次数实现方法

PromQL实现node/ip维度指定时间段内IP宣告累计次数统计

核心实现逻辑

由于场景中node/ip组合对应的时序不会全程存在,会随宣告/撤销动作动态出现、消失,直接使用内置的delta/count_over_time/changes等范围函数无法得到正确结果,需要通过子查询识别每次「时序从无到有」的宣告事件,再按维度聚合累计值。

假设指标采集间隔为15s,统计30分钟窗口内累计宣告次数的PromQL如下:

sum_over_time(
  (
    some_metric > 0
    unless
    some_metric > 0 offset 15s
  )[30m:15s]
) by (node, ip)

语句说明

  • some_metric > 0:筛选出当前采样点存在有效宣告的node/ip组合,存在则返回对应时序,不存在则无返回
  • unless some_metric > 0 offset 15s:和15s前(上一个采集周期)的状态对比,排除掉上一周期已经存在的时序,只保留当前周期新出现的宣告时序,命中则记为1次宣告事件
  • [30m:15s]:子查询配置,代表在30分钟的统计窗口内,按15s步长(和采集间隔对齐)逐点执行上述判断
  • sum_over_time(...) by (node,ip):将窗口内所有识别到的宣告事件按node、ip维度累加,得到每个组合的累计宣告次数

参数调整说明

  • 偏移量和子查询步长:需要和实际的Prometheus采集间隔保持一致,如果采集间隔为30s,将语句中所有15s替换为30s即可,避免漏算、多算事件
  • 统计窗口:按需修改30m为目标时间范围即可,比如统计1小时数据则改为1h

常规范围函数不适用的原因

  • count_over_time(some_metric[30m]):仅统计时序存在期间的样本点总数,全程存在的时序会返回和采集次数一致的数值(比如15s间隔下30分钟会返回120),无法统计宣告次数
  • delta(some_metric[30m]):仅计算窗口首尾两个样本点的差值,无法识别窗口内发生的多次宣告、撤销动作,时序中途消失时计算结果会出现偏差
  • changes(some_metric[30m]):仅统计已有样本的值变化,时序消失(无样本)后重新出现的场景不会被识别为变化,无法统计跨中断的宣告事件

以上写法完全匹配示例场景的预期输出:

{node=server1,ip=10.0.0.1} = 2
{node=server2,ip=10.0.0.2} = 1
{node=server2,ip=10.0.0.1} = 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:21:26