使用bmp的方式監控BGP狀態

【說明】python

bmp(bgp monitor protocol)服務器使用基於python開源的yabmpgit

由於是在模擬環境下作的實驗,h3c的模擬器不支持bmp,因此經過使用gobgp來作bmp的客戶端github

 

1、實驗拓撲bash

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

2、配置服務器

# sw-1#
[h3c01]disp cur con  bgp
#
bgp 65001
 router-id 192.168.31.103
 peer 192.168.31.104 as-number 65002
 peer 192.168.31.110 as-number 64512
 #
 address-family ipv4 unicast
  network 33.33.33.33 255.255.255.255
  network 192.168.31.0 255.255.255.0
  peer 192.168.31.104 enable
  peer 192.168.31.110 enable
#
return
# sw-2 #
<h3c02>disp cur con bgp
#
bgp 65002
 router-id 192.168.31.104
 peer 192.168.31.103 as-number 65001
 peer 192.168.31.110 as-number 64512
 #
 address-family ipv4 unicast
  network 192.168.31.0 255.255.255.0
  peer 192.168.31.103 enable
  peer 192.168.31.110 enable
#
return
# gobgp # 
[root@C7 gobgp]# cat gobgpd.conf 
[global.config]
  as = 64512
  router-id = "192.168.31.110"

[[neighbors]]
  [neighbors.config]
    neighbor-address = "192.168.31.103"
    peer-as = 65001

[[neighbors]]
  [neighbors.config]
    neighbor-address = "192.168.31.104"
    peer-as = 65002

[[bmp-servers]]
  [bmp-servers.config]
    address = "192.168.31.247"
    port=20000

 

yabmp 使用默認的配置選項,能夠經過python bin/yabmpd -h查看具體有哪些選項ide

 

3、運行gobgpd和yabmpd學習

軟件的具體安裝過程請查看文章開頭的GitHub引用連接;測試

1.gobgpd -f gobgpd.confcode

[root@C7-slave-72 gobgp]# gobgpd -f gobgpd.conf 
{"level":"info","msg":"gobgpd started","time":"2021-08-06T21:19:46+08:00"}
{"Topic":"Config","level":"info","msg":"Finished reading the config file","time":"2021-08-06T21:19:46+08:00"}
{"level":"info","msg":"Peer 192.168.31.103 is added","time":"2021-08-06T21:19:46+08:00"}
{"Topic":"Peer","level":"info","msg":"Add a peer configuration for:192.168.31.103","time":"2021-08-06T21:19:46+08:00"}
{"level":"info","msg":"Peer 192.168.31.104 is added","time":"2021-08-06T21:19:46+08:00"}
{"Topic":"Peer","level":"info","msg":"Add a peer configuration for:192.168.31.104","time":"2021-08-06T21:19:46+08:00"}
{"Topic":"bmp","level":"info","msg":"BMP server is connected:192.168.31.247:20000","time":"2021-08-06T21:19:46+08:00"}
{"Key":"192.168.31.103","State":"BGP_FSM_OPENCONFIRM","Topic":"Peer","level":"info","msg":"Peer Up","time":"2021-08-06T21:19:47+08:00"}
{"Key":"192.168.31.104","State":"BGP_FSM_OPENCONFIRM","Topic":"Peer","level":"info","msg":"Peer Up","time":"2021-08-06T21:19:48+08:00"}

2.啓動yabmpdorm

(yabmp)  yabmp-master % python bin/yabmpd                         
2021-08-06 13:21:05,250.250 2317 INFO yabmp.service [-] Log (Re)opened.
2021-08-06 13:21:05,250.250 2317 INFO yabmp.service [-] Configuration:
2021-08-06 13:21:05,250.250 2317 INFO yabmp.service [-] ********************************************************************************
2021-08-06 13:21:05,250.250 2317 INFO yabmp.service [-] Configuration options gathered from:
2021-08-06 13:21:05,250.250 2317 INFO yabmp.service [-] command line args: []
2021-08-06 13:21:05,251.251 2317 INFO yabmp.service [-] config files: []
2021-08-06 13:21:05,251.251 2317 INFO yabmp.service [-] ================================================================================
2021-08-06 13:21:05,251.251 2317 INFO yabmp.service [-] bind_host                      = 0.0.0.0
2021-08-06 13:21:05,251.251 2317 INFO yabmp.service [-] bind_port                      = 20000
2021-08-06 13:21:05,251.251 2317 INFO yabmp.service [-] config_dir                     = None
2021-08-06 13:21:05,251.251 2317 INFO yabmp.service [-] config_file                    = []
2021-08-06 13:21:05,251.251 2317 INFO yabmp.service [-] log_backup_count               = 5
2021-08-06 13:21:05,251.251 2317 INFO yabmp.service [-] log_config_file                = None
2021-08-06 13:21:05,251.251 2317 INFO yabmp.service [-] log_dir                        = None
2021-08-06 13:21:05,251.251 2317 INFO yabmp.service [-] log_file                       = /Users/**data/bmp/local/log/yabmp.log
2021-08-06 13:21:05,251.251 2317 INFO yabmp.service [-] log_file_mode                  = 0644
2021-08-06 13:21:05,251.251 2317 INFO yabmp.service [-] use_stderr                     = True
2021-08-06 13:21:05,251.251 2317 INFO yabmp.service [-] verbose                        = False
2021-08-06 13:21:05,251.251 2317 INFO yabmp.service [-] message.write_dir              = /Users/**/data/bmp/local/msg
2021-08-06 13:21:05,251.251 2317 INFO yabmp.service [-] message.write_msg_max_size     = 500
2021-08-06 13:21:05,251.251 2317 INFO yabmp.service [-] ********************************************************************************
2021-08-06 13:21:05,251.251 2317 INFO root [-] Initial BMP Factory!
2021-08-06 13:21:05,251.251 2317 INFO yabmp.service [-] Starting bmpd server listen to port = 20000 and ip = 0.0.0.0

 

