查看博客目录
抓住 BGP路由每一次改变:开源神器OpenBMP 实时监控实战
BMP 协议(BGP Monitoring Protocol)
BMP协议是用于实时监控BGP(边界网关协议)运行状态和路由处理轨迹的网络协议,旨在提升网络监控效率和安全性。
核心功能
-
BGP运行状态监控
:包括对等体关系的建立与解除、路由信息刷新等。
-
路由处理轨迹监控
:记录BGP路由的加工过程(如入口/出口策略应用)。
-
数据上报
:被监控设备通过TCP会话向监控服务器主动发送状态信息,无需服务器指令。
消息类型
BMP会话包含以下消息类型:
| 消息类型 | 描述 |
|---|---|
Initiation | 初始化消息,包含厂商信息、版本号等。 |
PU (Peer Up Notification) | 上报 BGP 对等体连接建立。 |
RM (Route Monitoring) | 上报路由状态,如 Adj-RIB-In。 |
PD (Peer Down Notification) | 上报 BGP 对等体连接中断。 |
SR (Stats Reports) | 定期发送统计信息,如路由数量。 |
ROFT (Route Policy and Attribute Trace) | 实时上报路由处理轨迹。 |
应用场景
-
网络运营商
:监控ISP、数据中心等大规模网络的BGP状态。
-
企业网络
:优化路由策略,识别潜在故障。
-
安全防护
:及时发现异常路由行为,保障网络稳定性。
技术特点
-
单向通信
:仅被监控设备向服务器发送数据,服务器不响应。
-
实时性
:支持增量更新和定期统计,减少数据延迟。
OpenBMP
OpenBMP是一个开源的BGP监控平台,它通过实现BMP协议来提供全网级别的BGP路由可视性 关于此项目可参考:https://github.com/SNAS/openbmp
💡 核心优势总结
| 传统 BGP 监控 | OpenBMP 解决方案 |
|---|---|
| ❌ 只能看到最终路由表 | ✅ 记录完整的路由变化过程 |
| ❌ 单设备视角有限 | ✅ 全网统一监控视图 |
| ❌ 历史数据缺失 | ✅ 完整的时间序列数据 |
| ❌ 故障排查困难 | ✅ 快速精准的根因分析 |
| ❌ 安全威胁难发现 | ✅ 实时安全事件检测 |
1、环境准备
在开始安装前,确保你的系统满足以下要求:
- 🖥️ Linux/Unix系统(本文以centos为例)
- 🌐 支持BMP协议的网络设备(交换机、路由器)
2、安装示例(使用 Docker Compose)
[root@localhost BMP]# wget https://raw.githubusercontent.com/OpenBMP/obmp-docker/main/docker-compose.yml
[root@localhost BMP]# git clone https://github.com/OpenBMP/obmp-grafana.git
[root@localhost BMP]# mkdir -p /var/openbmp
[root@localhost BMP]# export OBMP_DATA_ROOT=/var/openbmp
[root@localhost BMP]# sudo mkdir -p $OBMP_DATA_ROOT
[root@localhost BMP]# sudo chmod -R 7777 $OBMP_DATA_ROOT
[root@localhost BMP]# mkdir -p $OBMP_DATA_ROOT/config
[root@localhost BMP]# mkdir -p $OBMP_DATA_ROOT/kafka-data
[root@localhost BMP]# mkdir -p $OBMP_DATA_ROOT/zk-data
[root@localhost BMP]# mkdir -p $OBMP_DATA_ROOT/zk-log
[root@localhost BMP]# mkdir -p $OBMP_DATA_ROOT/postgres/data
[root@localhost BMP]# mkdir -p $OBMP_DATA_ROOT/postgres/ts
[root@localhost BMP]# mkdir -p $OBMP_DATA_ROOT/grafana
[root@localhost BMP]# chmod -R 7777 $OBMP_DATA_ROOT/*
[root@localhost BMP]# cp -r obmp-grafana/dashboards obmp-grafana/provisioning $OBMP_DATA_ROOT/grafana/
[root@localhost BMP]# vim docker-compose.yml
# 修改文件中的 MEM 字段,将 Docker 使用的内存改为 2G,测试环境足够使用。
[root@localhost BMP]# OBMP_DATA_ROOT=/var/openbmp docker-compose -f ./docker-compose.yml -p obmp up -d
# 查看容器状态
[root@localhost BMP]# docker ps
CONTAINER ID IMAGE STATUS PORTS
... confluentinc/cp-kafka:6.0.2 Up 0.0.0.0:9092->9092/tcp
... openbmp/psql-app:latest Up 0.0.0.0:9005->9005/tcp
... openbmp/postgres:latest Up 0.0.0.0:5432->5432/tcp
... openbmp/collector:latest Up 0.0.0.0:5000->5000/tcp
... grafana/grafana:latest Up 0.0.0.0:3000->3000/tcp
[root@localhost BMP]# OBMP_DATA_ROOT=/var/openbmp docker-compose -p obmp down # 停止和删除所有容器
网络设备 BMP 配置示例
网络设备配置BMP将BGP相关信息上报OPENBMP
华为交换机示例
拓扑如下

以下为BGP配置和BMP配置
CE12800-1:
bgp 100
router-id 1.1.1.1
peer 12.1.1.2 as-number 200
ipv4-family unicast
import-route ospf 1
peer 12.1.1.2 enable
#
bmp
session 192.168.225.128
tcp connect port 5000
CE12800-2:
bgp 200
router-id 2.2.2.2
peer 12.1.1.1 as-number 100
ipv4-family unicast
import-route ospf 1
peer 12.1.1.1 enable
#
bmp
session 192.168.225.128
tcp connect port 5000
效果展示
上面已经使用docker安装好了OPENBMP,安装好后默认也已经安装好了grafana,并且也已经内置模版了,可以直接访问使用:

1、可以查看对应路由器的在线状态,以及对应 BGP 邻居的信息

2、可以查看对应 AS 历史通告的路由信息

3、查看当前 RIB 状态、历史前缀信息

因为上述为简单的实验环境所以信息有限,实际场景可以查看更多信息,功能还是比较强大的,有兴趣的小伙伴们可以尝试部署感受下效果
总结:OpenBMP通过将BMP协议开源化、平台化,彻底改变了BGP网络监控的方式,从被动的”救火式”运维转变为主动的、预防性的、数据驱动的网络运维模式。