четверг, 19 ноября 2015 г.

Настройка сервисов в Icinga 2 и добавление самописного плагина

Тут я устанавливал Icinga 2: http://blog.amet13.name/2015/11/icinga-2-postgresql-nginx.html
Тут я рассказал, как подключить удаленный хост к мониторингу: http://blog.amet13.name/2015/11/icinga-2.html
Тут я когда-то устанавливал самописный плагин для Nagios: http://blog.amet13.name/2014/06/nagios.html

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

Icinga 2 обратно совместима с Nagios, поэтому плагины под Nagios будут работать и в Icinga 2.
Условные обозначения хостнйемов: master - непосредственно нода мониторинга, satellite - удаленный хост, который мониторится.

Если плагины Nagios не установлены, то установим их:
satellite ~# yum install nagios-plugins-all

Список всех настроенных сервисов можно найти тут:
satellite ~# cat /usr/share/icinga2/include/command-plugins.conf | grep 'object CheckCommand' | cut -f3 -d' '

А сами плагины находятся тут:
satellite ~# ls /usr/lib64/nagios/plugins/

Учтите, что в конфиге могут быть прописаны команды, но плагина для этого сервиса в системе может и не быть.

Пример добавления нового плагина проверки DNS на удаленном хосте:
satellite ~# vim /etc/icinga2/conf.d/services.conf
...
apply Service "dns" {
   import "generic-service"
   check_command = "dns"
   vars.dns_lookup = "site.ru"
   vars.dns_server = "8.8.8.8"
   vars.dns_expected_answer = "1.2.3.4"
   assign where host.name == NodeName
}

Имена переменных (vars.{name}) можно посмотреть в конфиге /usr/share/icinga2/include/command-plugins.conf.

Можно вручную проверить команду:
satellite ~# /usr/lib64/nagios/plugins/check_dns -H site.ru -s 8.8.8.8
DNS OK: 0.049 seconds response time. site.ru returns 1.2.3.4|time=0.048978s;;;0.000000

Применяем изменения:
satellite ~# systemctl restart icinga2

На мастере клонируем изменения в репозиторий и перезапускаем сервис:
master ~# systemctl restart icinga2
master ~# icinga2 node update-config
...
Adding service 'dns'
    check_command = "dummy"
    host_name = "site.ru"
    import = [ "satellite-service" ]
    zone = "site.ru"

master ~# systemctl restart icinga2

Проверяем в вебморде, все ли в порядке.

Далее для примера подключу самописный плагин.
У меня почему-то некорректно работает плагин check_mailq, поэтому я написал свой, который будет проверять количество писем в очереди.
satellite ~# cd /usr/lib64/nagios/plugins/
satellite ~# vim check_eximq
#!/bin/bash

e_ok=0
e_warning=1
e_critical=2
e_unknown=3

usage="Invalid command line usage. Use for example ./check_eximq -w 5 -c 10"

if [ -z $1 ]; then
    echo $usage
    exit $e_unknown
fi

while getopts ":w:c:" options
do
    case $options in
        w ) warning=$OPTARG ;;
        c ) critical=$OPTARG ;;
        * ) echo $usage
            exit $e_unknown ;;
    esac
done

# determine queue size
qsize=$(exim -bpc)
if [ -z $qsize ]
then
    exit $e_unknown
fi

if [ $qsize -ge $critical ]; then
    retval=$e_critical
   echo "QUEUE CRITICAL - $qsize mails in queue"
elif [ $qsize -ge $warning ]; then
    retval=$e_warning
   echo "QUEUE WARNING - $qsize mails in queue"
elif [ $qsize -lt $warning ]; then
    retval=$e_ok
   echo "QUEUE OK - $qsize mails in queue"
fi

exit $retval

Делаем файл исполняемым:
satellite ~# chmod +x check_eximq

Проверяем его работоспособность:
satellite ~#  ./check_eximq -w 50 -c 400
QUEUE WARNING - 311 mails in queue

Добавляем новый сервис:
satellite ~# vim /usr/share/icinga2/include/command-plugins.conf
object CheckCommand "eximq" {
   import "plugin-check-command"
   command = [ PluginDir + "/check_eximq" ]
   arguments = {
      "-w" = "$eximq_warning$"
      "-c" = "$eximq_critical$"
   }
}

Применяем новый сервис:
satellite ~# vim /etc/icinga2/conf.d/services.conf
apply Service "eximq" {
   import "generic-service"
   check_command = "eximq"
   vars.eximq_warning = 400
   vars.eximq_critical = 1000
   assign where host.name == NodeName
}

Для того чтобы юзер icinga мог мог запустить exim, нужно добавить его в группу exim:
satellite ~# usermod -a -G exim icinga
satellite ~# cat /etc/group | grep icinga | grep exim
exim:x:93:clamscan,icinga
satellite ~# su icinga -s /bin/bash
bash-4.2$ exim -bpc
314

Иначе будет ошибка: Permission denied.

Проверяем на конфиги ошибки и ребутаем сервис:
satellite ~# icinga2 daemon -C
satellite ~# systemctl restart icinga2

На мастере тянем изменения в репозиторий:
master ~# systemctl restart icinga2
master ~# icinga2 node update-config
master ~# systemctl restart icinga2

Проверяем:

Комментариев нет: