如何用PromQL查询Cisco交换机带宽利用率超80%的接口?
问题:通过PromQL筛选带宽利用率超80%的Cisco接口
现有指标与计算逻辑
- 接收字节数指标:
ifHCInOctets- 标签包含:
instance(设备IP)、ifHCInOctetsIntfId(接口ID)、ifHCInOctetsIntfBw(字符串类型,接口带宽,单位mbps)、ifHCInOctetsIntfName(接口名称)等 - 实时接收带宽计算:
rate(ifHCInOctets[1m]) * 8(转换为bps单位)
- 标签包含:
- 接口最大带宽指标:
ifHighSpeed- 数值类型,单位为mbps
- 标签包含:
instance、ifHCInOctetsIntfId,与ifHCInOctets一一对应 - 最大带宽(bps)计算:
ifHighSpeed * 1000000
需求
编写PromQL查询,筛选出带宽利用率超过80%的接口,要求:
- 动态匹配每个接口的最大带宽(禁止使用静态阈值)
- 必须同时通过
instance和ifHCInOctetsIntfId关联指标,避免多设备环境下接口ID重复导致匹配错误
PromQL解决方案
方案1:基于ifHighSpeed关联计算(推荐)
利用PromQL的向量匹配逻辑,明确指定instance和ifHCInOctetsIntfId作为关联键,同时保留ifHCInOctets的接口描述、名称等标签:
(rate(ifHCInOctets{job="cisco_intf_poll"}[1m]) * 8) / on(instance, ifHCInOctetsIntfId) group_left() (ifHighSpeed{job="cisco_intf_poll"} * 1000000) > 0.8
on(instance, ifHCInOctetsIntfId):强制仅通过这两个标签匹配两个指标的时间序列group_left():保留ifHCInOctets的额外标签(如接口名称、描述),方便定位具体接口- 末尾
> 0.8:筛选利用率超过80%的结果
方案2:基于ifHCInOctetsIntfBw标签转数值计算
如果ifHighSpeed指标不可用,可将ifHCInOctets的ifHCInOctetsIntfBw字符串标签转为数值后计算:
(rate(ifHCInOctets{job="cisco_intf_poll"}[1m]) * 8) / (label_replace(ifHCInOctets{job="cisco_intf_poll"}, "intf_bw_num", "$1", "ifHCInOctetsIntfBw", "(\\d+)") * 1000000) > 0.8
label_replace:提取ifHCInOctetsIntfBw中的数字部分,生成新的intf_bw_num标签- 转换为bps单位后与实时带宽相除,得到利用率并筛选阈值
注意事项
- 确保
ifHighSpeed与ifHCInOctets的instance、ifHCInOctetsIntfId标签完全一致,无拼写或格式差异 - 使用方案2时,需保证
ifHCInOctetsIntfBw标签值为纯数字(如"1000"),若包含单位(如"1G")则无法正确提取数值 - 可根据实际环境调整
rate的时间窗口(如[5m]),适配不同的监控粒度
内容的提问来源于stack exchange,提问作者Nick Carlton
相关产品推荐
相关产品推荐

