Массовое добавление/удаление хостов в Zabbix при помощи API

На одном из проектов часто разворачивались/удалялись новые ноды в облаке, соответственно, появилась задача добавления/удаления новых хостов в 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 сервера. По умолчанию — 127.0.0.1/zabbix
  • username, password — логин и пароль пользователя, от имени которого будет идти запрос к API. Также, этот пользователь должен иметь права на доступ к API. По умолчанию — admin/zabbix.
  • По желанию — log level. Значение по умолчанию — 0.

Добавление хоста осуществляется таким образом: zabbix_host_add.py <useip 1 or 0. if 0 - DNS will be used> <groupid1,...,groupidN> <templateid,...,templateidN> <macro1...macroN>


Удаление - zabbix_host_del.py

Собственно, сами скрипты с кратким readme - github.com/gnetsman/zabbix_api
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 15

    0
    А зачем указывать идентификаторы шаблонов и групп? Для человека удобнее писать все-таки имена…
      0
      Видимо в API оно фигурирует в виде ID
        0
        Никто не мешает отрезолвить имя в ID
          0
          ИМХО, 5 цифр ID лучше, чем длинное название шаблона. Я думаю, проще посмотреть список доступных групп/шаблонов и указать их ID.
            0
            Во первых мнемоническое обозначение легче запомнить, во вторых если экономите на количестве символов то можно использовать названия шаблонов длинной менее 5 символов, в третьих при использовании кластерезации в заббиксе идентификаторы будут 16-значными.
              0
              Согласен, насчет кластеризации — весомый аргумент. Можно делать и так, с названиями. Кому как удобнее, опять-таки.
                0
                Стоит добавить, что ИД групп можно взять запросом к заббикс API, причём возможности поиска весьма обширны.
                При добавлении хоста, требуются ИД групп для использования индексов БД и схожести передоваемых структур с другими методами API, а так же во избижании ошибок.
                В целом API расчитан что ИД будут доставаться средствами самого же API и юзеру их знать не нужно.

                П.С. инфа на правах екс забикс разраба.
        0
        А чем discovery плох? Создал правила обнаружения, сделал необходимые действия по необходимым условиям и будет счастье, также автоматом можно хосты удалять.
        Условия олученное значение содержит "S2300" Состояние обнаружения = "Доступен" Тип сервиса = "SNMPv2 агент" IP адрес узла сети = "ххх.ххх.ххх.2-254"
        действия
        Выполнять удалённые команды на текущем узле сети Добавить узел сети Добавить в группы узлов сети: FTTB Добавить в группы узлов сети: FTTB Центр Присоединить к шаблонам: Template_Huawei-S2300
        «Выполнять удалённые команды на текущем узле сети» скрипт в который уходит ip добавленного узла и который переименовывает добавленный узел. Необходимо, так как добавленный узел был обнаружен по ip и имя его будет видно как ip что несколько неудобно, лучше его преобразовать в hostname. Все достаточно тривиально настраивается, заморочка только со скриптом.

        ЗЫ А я через zabbix api пытаюсь подружить Zabbix и NOC. Пока все это сделано на bash с использованием прямых запросов к БД zabbix и БД NOC. Очень хочется чтобы все обнаруженные узлы сразу АВТОМАТОМ попадали в систему управления NOC. Пока это сделано скриптом который сравнивает узлы в заббиксе и ноке и недостающие добавляет в нок.
          0
          У нас есть скрипты, которые запускают новую ноду и привязывают все необходимое в заббиксе. На мой взгляд, это более гибкая схема, чем при необходимости в discovery добавлять новые правила и т.д.
            0
            У каждого свой подход, я стремлюсь к полной автоматизации.
              0
              А скрипты и автоматизация — это разные вещи? :)
                0
                Вы запускаете скрипты, а я просто сижу пью чай и почитываю логи что куда добавилось)
                  0
                  Для запуска новой ноды все равно нужно запускать скрипт. Да и у вас FTTB, а у нас много разных серверов и сервисов, это накладывает свои отпечатки.
                    0
                    У нас не только fttb, еще и adsl, и IPTV и еще много всего (про некоторые вещи я уже писал на хабре). Но специфика разная это да, и подходы могут быть разные, тут спорить не о чём.
              0
              да и у меня уже Zabbix 2.0.1rc2

          Only users with full accounts can post comments. Log in, please.