Установка Nagios на Centos 6.4

Nagios – программа мониторинга компьютерных систем и сетей с открытым кодом. Предназначена для наблюдения, контроля состояния вычислительных узлов и служб, оповещает администратора в том случае, если какие-то из служб прекращают (или возобновляют) свою работу. Первоначально Nagios была разработана для работы под Linux, но она также хорошо работает и под другими ОС, такими как Sun Solaris, FreeBSD, AIX и HP-UX – Wikipedia. Если кратко и своими словами, Nagios это система мониторинга серверов (в основном Linux, но так-же и Windows). Nagios умеет мониторить такие вещи как место на жестком диске, загрзку CPU, загрузку RAM, состояние сервера (dead/alive) через ICMP протокол. Может следить за запущенным процессом и о любых неполадка оповещать через Web-интерфейс, электропочту, СМС, звонки и даже Твиттер.

Зачем нужен Nagios?

Предположим у вас есть инфраструктура состоящая из 10-ти серверов, 1-го шлюза, 1-го файлового сервера и все это продакшн. Вам 24\7 необходимо знать что происходит с этими системами. Не закончилось ли место на файловом сервере, не упал ли один из серваков, не отвалился ли Apache. И преположим вы хотите узнавать о проблеме сразу после ее появления в любое время дня и ночи (что врядли). Вам поможет Nagios.
Monitoring

Как установить Nagios?

Для примера я использую сервера Centos 6.5 Final 64bit заведенный на сервере HP Proliant. Для успешной установки вам понадобятся репозитории Rami & Epel.

Поищите Nagios в репозиториях, там будет много интересного:
yum search nagios
yum –enablerepo=epel -y install nagios nagios-plugins-all nagios-plugins-nrpe nrpe php httpd

В принципе это все =) Установка из репозиториев на этом закончена. Получить более свежую версию Nagios можно на официальном сайте. В моем случае я так и сделал. Все необходимое есть на странице www.nagios.org/download Если вы надумали компилировать Nagios из исходных кодов сам процесс будет несколько сложнее. Вам так же будут необходимы плагины. На данный момент последняя стабильная версия 4.0.2 Latest stable release.

cd ~ 
mkdir nagios && cd nagios/
wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-4.0.2.tar.gz
wget http://assets.nagios.com/downloads/nagiosplugins/nagios-plugins-1.5.tar.gz
ls -ll
-rw-r--r-- 1 root root 1696847 Nov 25 16:20 nagios-4.0.2.tar.gz
-rw-r--r-- 1 root root 2428258 Jan 15 20:54 nagios-plugins-1.5.tar.gz
cd ~ 
mkdir nagios && cd nagios/
wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-4.0.2.tar.gz
wget http://assets.nagios.com/downloads/nagiosplugins/nagios-plugins-1.5.tar.gz
ls -ll
-rw-r--r-- 1 root root 1696847 Nov 25 16:20 nagios-4.0.2.tar.gz
-rw-r--r-- 1 root root 2428258 Jan 15 20:54 nagios-plugins-1.5.tar.gz

Полезным будет влепить Development Tools:

yum groupinstall 'Development tools' -y
yum install gd gd-devel httpd php gcc glibc glibc-common
yum groupinstall 'Development tools' -y
yum install gd gd-devel httpd php gcc glibc glibc-common

Распаковываем архив с nagios и с плагинами:

tar xvf nagios-4.0.2.tar.gz
tar xvf nagios-plugins-1.5.tar.gz
ls -lS
-rw-r--r--  1 root root 2428258 Jan 15 20:54 nagios-plugins-1.5.tar.gz
-rw-r--r--  1 root root 1696847 Nov 25 16:20 nagios-4.0.2.tar.gz
drwxrwxr-x 18 root root    4096 Nov 25 16:16 nagios-4.0.2
drwxr-xr-x 15  200  300    4096 Oct  2 18:27 nagios-plugins-1.5
tar xvf nagios-4.0.2.tar.gz
tar xvf nagios-plugins-1.5.tar.gz
ls -lS
-rw-r--r--  1 root root 2428258 Jan 15 20:54 nagios-plugins-1.5.tar.gz
-rw-r--r--  1 root root 1696847 Nov 25 16:20 nagios-4.0.2.tar.gz
drwxrwxr-x 18 root root    4096 Nov 25 16:16 nagios-4.0.2
drwxr-xr-x 15  200  300    4096 Oct  2 18:27 nagios-plugins-1.5

Преступаем к компиляции:

