Zabbix + Cisco ISR: мониторим загрузку VPN-туннелей посредством SNMP + Perl script + LLD

в 14:44, , рубрики: Cisco, LLD, vpn, zabbix, Сетевые технологии, системное администрирование, метки: , , ,

Задача: Имеется роутер Cisco с кучей настроенных site-to-site IPsec-VPN-туннелей. Нужно настроить мониторинг загрузки туннелей в Zabbix 2.0.x
Предполагается, что SNMP на циске и в Zabbix'е уже настроен.

Основная проблема заключается в том, что нужные нам для мониторинга номера SNMP OIDs с отсчётами трафика формируются динамически. Мало того, списки этих номеров — также формируются динамически.

Это является следствием того, что сам алгоритм построения туннеля довольно сложен. Сперва формируется служебный ISAKMP туннель, затем основной IPSEC-туннель для данных. Подробнее об этом можно почитать тут: linkmeup.ru/blog/50.html (кстати, отличный обучающий цикл статей этого автора по основам настройки оборудования Cisco уже был на Хабре).

Конкретный алгоритм извлечения заветных отсчётов трафика настолько мутный, что реализовать его чисто встроенными средствами Zabbix, по-видимому, невозможно. Да что там, даже художественно перевести у меня не получилось. Позволю себе описание с форума www.networking-forum.com:

those OIDs refer to bytes used solely over the phase 1 tunnel. In order to get actual user traffic over the phase 2 tunnels you must get the phase 1 index ID using the endpoint address from SNMPv2-SMI::enterprises.9.9.171.1.2.3.1.7, then map that to the phase 2 index ID(s) from SNMPv2-SMI::enterprises.9.9.171.1.3.2.1.2, then you can use SNMPv2SMI::enterprises.9.9.171.1.3.2.1.26 and SNMPv2-SMI::enterprises.9.9.171.1.3.2.1.39 with the phase 2 index ID appended for the actual phase 2 traffic.

Любознательные могут подёргать нужные OIDs ручками, чтобы воочию узреть масштаб бедствия:

zabbix-host:~ # snmpwalk -v2c -c <community> <IP-адрес роутера> SNMPv2-SMI::enterprises.9.9.171.1.2.3.1.7
SNMPv2-SMI::enterprises.9.9.171.1.2.3.1.7.479 = STRING: "091.092.093.094"
SNMPv2-SMI::enterprises.9.9.171.1.2.3.1.7.483 = STRING: "012.013.014.015"
SNMPv2-SMI::enterprises.9.9.171.1.2.3.1.7.499 = STRING: "162.163.164.165"
SNMPv2-SMI::enterprises.9.9.171.1.2.3.1.7.505 = STRING: "217.218.219.220"
zabbix-host:~ # snmpwalk -v2c -c <community> <IP-адрес роутера> SNMPv2-SMI::enterprises.9.9.171.1.3.2.1.2:
SNMPv2-SMI::enterprises.9.9.171.1.3.2.1.2.8830 = INTEGER: 462
SNMPv2-SMI::enterprises.9.9.171.1.3.2.1.2.8831 = INTEGER: 462
SNMPv2-SMI::enterprises.9.9.171.1.3.2.1.2.8832 = INTEGER: 462
SNMPv2-SMI::enterprises.9.9.171.1.3.2.1.2.8833 = INTEGER: 462
SNMPv2-SMI::enterprises.9.9.171.1.3.2.1.2.8834 = INTEGER: 499
SNMPv2-SMI::enterprises.9.9.171.1.3.2.1.2.8835 = INTEGER: 499
SNMPv2-SMI::enterprises.9.9.171.1.3.2.1.2.8836 = INTEGER: 499
SNMPv2-SMI::enterprises.9.9.171.1.3.2.1.2.8837 = INTEGER: 499
SNMPv2-SMI::enterprises.9.9.171.1.3.2.1.2.8838 = INTEGER: 499
SNMPv2-SMI::enterprises.9.9.171.1.3.2.1.2.8839 = INTEGER: 499
SNMPv2-SMI::enterprises.9.9.171.1.3.2.1.2.8840 = INTEGER: 499
SNMPv2-SMI::enterprises.9.9.171.1.3.2.1.2.8841 = INTEGER: 499
SNMPv2-SMI::enterprises.9.9.171.1.3.2.1.2.8842 = INTEGER: 499

К счастью, добрые люди с форума Cacti написали перловый скрипт, который всю чёрную работу делает сам.

Скачаем скрипт и закинем в папку ExternalScripts (/usr/local/share/zabbix/externalscripts по умолчанию).

Поиграемся с этим скриптом вручную:

zabbix-host:/usr/local/share/zabbix/externalscripts # perl query_asa_lan2lan.pl <community> <IP-адрес роутера> ASA get RX <IP-адрес какого-нибудь remote endpoint>
70546023

Работает!

Поскольку туннелей много и иногда они меняются, применим LLD (правила низкоуровнего обнаружения) в Zabbix, чтобы туннели все сами обнаруживались и прописывались у нас в системе.
Делаем новый шаблон, а в нём — правило обнаружения и прототипы элементов данных на incoming и outgoing traffic:
image

image
Ключ полностью: query_asa_lan2lan.pl["{$SNMP_COMMUNITY}", "{HOST.IP}", «ASA», «get», «RX», "{#SNMPVALUE}"]
Ссылка в описании OID: tools.cisco.com/Support/SNMP/do/BrowseOID.do?local=en&translate=Translate&objectInput=1.3.6.1.4.1.9.9.171.1.2.3.1.35#oidContent

image
Ключ полностью: query_asa_lan2lan.pl["{$SNMP_COMMUNITY}", "{HOST.IP}", «ASA», «get», «TX», "{#SNMPVALUE}"]
Ссылка в описании OID: tools.cisco.com/Support/SNMP/do/BrowseOID.do?local=en&translate=Translate&objectInput=1.3.6.1.4.1.9.9.171.1.2.3.1.35#oidContent

Применяем шаблон к нужным хостам, ждём автообнаружения и созерцаем наши туннельчики.

Осталось сделать графики для туннелей. К сожалению, LLD не позволяет автоматически делать консолидированные графики из нескольких прототипов данных, придётся добавить обнаруженные элементы данных вручную:

image

Ура! Можно хвастаться живыми картинками боссу.

Автор: Ethril

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js