Б
Будни сетевика
@life_of_network_engineer1.1K подп.
1.5Kпросмотров
12 февраля 2026 г.
Score: 1.6K
Задача: в алертах от zabbix при падении BGP-сессий с провайдерами видеть их имена, а не только IP-адреса Пример того, что хотелось: router_name: PROVIDER_NAME@IP_ADDRESS is DOWN На тот момент у нас во всех ЦОДах в качестве бордеров были Cisco ASR9001. Через SNMP нельзя вытащить имена провайдеров, которые вы настроили в конфигурации маршрутизатора - в BGP-MIB просто нет объекта с description пира. Соотвественно алерты будут приходить на падение BGP-сессий с указанием только IP-адресов. Необходимо было добавить как раз понятные имена провайдеров, чтобы сразу по алерту было видно с кем упала сессия и надо ли действовать ASAP или подождет. Это были попытки облегчить себе жизнь в период, когда еще не было выделенных спецов для мониторинга инф-ры 24/7. Сейчас спецы появились, но все уже привыкли к удобным именам. Был изобретен следующий велосипед. 1️⃣ Создаем файлик router.peers, в котором указываем соотвествие IP-адреса BGP-пира из конфигурации маршрутизатора и имени. Формат JSON: { "router1": { "NAME_ISP1": ["172.17.11.12"], "NAME_ISP2": ["172.17.11.13"], "NAME_ISP3": ["172.17.11.14"] }, "router2": { "NAME_ISP1": ["172.17.11.22"], "NAME_ISP2": ["172.17.11.23"], "NAME_ISP3": ["172.17.11.24"] } } 2️⃣ Пишем скрипт bgp_peer_parser.py, который будет парсить этот файлик: #!/usr/bin/python3 import json, sys path = '/etc/zabbix/set/router.peers' method = str(sys.argv[1]) mx = str(sys.argv[2]) if method == 'discovery': with open(path, 'r') as f: data = f.read() try: data = json.loads(data) except: print(‘Problem with JSON’) sys.exit(1) try: discovery = {} discovery["data"] = [] for each in data[mx]: for ip in data[mx][each]: peer = {"{#PEER_NAME}":str(each),"{#PEER_IP}":str(ip)} discovery['data'].append(peer) discovery = json.dumps(discovery) print(discovery) except: print(‘0’) sys.exit(1) 3️⃣ Копируем скрипт на хост и в конфиге zabbix_agent хоста, на котором будет выполняться скрипт указываем: UserParameter=router[*],/etc/zabbix/externalscripts/bgp_peer_parser.py $1 $2 где router - это имена ваших сетевых железок в zabbix. Можно выполнять с самого zabbix-сервер. Приложил в комменты шаблон для zabbix с созданными Disccovery Rules, где отслеживаются состояние BGP-сессий и два триггера на Admin Down и Down. Получатся вот такие алерты: Router1 High: NAME_ISP1@172.17.11.12 is DOWN Operational data: Active (3), 2, Hold Timer Expired (1024) Недостатки очевидны: • Нужно следить за актуальностью файлика маппинга IP в Name и менять руками • Нужно следить, чтобы никто не сломал структуру файла, например не пропустил запятую, потому что узнаете вы об этом уже позже, когда заббикс поругается и новые алерты не будут работать. В нашем случае, т.к. файлик лежал в репозитории, то включили проверку на файл в репе - если сломал, то не сможешь смержить изменения. Плюсы: • Универсальное решение для любого вендора. Когда мы переезжали с Cisco ASR на Juniper MX ничего менять не пришлось. С таким решением мы жили довольно долго, да и живем сейчас если уж быть честным, но переходим на Netbox вместо json-файлика. Проверил, на текущей версии Junos в MIB ничего похожего на BGP peer description не появилось 🤷 🎤 Будни сетевика 😊 #Задача
1.5K
просмотров
3483
символов
Да
эмодзи
Нет
медиа

Другие посты @life_of_network_engineer

Все посты канала →
Задача: в алертах от zabbix при падении BGP-сессий с провайд — @life_of_network_engineer | PostSniper