Zabbix 1.6: библиотека шаблонов и автообнаружение вместо ручной настройки
Как мы собрали набор шаблонов Zabbix для типовых ролей серверов и сократили добавление нового хоста в мониторинг с часа до пяти минут.
Zabbix 1.6.x - развитие функций авто-обнаружения и шаблонизации мониторинга
Когда мы переводили одного из клиентов с Nagios на Zabbix, главным аргументом были авто-обнаружение и шаблоны. Звучит красиво, но на практике оказалось, что Zabbix из коробки даёт только механизм - наполнять его нужно самому. Зa последние месяцы мы это и делали: собирали библиотеку шаблонов для типовых серверных ролей. Пора зафиксировать, что получилось.
Откуда задача
После перехода с Nagios авто-обнаружение стало находить новые хосты, но дальше начинался ручной труд: зайти в интерфейс, определить роль сервера, навесить нужные шаблоны, проверить триггеры. Час - не катастрофа для одного сервера, но если клиент разворачивает несколько машин разом или идёт плановое расширение инфраструктуры, это превращается в скучную рутину с высоким шансом что-нибудь пропустить.
Проблема не в Zabbix - инструмент правильный. Проблема в том, что мы каждый раз заново собирали мониторинг с нуля, даже если роль сервера абсолютно стандартная.
Что такое «типовая роль»
Мы прошлись по всем клиентским инфраструктурам и выделили четыре роли, которые встречаются везде:
- Веб-сервер. Apache или nginx, PHP, иногда Tomcat. Нужны: доступность HTTP/HTTPS, время ответа, статус Apache (mod_status), счётчики PHP-FPM или Apache workers, место на диске под логи.
- БД-сервер. MySQL или PostgreSQL. Connections, slow queries, размер таблиц, доступность порта, replikaция если есть, место на диске под data-директорию.
- Файловый сервер. Samba или NFS. Использование дискового пространства по разделам, нагрузка на inode, доступность шары, нагрузка на дисковый ввод-вывод.
- Почтовый сервер. Postfix + Dovecot. Длина очереди deferred, доступность SMTP/IMAP/POP3, объём трафика, место на диске под maildir.
Плюс общий базовый шаблон для всех хостов: CPU, память, swap, сетевые интерфейсы, disk I/O, uptime, доступность по ICMP.
Как устроены шаблоны
В Zabbix шаблон - это набор items (что собирать), triggers (когда алертить) и graphs (что рисовать), упакованных в именованный объект. Шаблоны можно экспортировать в XML и импортировать на другой сервер Zabbix. Именно это мы и сделали: каждая роль оформлена отдельным XML-файлом, который лежит в нашем внутреннем репозитории.
Несколько решений, которые оказались важными в процессе:
Наследование вместо копирования. Каждый ролевой шаблон линкуется от базового - не дублирует его содержимое, а добавляет своё поверх. Когда мы правим порог триггера в базовом шаблоне, изменение автоматически применяется ко всем ролям. До этого каждый шаблон был самостоятельным, и обновить один параметр означало пройтись по всем четырём вручную.
Макросы вместо захардкоженных значений. Пороги триггеров (например, «CPU выше 90% три раза за 5 минут» или «место на диске меньше 15%») вынесены в {$MACRO}-переменные на уровне шаблона. На конкретном хосте или группе хостов можно переопределить макрос без редактирования шаблона. Удобно, когда у клиента один сервер БД под высокой нагрузкой и обычные пороги постоянно дают ложные алерты.
Правила авто-обнаружения с автоматическим назначением шаблона. Это самая приятная часть. В Zabbix 1.6 action при авто-обнаружении можно настроить не только на добавление хоста, но и на назначение шаблона в зависимости от условия. Мы добавили проверку: если при сканировании на хосте открыт порт 3306 - назначить шаблон «DB Server», 25/143 - «Mail Server» и так далее. Срабатывает не идеально - один хост может быть одновременно веб- и почтовым, и тогда нужно назначить два шаблона, а не один. Но процентов восемьдесят случаев покрывается автоматически.
Сколько времени занимает теперь
Новый сервер стандартной роли - пять минут с момента, как зашли в Zabbix. Авто-обнаружение находит хост само, action назначает шаблон, метрики начинают собираться. Остаётся проверить, правильно ли определилась роль, и при необходимости скорректировать вручную. Это одно действие вместо сборки мониторинга с нуля.
Нестандартный хост с кастомным ПО требует ручной работы - тут никакой автоматизации нет, и это правильно. Но таких хостов в типовой инфраструктуре меньшинство.
Где пока не всё гладко
Экспорт/импорт шаблонов в Zabbix 1.6 работает, но XML-формат местами капризный - особенно если шаблон создавался на одной версии, а импортируется на другой минорной. Несколько раз при импорте терялись связи между items и graphs, и их приходилось восстанавливать руками. Держим шаблоны на одной версии Zabbix и обновляем аккуратно.
Документирования шаблонов пока нет никакого - только комментарии в XML и внутренний вики-документ с описанием макросов. Этого хватает, когда с шаблонами работаешь сам, но при передаче другому инженеру нужно объяснять устно. Будем исправлять.
Итог
Стандартизация мониторинга через шаблоны оказалась одной из тех задач, которую всё время откладываешь, потому что «и так работает», а когда сделал - не понимаешь, как жил без этого. Сейчас добавление нового хоста в сопровождаемую инфраструктуру перестало быть задачей на полдня. Шаблоны разложены по ролям, авто-обнаружение назначает их без нашего участия в большинстве случаев, а пороги можно гибко менять через макросы не трогая саму логику.
Следующий шаг - шаблоны для сетевого оборудования через SNMP. Там своя специфика по OID-ам, но подход тот же.
- Zabbix 1.6: перевели мониторинг крупного клиента с Nagios · 12 марта 2009