Пассивный мониторинг сети (часть 1)
Проект мониторинга сетевых фабрик (условный Huawei) в дата-центрах был инициирован в связи с началом использования оборудования нового вендора. Опыт мониторинга оборудования другого вендора (условные Cisco) уже имелся, но в нем были моменты, которые нас не устраивали. И раз уж шаблон нужно переписывать с нуля под нового вендора, то почему бы не попробовать его улучшить. Сказано сделано. Сначала определим, что именно нам не нравиться в существующем подходе.
**Проблемы существующего подхода ** Мониторинг организован путем периодического опроса оборудования по протоколу SNMP А это значит: 1. Высокая нагрузка на систему: Для проверки состояния всех интерфейсов, сессий BGP, BFD и т.д. генерируется большое количество запросов, что нагружает как систему мониторинга, так и само оборудование. 2. Промежутки опроса: Хоть запросов и много, но все равно существует промежуток времени, когда оборудование не опрашивается, а значит есть вероятность упустить плавающую проблему или потратить много времени на её выявление. 3. Задержка в обнаружении неисправностей: Если какой-нибудь элемент данных опрашивается раз в 5 минут и проблема происходит через несколько секунд после последнего опроса, то ближайшие 5 минут мы будем уверены, что все хорошо, хотя на деле может быть иначе. 4. Проблемы с потерей данных: Если отвалится какая-то часть оборудования (модуль, плата расширения и т.д.), то вместе с ней пропадет и часть ветки MIB, данные перестанут поступать и для выявления таких аварий потребуется составление более сложных проверок.
Что делать? Решение: комбинированный подход Пусть оборудование само сообщает, когда с ним что-то происходит не так. Полностью уйти от модели опроса оборудования не получится, и, например, если оборудование перестанет быть доступно совсем оно нам уже ничего не сообщит. Но вполне можно комбинировать эти 2 подхода, а именно часть метрик мы продолжим собирать периодически опрашивая оборудование, а часть метрик оборудование будет отправлять нам самостоятельно.
**Преимущества комбинированного подхода **1. Снижение нагрузки: Уменьшение количества запросов к оборудованию и системе мониторинга. 2. Выявление плавающих проблем: Ускоренное обнаружение проблем, которые могут возникать между опросами. 3. Оперативное реагирование: получать информацию о недоступности части оборудования и реагировать на нее простыми триггерами без использования сложной логики.
**Реализация
**Итак, активная часть, с опросом по SNMP нам уже знакома, что насчет пассивной части и получения информации от оборудования в момент совершения события.
Тут есть варианты:
- собирать по rsyslog логи с оборудования, где-нибудь на удаленном сервере и системой мониторинга парсить логи
- напрямую получать TRAP сообщения от оборудования в системе мониторинга
Решили выбрать вариант номер 2, т.к. он более стандартизирован и описан в документации вендора. Здесь я немного слукавил про то, что сообщения мы будем получать прямо в системе мониторинга, все же из коробки так сделать не получится и нам потребуется прослойка, которая эти самые сообщения будет ловить и складывать в файлик, а мы уже будем парсить этот файлик и выдергивать нужные сообщения для узлов в нашей системе мониторинга. Так что второй способ технологически не сильно отличается от первого, но все же более стандартизирован.
В качестве ловца сообщений будем использовать SNMPTrapd.
Документации в сети по настройке TRAP достаточно, настраиваем… Но в процессе настройки и тестирования понимаем следующее, во всех манах и документациях сказано - _прописываем в настройках snmptrapd уникальный идентификатор оборудования (engine ID) и получаем от него сообщения.
_Вот здорово, для 1 железки прописать этот ID не сложно, а если железок 100+ и будут добавляться новые или меняться? Встает вопрос об актуальности списка engine ID и своевременного его обновления.
Эх.. ладно пишем костыли чтобы раз в день опрашивать все оборудование и получать актуальные engine ID и править их список. Но параллельно ищем более простое в масштабировании решение и ... находим!
· 30.09.2024
1. Там вроде бы не такое большое количество самих запросов, сколько сам запрос большой. https://www.zabbix.com/documentation/6.0/ru/manual/config/items/itemtypes/snmp#обработка-массовых-snmp-запросов
Тем не менее на оборудование да, получается нагрузка та же самая 2. При отправке трапа отправляется ip оборудования, а в regexp трапа в zabbix, возможно прописать {HOST.IP}, я в свое время пошел таким путем. А так же для port security использовал сначала по lld опрос oid портов (т.к. были разные cisco), а затем создаение items, с нужным фильтром на snmptraps.
3. Некоторые элементы данных работают как счетчик. И собирают информацию между периодами опроса. Тем не менее согласен, точность страдает
P. S. Не нашёл как ответить не от сообщества
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён
· 01.10.2024
1. Всегда полезно лишний раз перечитать документацию, теперь понял как работают массовые запросы =) Вывод - да массовыми запросами мы можем сократить кол-во запросов в 128 раз (а можем и не сократить или сократить в меньшее кол-во раз, в зависимости от реализации GetBulkRequest на железке). Ну а железки с 2к портов и 30+к элементов данных плакали вместе с сетевиками от нагрузки по SNMP и любая оптимизация была в радость. Так что массовые запросы это хорошо, но и пассивный мониторинг со счетов не списываем. 2. Здесь не совсем понял комментарий, но у меня возникла проблема с масштабированием еще на уровне ловушки (snmptrad). Т.к. В настройках необходимо было указывать EngineID для каждой железки чьи трапы мы собираемся ловить. В статье не указал что используется SNMPv3, если использовать SNNPv2 с community, действительно таких проблем не будет. 3. Здесь скорее речь о проверке доступности устройства\модуля\порта и т.д. То что со счетчиками - пакеты\байты\коллизии и т.д. запрашиваем по SNMP.
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён