Развёртывание и настройка Icinga 2 на Debian 8.6. Часть 7. Переопределение аргументов выполнения Команд в Icinga Director 1.3 (на примере стандартного плагина check_http)

Прошлую заметку про основные приёмы использования Icinga Director мы закончили на том, что после создания Служб из базового набора Команд Icinga, автоматически импортированных в Icinga Director, можно столкнуться с ситуацией, когда стандартные настройки Команд приводят к не совсем ожидаемому результату. Например, используемые по умолчанию аргументы Команды http приводят к переводу созданной нами Службы http в состояние WARNINIG для некоторых клиентов Icinga, хотя на самом деле веб-сервер на этих системах работает штатно. Попробуем разобраться с тем, почему так происходит, и как в Icinga Director 1.3 можно решить этот вопрос.

Итак, в данном конкретном примере на Icinga-клиенте KOM-AD01-APP30 у Службы 'http' мы видим предупреждение, меняющее статус этой Службы – 'HTTP WARNING: HTTP/1.1 401 Unauthorized':

Это значит то, что Команда 'http', на основании которой нами ранее была создана одноимённая Служба 'http', получает именно такой ответ от проверяемого веб-сервера, и на основании имеющихся у неё по умолчанию параметров запуска интерпретирует такой ответ веб-сервера, как отклонение от нормы. Однако на самом деле, веб-сервер работоспособен, отвечает на запросы клиентов и просто требует процедуры аутентификации при подключении. Получается, что в данном случае нам требуется изменить конфигурацию Icinga таким образом, чтобы подобный ответ данного веб-сервера не считался отклонением от нормы и не изменял статус Службы 'http'.

Давайте заглянем на веб-страницу отображения статуса службы 'http' в меню Overview > Services. Здесь в поле Actions щёлкнем по ссылке Inspect

Рядом откроется вкладка Object Inspection с подробнейшей информацией о контексте выполнения команды проверки и её результате. Здесь, в частности, мы можем увидеть то, с каким набором параметров и их значений выполнялась конечная утилита проверки, и какой при этом был получен результат: 

Теперь давайте попытаемся понять, а какие вообще параметры допустимы в рамках Команды 'http' в Icinga Director. Для этого в меню навигации Icinga Director > Commands найдём интересующую нас команду и изучим информацию, представленную на закладке Preview

Как видим, Команда 'http' использует в своей работе вызов утилиты check_http из каталога PluginDir (по умолчанию эта переменная ссылается на каталог /usr/lib/nagios/plugins/), для которой в конфигурации Icinga описан целый ряд допустимых аргументов. Фигурирующие здесь аргументы (arguments) описывают основные параметры, которые могут быть переданы утилите check_http при запуске. При этом в качестве значений каждый параметр принимает некоторую переменную. Например, параметр -e, определяющий ожидаемый код возврата HTTP, может быть задан с помощью переменной $http_expect$

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

# /usr/lib/nagios/plugins/check_http --help

А также можно "поиграться" с параметрами этой утилиты, имитируя выполняемые Командой Icinga действия и анализируя получаемый результат. Например, давайте на нашем подопытном веб-сервере KOM-AD01-APP30 с установленным клиентом Icinga попытаемся воспроизвести проблему получения неправильного, с нашей точки зрения, статуса Службы 'http':

# /usr/lib/nagios/plugins/check_http -I 10.1.0.43 -u "/"

HTTP WARNING: HTTP/1.1 401 Unauthorized - 734 bytes in 0.001 second response time |time=0.000768s;;;0.000000 size=734B;;;0

Встроенная справка по аргументам утилиты check_http даёт нам информацию о том, что с помощью ранее упомянутого ключа -e (--expect) мы можем задать собственный набор возвращаемых кодов HTTP, который будет свидетельствовать о штатной работе веб-сервиса. Например, давайте попробуем штатным поведением веб-сервера считать ответы 200 и 401. Протестируем команду:

# /usr/lib/nagios/plugins/check_http -I 10.1.0.43 --expect="200 OK","401 Unauthorized" -u "/"

HTTP OK: Status line output matched "200 OK,401 Unauthorized" - 734 bytes in 0.001 second response time |time=0.000767s;;;0.000000 size=734B;;;0

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

Теперь давайте посмотрим, как переопределить для утилиты check_http значение аргумента -e (--expect) в веб-интерфейсе Icinga Director.

Снова перейдём в меню Icinga Director > Commands и найдём интересующую нас Команду 'http'. Выбрав Команду, с правой стороны перейдём на закладку Fields. Здесь мы сможем задать дополнительные Поля, через которые можно будет передавать значения аргументов Команды посредствам ранее упомянутых переменных (список переменных подтягивается из конфигурации Команды, которая была импортирована в Icinga Director). Чтобы добавить новое Поле, нажмём кнопку Add и в значение поля Field из выпадающего списка переменных Команды выберем интересующую нас переменную $http_expect$

В значение Caption введём имя Поля, под которым оно будет фигурировать в конфигурации Icinga Director. В значение Description при желании введём описание назначения данного Поля (переменной). В своём примере в качестве описания я ввёл текст выводимый при check_http --help для соответствующего аргумента -e. В Mandatory определяем обязательность заполнения значения данного Поля. В нашем случае заполнение опциональное, так как не для всех клиентов Icinga мы планируем обязательное заполнение данной перемеренной – Optional.

