Создание своих модулей проверки для Nagios на примере mysql и apache2

Nagios - клиент-серверная платформа мониторинга компьютерных систем и сетей с открытым кодом. Предназначена для наблюдения, контроля состояния вычислительных узлов и служб, оповещает администратора в том случае, если какие-то из служб прекращают (или возобновляют) свою работу.(c)Wikipedia

Подробную установку расписывать не буду - благо, существует множество интернет ресурсов, где это уже сделано.

Nagios - это невероятно гибкая система мониторинга. Для nagios существоет большое множество плагинов, которые поставляются в пакетах nagio-plugins, но бывает так, что плагины из коробки не подходят по той или иной причине. Либо они выдают много не нужноq информации, либо не выдают ничего (просто не работают в конкретной системе). Мне обычно жалко ставить целый пакет с десятком плагинов ради проверки однго значения системы.

Большим плюсом nagios является то, что nagios-checks, или проверочные скрипты, можно написать на чем угодно: bash, python, perl или powershell. По моему даже обычный bat файл можно использовать для проверки здоровья Windows систем. Как говорил один мой товарищ: С помощью Nagios можно мониторить кофе в чашке

Итак хочу рассмотреть создание своих проверочных скриптов на примере проверки статуса Mysql-Server и Apache.

Для начала создадим пользователя, с которым проверочный скрипт (checker) будет подключаться к mysql. Конечно же можно использовать учетную запись root, но от греха по-дальше рекомендую создать отдельного пользователя:

grant select on *.* to nagios@localhost identified by 'nagios4mysql';

Дальше в папке с плагинами (/usr/lib/nagios/plugins/) создаем файл custom_mysql_check со следующим содержанием:

#!/bin/bash
user="nagios";
password="nagios4mysql";
info=$(echo "SHOW STATUS;" |mysql -u$user -p$password |grep "Open_tables\|Uptime\|Threads_run" |grep -v "flush"|awk '{printf $1":"$2", "}');
if ($info); then
	echo "OK: Service is running. $info";
	exit 0
else
	echo "Service is down";
	exit 2
fi

Этот скрипт использует стандартную функцию mysql для получения нужной информации и отображает количество открытых таблиц, uptime и количество инстансов mysql. Можете более детально ознакомиться с выводом функции SHOW STATUS и включить дополнительную информацию. Изначальная цель этой проверки - удостовериться, что mysql server запущен и отвечает на запросы (exit 0). Если же mysql недоступен - скрипт вернет код выхода = 2, что станет сигналом для nagiosa о том, что у сервера проблемы.

Осталось дело за малым - описать этот custom check на сервере нагиоса. Это можно сделать по аналогии с уже существующими чеками. И не забыть прописать этот же чек в файле /etc/nagios/nrpe_local.cfg:

command[custom_mysql_check]=/usr/lib/nagios/plugins/custom_mysql_check

Пример bash скрипта для проверки apache http server:

#!/bin/bash
let "number = $(ps aux|grep apache2 |wc -l) -2 "
if [ -f /var/run/apache2.pid ]
then
	echo "OK: Service is up. Running $number child processes";
	exit 0
else
	echo "Service is down";
	exit 2
fi

Скрипт проверяет наличие пид-файла и считает количество запущенных дочерних процессов apache. В принципе как условие можно использовать значение переменной $number:

if [ $number -gt "0" ]

При создании этого чека нужно его тоже объявить в файле /etc/nagios/nrpe_local.cfg