4、查看bgp變更的消息

消息目錄:    message.write_dir              = /Users/**/data/bmp/local/msg

cat msg/192.168.31.110/192.168.31.103/1628218920.608693.msg
[1628218920.609, 1, 1, {'version': 4, 'asn': 65001, 'hold_time': 180, 'bgp_id': '192.168.31.103', 'capabilities': {'afi_safi': [(1, 1)], 'route_refresh': True, 'four_bytes_as': True}}, (0, 0)]
[1628218920.611258, 2, 130, (2, {'attr': {1: 0, 2: [(2, [65001])], 3: '192.168.31.103', 4: 0}, 'nlri': ['192.168.31.0/24'], 'withdraw': []}), (1, 1)]
[1628219330.2266371, 3, 130, (2, {'attr': {1: 0, 2: [(2, [65001])], 3: '192.168.31.103', 4: 0}, 'nlri': ['33.33.33.33/32'], 'withdraw': []}), (1, 1)]
[1628223979.388705, 4, 1, {'version': 4, 'asn': 65001, 'hold_time': 180, 'bgp_id': '192.168.31.103', 'capabilities': {'afi_safi': [(1, 1)], 'route_refresh': True, 'four_bytes_as': True}}, (0, 0)]
[1628223979.38894, 5, 130, (2, {'attr': {1: 0, 2: [(2, [65001])], 3: '192.168.31.103', 4: 0}, 'nlri': ['33.33.33.33/32'], 'withdraw': []}), (1, 1)]
[1628223979.389089, 6, 130, (2, {'attr': {1: 0, 2: [(2, [65001])], 3: '192.168.31.103', 4: 0}, 'nlri': ['192.168.31.0/24'], 'withdraw': []}), (1, 1)]
[1628225080.627847, 7, 1, {'version': 4, 'asn': 65001, 'hold_time': 180, 'bgp_id': '192.168.31.103', 'capabilities': {'afi_safi': [(1, 1)], 'route_refresh': True, 'four_bytes_as': True}}, (0, 0)]
#
# 從這裏開始 多個datetime格式的時間戳,是我修改了代碼,後面會說
#
['2021--08--06 12:44:40', 1628225080.6284769, 8, 130, (2, {'attr': {1: 0, 2: [(2, [65001])], 3: '192.168.31.103', 4: 0}, 'nlri': ['33.33.33.33/32'], 'withdraw': []}), (1, 1)]
['2021--08--06 12:44:40', 1628225080.628723, 9, 130, (2, {'attr': {1: 0, 2: [(2, [65001])], 3: '192.168.31.103', 4: 0}, 'nlri': ['192.168.31.0/24'], 'withdraw': []}), (1, 1)]
[1628227188.515646, 10, 1, {'version': 4, 'asn': 65001, 'hold_time': 180, 'bgp_id': '192.168.31.103', 'capabilities': {'afi_safi': [(1, 1)], 'route_refresh': True, 'four_bytes_as': True}}, (0, 0)]
['2021--08--06 13:19:48', 1628227188.5204768, 11, 130, (2, {'attr': {1: 0, 2: [(2, [65001])], 3: '192.168.31.103', 4: 0}, 'nlri': ['33.33.33.33/32'], 'withdraw': []}), (1, 1)]
['2021--08--06 13:19:48', 1628227188.520828, 12, 130, (2, {'attr': {1: 0, 2: [(2, [65001])], 3: '192.168.31.103', 4: 0}, 'nlri': ['192.168.31.0/24'], 'withdraw': []}), (1, 1)]

 

5、二次修改代碼

1.修改msg時間戳

yabmp-master/yabmp/handler/default.py -> def on_message_received中

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

2.豐富輸出方式(不僅是寫入文件,還能夠發到syslog服務器上)

能夠在以下圖的路徑代碼中豐富輸出方式

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

logging支持向syslog發送消息:

# 示例,沒有具體測試!!

import logging
import logging.handlers  # handlers要單獨import

logger = logging.getLogger()
fh = logging.handlers.SysLogHandler(('23.106.133.164', 514), logging.handlers.SysLogHandler.LOG_AUTH)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
logger.addHandler(fh)
logger.warning("msg")
logger.error("msg")

 

好了,此次實驗到此,你們在公司都有用哪些方式監控BGP呢?歡迎交流學習。

相關文章
相關標籤/搜索