После нажатия кнопки Add добавляемое нами Поле будет добавлено в список Полей Команды

Хотя на самом деле, объект созданного Поля 'http_expect', как таковой, будет создан на глобальном уровне конфигурации Icinga Director, а в свойствах нашей Команды 'http' будет создана лишь ссылка на этот объект. Найти все Поля, которые мы создаём на уровне всей конфигурации Icinga Director, можно на главной веб-странице управления Icinga Director в блоке Define data fields

Здесь мы сможем увидеть только что созданное нами Поле 'http_expect' и при необходимости изменить его описание или имя. Здесь же видно, сколько раз задействовано данное Поле. В нашем случае в #Used отображается '1', так как фактически привязка к Полю есть только свойствах Команды 'http'. В поле #Vars отображается количество фактически хранимых переменных во всех привязках к Полю. Эта информация может быть полезна на тот случай, если вы задумали изменение конфигурации Поля или вообще его удаление, – чтобы оценить возможный масштаб фактически имеющихся зависимостей от этого Поля.

И так, как объект Поля носит глобальный характер, с точки зрения Icinga Director, в дальнейшем мы можем его привязывать к другим объектам и использовать там, где нам это удобно. Например, можно привязать это Поле к Шаблону Службы или Шаблону Хостов.

Произведём привязку Поля 'http_expect' к ранее созданному Шаблону Службы 'http'. Для этого в меню навигации перейдём в Icinga Director > Services, выберем в списке Шаблонов Служб службу 'http'. В правой части откроется форма свойств Шаблона, в которой перейдем на закладку Fields. В значении поля Field выберем из выпадающего списка созданное нами ранее Поле 'http_expect' и нажмём кнопку Add.

Таким образом будет выполнена привязка Поля к Шаблону Службы, и теперь везде там, где фигурирует данная Служба, у нас появится возможность оперировать переменной $http_expect$. Например, теперь мы можем задать значение этой переменной для любого конкретного Хоста (Icinga-клиента), в частности, например, для нашего веб-сервера KOM-AD01-APP30.

Перейдём в меню навигации в Icinga Director > Hosts и выберем интересующий нас Хост. В правой части в свойствах выбранного Хоста перейдём на закладку Services и увидим перечень Служб, привязанных к данному Хосту. В нашем примере видно, что Службы для Хоста наследуются из трёх разных созданных ранее Шаблонов Хостов. Сейчас нас интересует самый последний пункт – ссылка на Службу 'http'.

Перейдя по этой ссылке, мы попадём на форму переопределения значений Полей, имеющих привязку к данной Службе. В нашем случае в этом списке всего одно Поле – 'http_expect'. Зададим значение переменной так, как оно нам требуется для Службы 'http' данного Хоста. Обратите внимание на то, что здесь отображается заданное нами ранее описание значения Поля, а в самом значении мы не используем кавычки для перечисления.

После того, как значение переменной задано, жмём кнопку Override vars, а затем выполняем применение конфигурации Icinga Director кнопкой Deploy.

После успешного применения конфигурации проверяем результат.

Как видим, статус Службы 'http' изменился на OK, а в выводе плагина присутствует информация о том, что произошло совпадение с заданной нами в переменной $http_expect$ строкой, и поэтому состояние Службы признано штатным. А ниже, на этой же странице отображается наша переменная, которая участвует в работе утилиты проверки.

Так же мы снова можем пройти по ссылке Inspect и убедиться в том, что заданная нами переменная в конечном итоге дошла до утилиты проверки в нужном виде, автоматически заключённая в кавычки:

 

Итак, желаемый результат достигнут.

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

Ещё раз хочу отдельно обратить ваше внимание на то, что описанный здесь механизм настройки переопределений работает в текущей версии Icinga Director 1.3, в то время, как ещё недавно, в предыдущей версии 1.2, он работал некорректно, что стоило мне в своё время долгих часов мучительного "хождения по граблям". Поэтому если вы всё ещё "залипаете" на старой версии Icinga Director, настоятельно рекомендую провести обновление.  

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

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

  2. Вячеслав /

    Подскажите, пожалуйста, как правильно переопределить команду swap, если на одном из хостов нет swap, но команда swap входит в состав шаблона хостов, который используется всеми остальными хостами?

    SWAP CRITICAL - 0% free (0 MB out of 0 MB) - Swap is either disabled, not present, or of zero size.

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

      В меню Icinga Director выбираете пункт Hosts и выбираете интересующий Вас хост.
      Справа откроется несколько вкладок управления выбранным хостом - Host, Services, Preview и т.п..
      Переключаетесь на вкладку Services и здесь увидите список служб, которые накладываются на хост какими-либо правилами Apply-Rules (Applied services)
      Выбираете службу, которую желаете отключить для данного хоста, например "swap".
      Провалившись в форму настройки наследованной службы, увидите две кнопки "Override vars" и "Blacklist".
      Используете кнопку "Blacklist", чтобы отключить выбранную службу для этого конкретного хоста.
      Деплоите измененную конфигурацию и проверяете результат.

      Это на примере Icinga Director версии 1.5.1, которая есть у меня под руками.
      Если у Вас более новая версия, то, возможно, элементы навигации будут несколько иными.

      1. Вячеслав /

        Большое спасибо!

        Правда во вкладке "Activity log" не появилось изменение, но после нажатия "There are no pending changes. Deploy anyways" изменения вступили в силу и проблема исчезла.

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