Как я ваяла bgp шаблон для huawei в zabbix
Эта история входит в серию про описание работы админа и рассказывает не о том, что «вот я сделала шаблон для zabbix – скачивайте», но о том, как всё это происходит.
В пятницу у меня была задача ничего не сломать, наконец-то образовалось свободное время и я занялась шаблонами на zabbix для мониторинга BGP. Есть шаблоны на cisco, а вот на huawei я нашла один какой-то шаблон. Он работал, но меня не устраивал своей малой информативностью и я начала его допиливать.
Я вообще в шаблонах заббикса полный нуб, максимум что делала — пару параметров поправить. Именно поэтому я не пошла создавать свой супер-мега шаблон с нуля, а взяла за основу чей-то. Для начала нам нужны mib от Huawei на CloudEngine 8000. Спасибо хуавею за наше счастливое настоящее — по ним есть онлайн справка.
Что такое mib? Это Management Information Base, с ней работает snmp. Там по цифровому ключу, разделённому точками (типа 1.5.2.4.3.1) можно получить значение, которое будет характеризовать какое-то состояние какого-то компонента системы. Ну типа, у вас интерфейс поднят или нет? Или вентилятор включен или нет? Или «трафика зарегистрировано в такой-то момент столько-то килобит на таком-то интерфейсе в такую-то сторону». У каждого значения есть точный ключ, такая длинная цифровая змея. Если взять ключ и отрезать у него хвостик до какого-то знака — и обратиться по обрезанному ключу — можно получить список значений, объединенных по какому-то признаку. Например, статус всех интерфейсов в системе.
Zabbix работает с сетевыми железками через snmp, соответственно, в шаблонах там указаны mib. Чтоб заббикс мог по ним что-то считывать, он должен ещё о них знать и это своя отдельная тема. Например, на непопулярные железки надо подкладывать ему mib-файлы в определенную папочку на сервере. Но с хуавеем всё хорошо, он о них (ладно, о большинстве) сам знает.
Исходный шаблон показывал соседей BGP (и не было понятно что это пир, только теги смотреть) и статус пира в виде строки с текстом от 1 до 6. Я, во-первых, коды наизусть не особо знаю, во-вторых, хотела бы график с изменением статуса пира, а график - он только для чисел, а не для текста. Также я не поняла зачем на фактически одни и те же пиры делать обнаружение и перетащила всё в одно «обнаружение», но сделала дополнительный «прототип данных» на статус пира.
С представлением в виде чиселок вроде понятно — берем и меняем «текст» на «целое положительное» и получаем то же самое, что было, но уже в цифровом виде.
Если посмотреть у узла сети «данные», то там и график сам появится.
Теперь про отображение. У прототипа данных есть «предобработка», но если там менять число на его описание, то и выходные данные снова будут текстовые и графика мы не получим. Но я же вижу, что у других шаблонов и график есть и человеческое описание. Я пошла в базовый сетевой шаблон и посмотрела как там сделано. А там у шаблона есть преобразования значений. Пилим по аналогии:
Берём из описания mib 1.3.6.1.4.1.2011.5.25.177.1.1.2.1.5
The status of the remote BGP peer, including:
1: Idle(1)
2: Connect(2)
3: Active(3)
4: Opensent(4)
5: Openconfirm(5)
6: Established(6)
И вписываем в преобразование у самого шаблона.
Ииии.. ничего не работает. Надо указать, что мы используем это преобразование в прототипе элемента данных (мне пришлось прочитать справку заббикса про преобразование значений, чтоб это найти):
Внимательный читатель заметит (есть ностальгия по старым книжкам при этих словах, да?), что мы смотрели mib 1.3.6.1.4.1.2011.5.25.177.1.1.2.1.5 а в шаблоне у нас 1.3.6.1.4.1.2011.5.25.177.1.1.2.1.5.0.1.1.1.4 — так откуда взялся 0.1.1.1.4? Я не искала ответ, что именно он означает (мне вообще кажется он про ipv4, но не суть). Главное, что прежде чем мы mib из справки пойдём вставлять в шаблоны заббикса - хорошо бы посмотреть, что он в выводе даёт. Для этого у нас есть утилита snmpwalk. Запускаем с заббикс-сервера команду просмотра mib, указывая ip роутера, и смотрим, что выдаётся.
Всё в конце, что не войдет в ваш SNMP OID, поселится в #SNMPINDEX, а нам там нужен только ip, соответственно весь нужный хвостик 0.1.1.1.4 включаем в SNMP OID.
Из того, что в шаблоне не было, мне захотелось добавить номер автономной системы соседа hwBgpPeerRemoteAs, MIB 1.3.6.1.4.1.2011.5.25.177.1.1.2.1.2 — сделала по аналогии.
Ну и триггер на изменение статуса пира удалось сделать встроенным мастером. Выглядит он странно, но работает.
В целом, посмотрю, что ещё надо, чтоб видеть, что оно сломалось. Например, есть количество eBGP и iBGP сессий — хорошо бы его тоже отслеживать.
У меня на гитхабе профиля нет, так что кому надо, шаблон по ссылке тут (это yaml, загружать в чужой заббикс не пробовала, уже после публикации нашла, что одно свойство у меня не bgppeer, а pgppeer, но это ни на что не влияет на данном этапе, только на эстетику).
Немного воды в конце: я вообще не вдупляла в начале куда смотреть. На понимание и дабавление пары фич у меня ушла половина рабочего дня неспешного ковыряния и ещё час вечером. Это много. С другой стороны, вы посмотрели как поступает админ в случае "да я вообще х.з. как эту хрень делать".
А ещё у меня в профиле есть телега, где я пишу более короткие и развлекательные посты пару-тройку раз в неделю, вдруг кому будет интересно.