Nagios — программа-монитор с открытым кодом, предназначенная для проверки компьютерных систем и сетей. Отслеживает указанные узлы и службы, и оповещает администратора в том случае, если какая-либо из система прекратила или возобновила работу или недоступна.

Nagios (произносится как «нагиос»), ранее известная под именем Netsaint, разработана Этаном Галстадом (Ethan Galstad). Он же поддерживает и развивает систему сегодня, совместно с командой разработчиков. А так же они занимаются как официальными, так и неофициальными плагинами.

Первоначально Nagios была разработана для работы под Linux, но она также хорошо работает и под другими ОС, такими как Sun Solaris, AIX и HP-UX. Nagios распространяется по лицензии GPL.

Обзор возможностей

  • Мониторинг сетевых служб SMTP, POP3, HTTP, NNTP, ICMP, SNMP

  • Мониторинг состояния хостов (загрузка процессора, использование диска, системные логи). В большинстве сетевых операционных систем, даже Microsoft Windows с модулем NRPE_NT

  • Поддержка удаленного мониторинга через шифрованные туннели SSH или SSL

  • Простая архитектура модулей расширений (плагинов) позволяет, используя любой язык программирования по выбору (Shell, C++, Perl, Python, PHP и другие), легко разрабатывать свои собственные способы проверки служб

  • Параллельная проверка служб

  • Возможность определять иерархии хостов сети с помощью «родительских» хостов, позволяет обнаруживать и различать хосты, которые вышли из строя, и те, которые недоступны

  • Отправка оповещений в случае возникновения проблем со службой или хостом (с помощью почты, пейджера, смс, или любым другим способом, определенным пользователем через модуль системы)

  • Возможность определять обработчики событий произошедших со службами или хостами для проактивного разрешения проблем

  • Автоматическая ротация лог-файлов

  • Возможность организации совместной работы нескольких систем мониторинга с целью повышения надёжности и создания распределенной системы мониторинга

  • Включает в себя утилиту nagiostats, которая выводит общую сводку по всем хостам, по которым ведется мониторинг.

(Ссылка на источник)

Установка

  • Установка на примере CentOS Отрубаем selinux, если не знаем как его настроить:

echo 0 >/selinux/enforce

sed -i ‘s/SELINUX=enforcing/SELINUX=disable/’ /etc/selinux/config

Обновляем список пакетов и ставим необходимое:

yum update

yum install httpd php php-cli gcc glibc glibc-common gd gd-devel net-snmp unzip perl-Time-HiRes

Создаём пользователя, задаём ему пароль и добавляем в нужные группы:

1
2
3
4
5
 useradd nagios
 passwd nagios
 groupadd nagcmd
 usermod -a -G nagcmd nagios
 usermod -a -G nagcmd apache

Идём во временный каталог, скачиваем туда нужный пакет и разархивируем

1
2
3
 cd /tmp/
 wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-4.0.8.tar.gz
 tar xzf nagios-4.0.8.tar.gz

Заходим в папку и собираем Nagios

1
2
3
4
5
6
7
 cd nagios-4.0.8
 ./configure --with-command-group=nagcmd
 make all
 make install
 make install-init
 make install-config
 make install-commandmode

Создаём конфиг для Apache

make install-webconf

Задаём пароль на вход:

htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

Перезапускаем Apache

service httpd restart

Скачиваем плагины:

1
2
3
4
cd /tmp
wget http://nagios-plugins.org/download/nagios-plugins-2.0.3.tar.gz
tar xzf nagios-plugins-2.0.3.tar.gz
cd nagios-plugins-2.0.3

Устанавливаем их

1
2
3
 ./configure --with-nagios-user=nagios --with-nagios-group=nagios
 make
 make install

Проверяем конфигурацию:

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Если всё ок - перезапускаем

1
2
3
 service nagios start
 chkconfig --add nagios
 chkconfig nagios on

Проверяем:

http://yourserver/nagios/

Установка nrpe на другой машинке

Для начала ставим агент на машинке, КОТОРУЮ БУДЕМ мониторить.

yum –enablerepo=epel -y install nrpe nagios-plugins

Редактируем конфигурацию:

vi /etc/nagios/nrpe.cfg

1
2
allowed_hosts=127.0.0.1,192.168.0.1 #добавляем сервер с nagios, которому можно мониторить
#на строке 200 подредактируйте что хотите мониторить. Например, разделы дисков

Запускаем сервис

/etc/init.d/nrpe start

Starting nrpe: [ OK ]

В автозагрузку его:

chkconfig nrpe on

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

yum –enablerepo=epel -y install nagios-plugins-nrpe

Учитывая, что у нас место не совсем стандартное установки nagios, просто скопируем плагин

cp /usr/lib/nagios/plugins/check_nrpe /usr/local/nagios/libexec/

Теперь редактируем…

vi /usr/local/nagios/etc/objects/commands.cfg

1
2
3
4
5
 # добавляем это в конце
  define command{
     command_name            check_nrpe
     command_line            $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
 }

Проверим заранее, всё ли ок. REMOTE_SERVER заменим на тот, который будем мониторить и после -с указываем то, что прописывали в 200 строке. Например:

/usr/local/nagios/libexec/check_nrpe -H REMOTE_SERVER -c check_hda1

Если по всем пунктам ок, добавляем в конец файла конфигурации удалённого сервера нужные строчки, не забывая менять remote_server на свой удалённый сервер:

nano nano /usr/local/nagios/etc/servers/remoteserver.cfg

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 define service{
     use                     generic-service
     host_name               remote_server
     service_description     Current Users
     check_command           check_nrpe!check_users
 }
 define service{
     use                     generic-service
     host_name               remote_server
     service_description     Current Load
     check_command           check_nrpe!check_load
 }
 define service{
     use                     generic-service
     host_name               remote_server
     service_description     Root Partition
     check_command           check_nrpe!check_lv_root
 }
 define service{
     use                     generic-service
     host_name               remote_server
     service_description     Zombie Processes
     check_command           check_nrpe!check_zombie_procs
 }
 define service{
     use                     generic-service
     host_name               remote_server
     service_description     Total Processes
     check_command           check_nrpe!check_total_procs
 } 

Перегружаем nagios и смотрим что получилось

/etc/init.d/nagios restart

Примеры

Мониторим потребление памяти Redis

Создаём файл /opt/check_redis_mem.pl следующего содержания

1
2
3
4
5
6
7
8
9
10
 #!/usr/bin/perl
 my $num_red_mem=`redis-cli info | grep "used_memory:"`;
 my @rmemory = split('used_memory:', $num_red_mem);
 
 if(@rmemory > 510029952 ){
         print "WARNINIG, memory hi! @rmemory";
         exit 2;
     }else{
         print "OK, @rmemory";
     }

Замените 510029952 своим максимальным значением.

Добавляем в nrpe.cfg

command[check_redis_mem]=/opt/check_redis_mem.pl

На сервере с nagios добавляем в конфиг хоста /usr/local/nagios/etc/servers/luna.cfg следующие строки

1
2
3
4
5
6
  define service{
     use                     generic-service
     host_name               remote_server
     service_description     Redis Memory
     check_command           check_nrpe!check_redis_mem
 }

Рестартуем nagios и видим:

Redis Memory OK 11-24-2014 09:24:41 0d 0h 33m 19s 1/3 OK, 499501440

Проблемы и их решения

  • Sorry, but Nagios is currently not checking for external commands

Вам запрещено выполнять внешние команды с помощью браузера. Зайдите в nagios.cfg и исправьте 0 на 1 в сл. строке:

check_external_commands=0

  • Error: Could not stat() command file ‘/var/lib/nagios3/rw/nagios.cmd’!

У веб-сервера Apache нет прав на указанный файл или его просто не существует. Создайте его!

touch /var/lib/nagios3/rw/nagios.cmd

chmod a+rw /var/lib/nagios3/rw/nagios.cmd

Так же апач может не войти в /var/lib/nagios3/rw - исправьте это!

chmod a+rxw /var/lib/nagios3/rw