./configure
make all
make install
make install-init
make install-commandmode
make install-config
make install-webconf
./configure
make all
make install
make install-init
make install-commandmode
make install-config
make install-webconf

Заботимся о юзере и автозагрузке сервисов:

htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
chkconfig --level 235 nagios on
chkconfig --level 235 httpd on
/etc/init.d/httpd restart
/etc/init.d/nagios restart
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
chkconfig --level 235 nagios on
chkconfig --level 235 httpd on
/etc/init.d/httpd restart
/etc/init.d/nagios restart

По аналогии компилируем плагины:

cd nagios-plugins-1.5
./configure 
make
make install
cd nagios-plugins-1.5
./configure 
make
make install

Готово. Учтите, что пути к конфигурационным файлам будут отличаться от установки из репозитория. Хотя когда делаете configure это можно задать. Мне лень, так что все стандартно. Теперь когда nagios установлен в браузере идем сюда: http://Your-Nagios-IP/nagios и юзаем логин и пароль которые задали выше.
Nagios_1

Интерефейс Nagios:
Nagios_2

Как настроить Nagios?

Это уже гораздо интереснее. Есть несколько типов конфигурационных файлов. В случае если Nagios ставился из репозиториев:
Конфигурационный файл самого Nagios:
/etc/nagios/nagios.cfg

Конфигурационные файлы хостов тут, новый хост = новый файл:
/etc/nagios/objects/

Если добавляете пользователя, то не забудьте насыпать ему прав:
/etc/nagios/cgi.cfg

В случае если Nagios ставился из исходных кодов:

/usr/local/nagios/etc/cgi.cfg
/usr/local/nagios/etc/nagios.cfg
/usr/local/nagios/etc/objects < - тут файлы настройки хостов 
/usr/local/nagios/etc/cgi.cfg
/usr/local/nagios/etc/nagios.cfg
/usr/local/nagios/etc/objects < - тут файлы настройки хостов 

Найти файл только по названию, быстро и просто поможет программа locate:

yum isntall mlocate -y
updatedb 
locate cgi.cfg
yum isntall mlocate -y
updatedb 
locate cgi.cfg

В случае если Nagios ставился из исходных кодов вашей рабочей директорией будет:

cd /usr/local/nagios/etc
ls -ll
-rw-rw-r-- 1 nagios nagios 12015 Feb 13 16:42 cgi.cfg
-rw-r--r-- 1 root   root      26 Feb 13 16:39 htpasswd.users
-rw-rw-r-- 1 nagios nagios 44475 Feb 13 16:42 nagios.cfg
drwxrwxr-x 2 nagios nagios  4096 Feb 13 16:49 objects
-rw-rw---- 1 nagios nagios  1312 Feb 13 16:42 resource.cfg
cd /usr/local/nagios/etc
ls -ll
-rw-rw-r-- 1 nagios nagios 12015 Feb 13 16:42 cgi.cfg
-rw-r--r-- 1 root   root      26 Feb 13 16:39 htpasswd.users
-rw-rw-r-- 1 nagios nagios 44475 Feb 13 16:42 nagios.cfg
drwxrwxr-x 2 nagios nagios  4096 Feb 13 16:49 objects
-rw-rw---- 1 nagios nagios  1312 Feb 13 16:42 resource.cfg

Как добавить хост в Nagios?

Нужно начать с nagios.cfg. Важные конфигурацинные файлы:

cfg_file=/usr/local/nagios/etc/objects/commands.cfg
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg
cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg
cfg_file=/usr/local/nagios/etc/objects/templates.cfg
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg
cfg_file=/usr/local/nagios/etc/objects/commands.cfg
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg
cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg
cfg_file=/usr/local/nagios/etc/objects/templates.cfg
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg

На необходима вот эта строчка:

cfg_dir=/usr/local/nagios/etc/servers
cfg_dir=/usr/local/nagios/etc/servers

Это директория в которой будут лежать конфигурационные файлы хостов (объектов):

cd /usr/local/nagios/etc/
mkdir servers
chown -R nagios:nagios servers
cd /usr/local/nagios/etc/
mkdir servers
chown -R nagios:nagios servers

Для каждого нового хоста вы добавляете конфигурационный файл. Это удобно. Никакой путаницы:

cd /usr/local/nagios/etc/
ls -ll
-rwxr-xr-x 1 root   root   1486 Dec 16 17:35 esxi_oversi.cfg
-rwxr-xr-x 1 root   root   1484 Dec 16 17:35 esxi_tests.cfg
-rwxr-xr-x 1 nagios nagios 1339 Jan  9 18:01 modem_adsl.cfg
-rwxr-xr-x 1 nagios nagios 5429 Dec  4 12:47 node01.cfg
-rwxr-xr-x 1 nagios nagios 5435 Dec 19 14:06 node02.cfg
-rwxr-xr-x 1 nagios nagios 4081 Jan  5 10:40 windows_server.cfg
cd /usr/local/nagios/etc/
ls -ll
-rwxr-xr-x 1 root   root   1486 Dec 16 17:35 esxi_oversi.cfg
-rwxr-xr-x 1 root   root   1484 Dec 16 17:35 esxi_tests.cfg
-rwxr-xr-x 1 nagios nagios 1339 Jan  9 18:01 modem_adsl.cfg
-rwxr-xr-x 1 nagios nagios 5429 Dec  4 12:47 node01.cfg
-rwxr-xr-x 1 nagios nagios 5435 Dec 19 14:06 node02.cfg
-rwxr-xr-x 1 nagios nagios 4081 Jan  5 10:40 windows_server.cfg

Выше пример файлов что я создал. К примеру я хочу мониторить Linux сервер, для этого создаем новый конфигруационный файл node01.cfg:

vim /usr/local/nagios/etc/servers/node01.cfg
vim /usr/local/nagios/etc/servers/node01.cfg

Добавляем проверку ping и сохраняем файл:

# create new
 define host{
    use                     linux-server
    host_name               node01
    alias                   node01
    address                 10.0.0.101
}
define service{
    use                     generic-service
    host_name               node01
    service_description     PING
    check_command           check_ping!100.0,20%!500.0,60%
}
# create new
 define host{
    use                     linux-server
    host_name               node01
    alias                   node01
    address                 10.0.0.101
}
define service{
    use                     generic-service
    host_name               node01
    service_description     PING
    check_command           check_ping!100.0,20%!500.0,60%
}

Рестартуем nagios:

/etc/rc.d/init.d/nagios restart
/etc/rc.d/init.d/nagios restart

Результат выглядит так:
Nagios_3

Большинство популярных проверок хранятся в файле commands.cfg:

# 'check_local_disk' command definition
define command{
        command_name    check_local_disk
        command_line    $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
        }
 
# 'check_local_load' command definition
define command{
        command_name    check_local_load
        command_line    $USER1$/check_load -w $ARG1$ -c $ARG2$
        }
 
# 'check_local_procs' command definition
define command{
        command_name    check_local_procs
        command_line    $USER1$/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$
        }
 
# 'check_local_users' command definition
define command{
        command_name    check_local_users
        command_line    $USER1$/check_users -w $ARG1$ -c $ARG2$
        }
# 'check_local_disk' command definition
define command{
        command_name    check_local_disk
        command_line    $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
        }

# 'check_local_load' command definition
define command{
        command_name    check_local_load
        command_line    $USER1$/check_load -w $ARG1$ -c $ARG2$
        }

# 'check_local_procs' command definition
define command{
        command_name    check_local_procs
        command_line    $USER1$/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$
        }

# 'check_local_users' command definition
define command{
        command_name    check_local_users
        command_line    $USER1$/check_users -w $ARG1$ -c $ARG2$
        }

Создаем файл для второго хоста:

vim /usr/local/nagios/etc/servers/node02.cfg
vim /usr/local/nagios/etc/servers/node02.cfg

И добавляем туда проверку диска, CPU, SSH:

define host{
        use                     linux-server            
        host_name               CentosTest2
        alias                   Centos Lab2 from ESXi
        address                 172.17.18.4
        }
define service{
        use                             generic-service         ; Name of service template to use
        host_name                       CentosTest2
        service_description             PING
        check_command                   check_ping!100.0,20%!500.0,60%
        }
define service{
        use                             generic-service         ; Name of service template to use
        host_name                       CentosTest2
        service_description             Root Partition
        check_command                   check_local_disk!20%!10%!/
        }
define service{
        use                             generic-service         ; Name of service template to use
        host_name                       CentosTest2
        service_description             Current Users
        check_command                   check_local_users!20!50
        }
define service{
        use                             generic-service         ; Name of service template to use
        host_name                       CentosTest2
        service_description             Total Processes
        check_command                   check_local_procs!250!400!RSZDT
        }
 
define service{
        use                             generic-service         ; Name of service template to use
        host_name                       CentosTest2
        service_description             Current Load
        check_command                   check_local_load!5.0,4.0,3.0!10.0,6.0,4.0
        }
define service{
        use                             generic-service         ; Name of service template to use
        host_name                       CentosTest2
        service_description             SSH
        check_command                   check_ssh
        notifications_enabled           0
        }
define host{
        use                     linux-server            
        host_name               CentosTest2
        alias                   Centos Lab2 from ESXi
        address                 172.17.18.4
        }
define service{
        use                             generic-service         ; Name of service template to use
        host_name                       CentosTest2
        service_description             PING
        check_command                   check_ping!100.0,20%!500.0,60%
        }
define service{
        use                             generic-service         ; Name of service template to use
        host_name                       CentosTest2
        service_description             Root Partition
        check_command                   check_local_disk!20%!10%!/
        }
define service{
        use                             generic-service         ; Name of service template to use
        host_name                       CentosTest2
        service_description             Current Users
        check_command                   check_local_users!20!50
        }
define service{
        use                             generic-service         ; Name of service template to use
        host_name                       CentosTest2
        service_description             Total Processes
        check_command                   check_local_procs!250!400!RSZDT
        }

define service{
        use                             generic-service         ; Name of service template to use
        host_name                       CentosTest2
        service_description             Current Load
        check_command                   check_local_load!5.0,4.0,3.0!10.0,6.0,4.0
        }
define service{
        use                             generic-service         ; Name of service template to use
        host_name                       CentosTest2
        service_description             SSH
        check_command                   check_ssh
        notifications_enabled           0
        }

Рестартуем nagios:

/etc/rc.d/init.d/nagios restart
/etc/rc.d/init.d/nagios restart

Смотрим результат.
Nagios_4

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

Файд contacts.cfg содержит в себе контакты и контактые группы, т.е. те люди, с которыми свяжется nagios в случае обнаружения проблем:

define contact{
        contact_name                    alan            ; Short name of user
        use                             generic-contact         ; Inherit default values from generic-contact template (defined above)
        alias                           Nagios Admin            ; Full name of user
        email                           admin@linuxspace.org; < <***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
        }
define contact{
        contact_name                    alan            ; Short name of user
        use                             generic-contact         ; Inherit default values from generic-contact template (defined above)
        alias                           Nagios Admin            ; Full name of user
        email                           [email protected]; < <***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
        }

И группа администраторов:

define contactgroup{
        contactgroup_name       adminsModem
        alias                   Nagios Administrators
        members                 alex, itai
        }
define contactgroup{
        contactgroup_name       adminsModem
        alias                   Nagios Administrators
        members                 alex, itai
        }

Отправка сообщений по Email

Мы создали контакт, и даже группу администраторов. Но для того что-бы письма отправлялись. Необходм почтовый сервер:

yum install postfix -y
chkconfig --level 234 postfix on
/etc/init.d/postfix restart
yum install postfix -y
chkconfig --level 234 postfix on
/etc/init.d/postfix restart

Вот он слушает 25 порт:

[root@nagios objects]# netstat -tulpn | grep 25
tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN      8872/master
[[email protected] objects]# netstat -tulpn | grep 25
tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN      8872/master

Теперь в файле commands.cfg необходимо добавить следующее:

# 'notify-host-by-email' command definition
define command{
        command_name    notify-host-by-email
        command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mail -S smtp=smtp://199.203.223.210 -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
        }
 
# 'notify-service-by-email' command definition
define command{
        command_name    notify-service-by-email
        command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /bin/mail -S smtp=smtp://129.223.213.110 -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
        }
# 'notify-host-by-email' command definition
define command{
        command_name    notify-host-by-email
        command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mail -S smtp=smtp://199.203.223.210 -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
        }

# 'notify-service-by-email' command definition
define command{
        command_name    notify-service-by-email
        command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /bin/mail -S smtp=smtp://129.223.213.110 -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
        }

где 129.223.213.110 IP-адрес почтового сервера.
Я думаю для всех тех кто будет всерьез настраивать Nagios вышеизложенной информации хватит, что-бы начать разбираться немного в системе. Удилите внимание файлам commands.cfg, contacts.cfg, templates.cfg, timeperiods.cfg. Они очень важны и требуют чательной настройки.

Так-же упомяну про NRPE-плагин который устанавливается на клиенте в случае необходимости и помогает мониторить необходимые сервисы и службы. Для Windows такой плагин называется NSCP . А все настройки в Windows плагине хранятся в файле: NSC.txt
confi

И плагин тоже требуется настройки:
Untitled