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

如何通过PromQL找出一段时间内缺失的BGP前缀?

定位缺失的BGP前缀及历史缺失情况

针对你遇到的问题——只能感知BGP前缀数量变化但无法定位具体缺失前缀,以及需要追踪一段时间内的缺失记录,这里有几个实用的PromQL方案:

一、定位当前缺失的前缀

要找出现在不存在、但近期(比如过去1小时)曾经存在的前缀,可以利用last_over_time和标签匹配来做集合差:

# 获取过去1小时内所有出现过的前缀的最后状态
last_over_time(bgp4PathAttrPeer{bgp4PathAttrPeer="10.16.3.9"}[1h])
# 与当前存在的前缀做差,保留仅在历史中出现的条目
- on(bgp4PathAttrPrefix) group_left()
bgp4PathAttrPeer{bgp4PathAttrPeer="10.16.3.9"}

这个查询会返回所有当前已撤销的前缀,结果中对应的bgp4PathAttrPrefix标签就是你要找的缺失前缀。如果你的前缀标签不是bgp4PathAttrPrefix,替换成实际的标签名即可(比如prefix)。

二、查找一段时间内的缺失记录

如果需要追踪某个时间段内所有出现过缺失的前缀,以及它们的缺失情况,可以用以下两种方式:

1. 统计过去N天内有缺失的前缀

# 统计每个前缀在过去1天内的缺失次数,筛选出至少缺失过一次的
count_over_time(absent(bgp4PathAttrPeer{bgp4PathAttrPeer="10.16.3.9"})[1d]) by (bgp4PathAttrPrefix) > 0

absent()会在前缀不存在时返回1,存在时返回空;count_over_time则统计过去1天内该前缀缺失的总次数,结果大于0就说明这个前缀在这段时间内被撤销过。

2. 追踪前缀状态变化的时刻

如果想知道具体哪个前缀在什么时候被撤销,可以先通过记录规则把每个前缀的存在状态持久化:

# 在Prometheus配置中添加这条记录规则
groups:
- name: bgp_prefix_monitoring
  rules:
  - record: bgp_prefix_exists
    expr: count(bgp4PathAttrPeer{bgp4PathAttrPeer="10.16.3.9"}) by (bgp4PathAttrPrefix)

这条规则会生成一个新指标bgp_prefix_exists,每个前缀对应的值为1(存在)。之后用changes()函数找出状态变化的前缀:

# 找出过去1小时内状态发生变化的前缀(从1变为0即代表被撤销)
changes(bgp_prefix_exists[1h]) > 0

结合Prometheus的图表,你可以查看这些前缀的状态变化曲线,准确定位撤销发生的时间点。

小提示

  • 调整查询中的时间范围(比如[1h]换成[6h])可以适配你的实际监控需求;
  • 如果你的BGP指标还有其他标签(比如AS号),可以在by()子句中加入这些标签,更精准地筛选目标前缀。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:07:49