Мониторинг активного интернет провайдера в Zabbix

Была задача показать в Zabbix текущего интернет провайдера. У меня их несколько, но активный может быть только один (анонсирую свой диапазон Ip по BGP). В моем случае с каждым провайдером поднято 2 vlan, и через один они анонсируют локальные ip (в рамках страны) а по второму глобальные (приходит default gateway) тоесть находящиеся за пределами страны. Толковой статьи или готового решения не нашел, решено было написать свой скрипт.

Для начала был написан bash скрипт, который проверяет командой traceroute нужный hop и передает его в zabbix.

#!/bin/bash
# Check Outside Path.

IP=$1
Out=$(traceroute -n -m 5 -f 5 $IP | awk FNR-1 | awk '{print $2}')

case "$Out" in

    "10.10.10.1" )
        echo "Global BGP ISP 1"
    ;;

    "10.10.10.2" )
        echo "Local BGP ISP 1"
    ;;

    "10.10.10.3" )
        echo "Global BGP ISP 2"
    ;;

    "10.10.10.4" )
        echo "Local BGP ISP 2"
    ;;

    *)
        echo "Unknown HOP"
    ;;

esac

exit 0

В моем примере я мониторил 5 hop, этот параметр можно настроить под свои нужды.
Разберем команду traceroute
-n : Не резолвим dns имена
— f 5 : устанавливаем первый ttl ( с какого hop начинаем трейс)
-m 5 : устанавливаем максимальный ttl (после 5 hop, трейс останавливается)
Скрипт получает ip адрес от заббикса (переменная $ip) после с помощью traceroute и awk выдает ip адрес в переменную $Out . После чего скрипт возвращает ip адрес 5 hop и завершает работу. ip адреса в case я прописал несуществующие, их нужно поменять на ваши gateway.

Помещаем этот скрипт в /usr/lib/zabbix/externalscripts :
cd /usr/lib/zabbix/externalscripts
touch traceout.sh
chmod +x traceout.sh

В zabbix создаем новый template, в нем создаем два новых item, в моем случае check global bgp path и check local bgp path. Для примера покажу один из них:

item 1

В key прописываем ip адрес для мониторинга глобального BGP пути. Может быть на ваще усмотрение. Желательно чтоб он всегда был доступен. Аналогично создаем второй item для локального мониторинга.

Создаем два триггера на изменения путей. Привожу для примера один:

В problem expression оператор change(/Network Monitoring/traceout.sh[«8.8.8.8»])=1 отслеживает наш item и если он изменился, то выдает информационное оповещение что путь изменился
В recovery expression оператор changecount отслеживает последние 30 проверок, и если они одинаковые, оповещение гаснет ( проверка идет раз в минуту, получается что оповещение погаснет через 30 минут )

Применяем шаблон к серверу, на котором находится этот скрипт ( в моем случае сам zabbix сервер)

И для финала на главный dashboard добавляем два виджета с указанием текущего провайдера

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *