Развёртывание и настройка Icinga 2 на Debian 8.6. Часть 8. Создание собственной Команды с набором аргументов в Icinga Director 1.3 (на примере плагина check_cpu.sh)

imageВ этой части мы рассмотрим практический пример создания собственной Команды (Icinga Command) с набором аргументов в Icinga Director 1.3. В качестве подключаемого к Icinga плагина будем использовать плагин check_cpu.sh для мониторинга нагрузки на процессор с возможностью настройки допустимых границ нагрузки.

Подключение плагина на сервере Icinga

Напомню, что множество плагинов, расширяющих возможности мониторинга в Icinga для различных сценариев можно найти на сайтах Icinga Exchange и Nagios Exchange.

Загружаем скрипт плагина и делаем его исполняемым:

# wget https://exchange.icinga.com/exchange/check_cpu.sh/files/551/check_cpu.sh --directory-prefix="/usr/lib/nagios/plugins/"
# chmod +x /usr/lib/nagios/plugins/check_cpu.sh

Скрипт в своей работе использует утилиту /usr/bin/iostat, которую можно добавить в систему путём установки пакета sysstat:

# apt-get install sysstat

Проверяем работу плагина, запустив его без параметров в контексте пользователя, от имени которого работает Icinga (по умолчанию это пользователь с именем nagios):

# su -s "/bin/sh" -c "/usr/lib/nagios/plugins/check_cpu.sh" nagios

CPU OK : user=1% system=0% iowait=0% idle=99% | cpu_user=1%;70;90; cpu_sys=0%;70;90; cpu_iowait=0%;70;90; cpu_idle=99%;

Как видим, плагин успешно отрабатывает, возвращая текущее значение загрузки процессора в специальном формате, который будет принимать Icinga.

Для того, чтобы в дальнейшем в Icinga Director мы могли оперировать параметрами, передаваемыми плагину, давайте для начала выясним, какие вообще аргументы способен принимать плагин. Для этого можно, например, заглянуть во встроенную в плагин справку по аргументам:

# /usr/lib/nagios/plugins/check_cpu.sh --help

check_cpu.sh Revision 1.0 - CPU Utilization check script for Nagios

Usage: check_cpu.sh [flags]

Flags:
  -w   : Global Warning level in % for user/system/io-wait cpu
  -uw  : Warning level in % for user cpu
  -iw  : Warning level in % for IO_wait cpu
  -sw  : Warning level in % for system cpu
  -c   : Global Critical level in % for user/system/io-wait cpu
  -uc  : Critical level in % for user cpu
  -ic  : Critical level in % for IO_wait cpu
  -sc  : Critical level in % for system cpu
  -i   : Interval in seconds for iostat (default : 1)
  -n   : Number report for iostat (default : 3)
  -h  Show this page

Usage: check_cpu.sh
Usage: check_cpu.sh --help

This plugin will check cpu utilization (user,system,iowait,idle in %)

Как минимум, нам могут пригодится аргументы -w и -c для возможности переопределения значений допустимой нагрузки на процессор для отдельных Хостов в Icinga.

 

Настройка плагина в Icinga Director

Для настройки установленного плагина в Icinga Director выполним следующую последовательность действий:

1. Создадим Поля (Data Fields), которые в дальнейшем можно будет использовать для переопределения значения переменных, передаваемых в плагин мониторинга в качестве параметров запуска.

2. Создадим Команду (Icinga Command) с уникальным именем и собственным набором Аргументов (Arguments) и соответствующим им значениям (Value) в виде переменных с уникальными именами. Имена переменных должны совпадать с именами Полей созданными в п.1. Привяжем к Команде созданные в п.1 Поля.

3. Создадим на основе Команды из п.2 новый Шаблон Службы. Привяжем к Шаблону Службы созданные в п.1 Поля.

4. Установим плагин check_cpu.sh на все Linux-системы с Icinga-клиентом

5. Привяжем Шаблон Службы, созданный в п.3, к Шаблону Хостов, которым настраиваются наши Linux-системы с Icinga-клиентом.

6. Проверим результат.

Рассмотрим все пункты по порядку.

 

Создадим Поля (Data Fields)

Для создания дополнительных Полей на главной веб-странице управления Icinga Director перейдём в блок Define data fields

В списке Полей у нас уже имеется несколько Полей, который мы сделали в прошлый раз. Воспользуемся ссылкой Add, чтобы добавить новое Поле, которое будет использоваться для возможности передачи (переопределения значения по умолчанию) в плагин мониторинга процессора порогового значения, после которого будет состояние объекта мониторинга будет меняться с OK на WARNING. Присвоим Полю говорящее за себя имя (Field Name), описательное имя (Caption) и пояснительное описание (Description), а также зададим тип значения (Data type), которое может хранится в данном Поле (в нашем случае это числовые значения - Number)

Аналогичным образом создадим ещё одно Поле для возможности переопределения критической границы нагрузки процессора.

 

Создадим Команду (Icinga Command)

В меню навигации перейдём в Icinga Director > Commands. Здесь нам нужно будет создать новую Команду Icinga, которая будет отвечать за вызов нашего плагина мониторинга процессора. Для начала нам нужно определиться с именем создаваемой Команды. Имя должно быть уникальным и не должно совпадать в уже имеющимися в Icinga Director именами. Это важно, ибо, как я понял, Icinga Director на данный момент не контролирует уникальность имён Команд, и несоблюдение условия уникальности может привести к непредсказуемым результатам. Например, мы хотим создать Команду с именем аналогичным имени плагина – check_cpu. Воспользуемся функцией поиска и убедимся в том, что такое имя Команды не используется.

Для создания команды воспользуемся ссылкой Add. В открывшейся справа форме в поле Command type из выпадающего списка выберем значение Plugin Check Command. В поле Command name, как условились, введём проверенное уникальное имя check_cpu. В поле Command введём имя файла плагина, который будет запускаться данной Командой – check_cpu.sh (файл, который мы ранее поместили в каталог $PluginDir$ - /usr/lib/nagios/plugins/)

После того, как Команда создана, появится несколько дополнительных закладок. Перейдём на закладку Fields и с помощью кнопки Add добавим Команде пару Полей, которые мы создали ранее.

Затем перейдём на вкладку Arguments и добавим пару аргументов, которые может принимать наша Команда. В качестве имени аргумента (Argument name) используем конкретный ключ/флаг, который умеет принимать конечный плагин, например ранее упомянутый ключ -w. Тип значения (Value type), который может использоваться в данном аргументе, выберем из выпадающего списка. В качестве значения аргумента (Value) укажем имя, совпадающее с ранее соответствующим созданным нами Полем в виде переменной, например $cpu_warning$.

После того, как нужные аргументы в Команде описаны, переключимся на закладку Preview и посмотрим, в каком виде заданная нами информация о Команде попадёт в конфигурацию Icinga

Переключимся на закладку Command и щёлкнем по ссылке Deploy, чтобы обновить конфигурацию Icinga.

Команда создана и теперь на её основе можно создать Шаблон Службы Icinga. 

 

Создадим Шаблон Службы

В меню навигации перейдём в Icinga Director > Services и воспользуемся ссылкой Add, чтобы создать новый Шаблон Службы. В открывшейся справа форме укажем уникальное имя Службы, а в поле Check command из выпадающего списка выберем ранее созданную нами Команду check_cpu. Так как данная Служба должна выполняться на стороне Icinga-клиента, в поле Run on agent выберем Yes.

После того, как Шаблон Службы создан, переходим в его свойствах на закладку Fields и добавляем поддержку Полей для возможности переопределения используемых по умолчанию в плагине пороговых значений. При этом, параметр Mandatory определяем как Optional, так как присоединяемые к Службе Поля в нашем случае не являются обязательными для заполнения/изменения.

После того, как правка параметров Шаблона Службы закончена, перейдём на закладку Service и нажмём ссылку Deploy, чтобы применить сделанные изменения к конфигурации Icinga. 

Теперь созданный Шаблон Службы можно применять к Хостам, наложив его, например на какой-нибудь из Шаблонов Хостов. Однако прежде, чем это сделать, нужно обеспечить наличие плагина на Linux-системах c Icinga-клиентом, которые настраиваются соответствующим Шаблоном Хостов.

 

Установим плагин check_cpu.sh на Linux-системы с Icinga-клиентом

Установка плагина на Linux-системы с Icinga-клиентом аналогична тому, что мы делали на сервере Icinga. Например, для Debian 8.7 (Jessie) установка будет выглядеть так:

# wget https://exchange.icinga.com/exchange/check_cpu.sh/files/551/check_cpu.sh --directory-prefix="/usr/lib/nagios/plugins/"
# chmod +x /usr/lib/nagios/plugins/check_cpu.sh
# apt-get install sysstat

На CentOS 7.3 установка будет похожей:

# wget https://exchange.icinga.com/exchange/check_cpu.sh/files/551/check_cpu.sh --directory-prefix="/usr/lib64/nagios/plugins/"
# chmod +x /usr/lib64/nagios/plugins/check_cpu.sh
# yum install sysstat

Клиенты подготовлены и теперь осталось только подключить ранее настроенный Шаблон Службы к Шаблону Хостов.

 

Настроим Шаблон Хостов

Привяжем ранее созданную нами Службу cpu к Шаблону Хостов, который настраивает мониторинг конечных Icinga-клиентов. В меню навигации перейдём в Icinga Director > Hosts, переключимся на закладку управления Шаблонами Хостов (Templates) и выберем интересующий нас Шаблон.  Справа откроется форма свойств Шаблона, где перейдём на закладку управления подключенными Шаблонами Служб (Services). Ссылкой Add service из выпадающего списка добавим ранее созданный Шаблон Службы

Кстати здесь нам будут доступны подключённые ранее Поля, с помощью которых для группы Хостов можно управлять пороговыми значениями загрузки процессора. После того, как кнопкой Add Шаблон Службы добавлен, нажмём кнопку развёртывания новой конфигурации Icinga – Deploy

Новая конфигурация Icinga должна примениться без ошибок.

На этом основную настройку в Icinga Director в рамках нашей задачи можно считать законченной.

 

Проверяем результат

Перейдём в веб-консоли Icinga Web 2 на вкладку просмотра состояния Служб мониторинга для Хостов Overview > Hosts, выберем Хост, к которому применён настроенный ранее Шаблон Хостов и заглянем в статус Службы cpu

Как видим, результат достигнут.

А благодаря созданным и подключенным Полям для настройки переменных работы плагина мониторинга загрузки процессора, у нас теперь имеется дополнительная возможность переопределить пороговые значения мониторинга для любого Хоста.

Аналогичным образом можно подключать к Icinga Director 1.3 любые другие Nagios-совместимые плагины, имеющие собственные наборы аргументов, расширяя тем самым функциональность системы мониторинга Icinga.

Всего комментариев: 10 Комментировать

  1. Обратная ссылка: Развёртывание и настройка Icinga 2 на Debian 8.6. Часть 9. Настройка e-mail оповещений в Icinga Director 1.3 | Блог IT-KB /

  2. Обратная ссылка: Развёртывание и настройка Icinga 2 на Debian 8.6. Часть 11. Настройка интеграции Graphite в Icinga Web 2 | Блог IT-KB /

  3. Обратная ссылка: Развёртывание и настройка Icinga 2 на Debian 8.6. Часть 14. Настройка SMS оповещений в Icinga Director 1.3 – Блог IT-KB /

  4. pragmatic56 /

    Добрый день!
    Не пойму как заставить корректно отрабатывать sudo в icinga director:
    локально
    su -s "/bin/bash" -c "sudo /usr/lib/nagios/plugins/check_iptables_status.sh -T filter -r 2" nagios
    отрабатывает,
    в sudoers:
    Cmnd_Alias PROCESSES = /usr/lib/nagios/plugins/, /etc/init.d/, /usr/sbin/, /usr/sbin/asterisk, /sbin/iptables
    nagios ALL=(root) NOPASSWD: PROCESSES
    В director:
    active: true,
    check_source: "test",
    command: [
    "/usr/bin/sudo",
    "/usr/lib/nagios/check_asterisk_peers",
    "101"
    ],

    Но вываливает ошибку:
    Plugin Output
    sudo: нет tty и не указана программа askpass

    Как обойти проблему?

    1. Алексей Максимов / Автор записи

      Посмотрите здесь

  5. pragmatic56 /

    Спасибо за статьи! Свою заморочку обошел через suid.

  6. Вячеслав /

    Алексей, у меня в "Define data fields" вместо 3-х пунктов всего один "http_expect", а "http_port" и "http_ssl" нет.
    Вы указываете ссылку на прошлую часть, но в ней такого тоже нет об "http_port" и "http_ssl".
    Что я упустил? Где об этом можно прочесть? :-)

    1. Алексей Максимов / Автор записи

      К контексту этой заметки данные поля не имеют никакого отношения.

      1. Вячеслав /

        Но все же, Вы описывали где-нибудь о добавлении "http_port" и "http_ssl"?
        Если да, то можно ссылку?

        1. Алексей Максимов / Автор записи

          Там же есть ссылка на предыдущую статью, где описывался пример добавления поля $http_expect$. Любые другие нужные делаются по аналогии.

Добавить комментарий