На одном из проектов часто разворачивались/удалялись новые ноды в облаке, соответственно, появилась задача добавления/удаления новых хостов в Zabbix для мониторинга доступности и снятия статистики. Для саморазвития было решено использовать библиотеку zabbix API на питоне. Это был первый опыт написания скриптов, поэтому буду благодарен за отзывы и замечания по коду.
Мы используем zabbix 1.8.5 — как показала практика, порой в разных версиях 1.8.* данные могут возвращаться разными типами данных, так что возможны несостыковки при работе скриптов с другими версиями zabbix, впрочем, они легко устранимы.
Для добавления нового хоста, нам потребуется знать следующие параметры:
- Будущее имя хоста в Zabbix
- DNS
- IP
- порт, который слушает zabbix агент
- будем ли мы мониторить хост по IP (1 или 0.) Соответственно, если 0 — то будем мониторить по DNS
- id групп, в которые мы добавим хост
- id шаблонов (templates), которые мы хотим подключить к хосту
- опционально — макросы для хоста
Кратко по приведенным выше пунктам: если с первыми пятью все довольно просто и понятно, то оставшиеся для человека, имеющего небольшой опыт с заббиксом, могут вызывать вопросы. Более подробную информацию, разумеется, правильнее и лучше смотреть на сайте с документацией zabbix.
Группы хостов — вещь довольно удобная. Например, при настройке сценариев уведомлений, для разных групп можно создать разные условия и типы уведомлений, к примеру, для одних групп — отсылать E-Mail и SMS уведомления, для других — только E-Mail и так далее.
Шаблоны — это, грубо говоря, набор параметров, по которым снимаются данные а также триггеры, реагирующие на события. Для веб-серверов, например, мы будем снимать данные с apache или nginx, в то время как для БД нам будут нужны абсолютно другие параметры. Соотвественно, к разным хостам мы будем подключать разные шаблоны.
Наконец, макросы — это переменные, которые мы передаем хосту. К примеру, у нас есть item (в русском варианте — «Элементы данных»), который снимает статистику утилизации HDD. Так как дисков у нас может быть несколько, макросы позволяют нам передать, что $DISK1=/dev/sda, $DISK2=/dev/sdb и т.д., таким образом, снимая статистику с разных дисков одним item-ом при помощи макросов.
Что нужно изменить в конфигурации скриптов?
Нужные параметры хранятся в файле zabbix_credentials.py
- server — URL сервера. По умолчанию —
http://127.0.0.1/zabbix
- username, password — логин и пароль пользователя, от имени которого будет идти запрос к API. Также, этот пользователь должен иметь права на доступ к API. По умолчанию — admin/zabbix.
- По желанию — log level. Значение по умолчанию — 0.
Добавление хоста осуществляется таким образом: zabbix_host_add.py <hostname> <dns> <ip address> <port> <useip 1 or 0. if 0 - DNS will be used> <groupid1,...,groupidN> <templateid,...,templateidN> <macro1...macroN>
Удаление — zabbix_host_del.py <ip>
Собственно, сами скрипты с кратким readme — github.com/gnetsman/zabbix_api
Автор: GEN_ius