воскресенье, 22 июня 2014 г.

Подключение самописного плагина в Nagios

После установки Nagios, мониторить сервера стало куда проще. Однако остались вещи, которые из коробки в Nagios нет, например просмотр очереди писем в Postfix. Плагин check_mailq рабоатет неправильно. В интернете есть несколько уже написанных плагинов для этого дела, поэтому я не стал придумывать своё и лишь немного доработал чужой скрипт (исправил 3-4 строчки, для наглядности вывода выполнения команды).

Скрипт взят отсюда: exchange.nagios.org/directory/Plugins/Email-and-Groupware/Postfix/check_postfix_queue/details

Обозначать машины буду так:
server - то, что мы будем мониторить. в данном случае почтовый сервер;
monitor - сервер, на котором установлен Nagios, в данном случае сервер мониторинга.

На стороне почтового сервера.

Создаём наш плагин:
server ~ # cd /usr/lib/nagios/plugins/
server ~ # vim check_postqueue
#!/bin/bash
# Check postqueue nagios
# 19-07-2010
# Author: Cherwin Nooitmeer <[email protected]>
# Немного переделал: 22.06.2014

# exit codes
e_ok=0
e_warning=1
e_critical=2
e_unknown=3

# regular expression that matches queue IDs (e.g. D71EF7AC80F8)
queue_id='^[A-F0-9][A-F0-9][A-F0-9][A-F0-9][A-F0-9][A-F0-9][A-F0-9][A-F0-9][A-F0-9][A-F0-9]'

usage="Invalid command line usage"

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=$(mailq | egrep -c $queue_id)
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

Делаем скрипт исполняемым и тестируем, здесь 200 - число писем в очереди, при которых будет выдано сообщение WARNING, 1000 - CRITICAL:
server ~ # chmod +x check_postqueue
server ~ # /usr/lib/nagios/plugins/check_postqueue -w 200 -c 1000
QUEUE OK - 69 mails in queue

Теперь нужно проинициализировать скрипт в настройках NRPE:
server ~ # vim /etc/nagios/nrpe.cfg
command[check_postqueue]=/usr/lib/nagios/plugins/check_postqueue -w 200 -c 1000

server ~ # service nagios-nrpe-server restart

Переходим на сервер мониторинга.

Тестируем соединение с удалённым сервером:
monitor ~ # /usr/local/nagios/libexec/check_nrpe -H ip_addr -c check_postqueue
QUEUE OK - 69 mails in queue

Создаём соответствующую команду в конфиге (путь к конфигу может отличаться, см. как я устанавливал и настраивал Nagios):
monitor ~ # vim /etc/nagios4/objects/commands.cfg 
define command{
   command_name check_nrpe
   command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

В конфиге удалённого сервера записываем новый сервис:
monitor ~ # vim /etc/nagios4/conf.d/hosts/server.cfg
# Check Postqueue
define service {
   use                  generic-service
   host_name            main-server
   service_description  Postqueue
   check_command        check_nrpe!check_postqueue
}

monitor ~ # service nagios restart



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