Мониторинг серверов · 6 min read · Oct 18, 2025

Мониторинг сервера с Icinga на Debian Squeeze - Страница 3

4 Добавление удаленного сервера (server2) в Icinga

Мониторинг localhost — это хорошо, но, конечно, было бы еще лучше, если бы мы могли мониторить все наши серверы в одном месте. Это возможно с Icinga, и в этой главе описывается, как мы можем добавить наш второй сервер Debian Squeeze (server2.example.com) в настройку.

Для этого нам нужно установить сервер Nagios NRPE (Nagios Remote Plugin Executor) на server2 и плагин Nagios NRPE на server1. Сервер NRPE будет слушать на server2; server1 подключится к нему с помощью плагина NRPE и передаст команды, которые сервер NRPE выполнит на server2; он вернет результаты на server1.

Сначала мы устанавливаем пакет nagios-nrpe-plugin на server1:

server1:

apt-get install nagios-nrpe-plugin

Пароль веб-администрации Nagios: <– nagiosadmin_password
Подтверждение пароля: <– nagiosadmin_password

Теперь мы переходим к server2:

server2:

Установите пакет nagios-nrpe-server:

apt-get install nagios-nrpe-server

Рабочая группа/Имя домена: <– WORKGROUP

Теперь откройте /etc/nagios/nrpe.cfg:

vi /etc/nagios/nrpe.cfg

Мы должны настроить сервер NRPE, чтобы разрешить server1 (IP: 192.168.0.100) подключаться, поэтому мы добавляем 192.168.0.100 в строку allowed_hosts:

| [...] # ALLOWED HOST ADDRESSES # Это необязательный список IP-адресов или имен хостов, # которым разрешено общаться с демоном NRPE. # # Примечание: Демон выполняет лишь элементарную проверку IP-адреса клиента. # Я настоятельно рекомендую добавлять записи в ваш файл /etc/hosts.allow # чтобы разрешить только указанному хосту подключаться к порту, # на котором вы запускаете этот демон. # # ПРИМЕЧАНИЕ: Эта опция игнорируется, если NRPE работает под управлением inetd или xinetd allowed_hosts=127.0.0.1,192.168.0.100 [...] |

(Если вы этого не сделаете, вы получите следующую ошибку, когда выполните

/usr/lib/nagios/plugins/check_nrpe -H 192.168.0.101

на server1:

root@server1:/etc/nagios-plugins/config# /usr/lib/nagios/plugins/check_nrpe -H 192.168.0.101  
CHECK_NRPE: Ошибка - Не удалось завершить SSL рукопожатие.  
root@server1:/etc/nagios-plugins/config#

)

Кроме того, server1 должен иметь возможность передавать аргументы командной строки серверу NRPE, поэтому все еще в том же файле мы устанавливаем dont_blame_nrpe в 1:

| [...] # ОБРАБОТКА АРГУМЕНТОВ КОМАНД # Эта опция определяет, будет ли демон NRPE разрешать клиентам # указывать аргументы для выполняемых команд. Эта опция работает только # если демон был настроен с помощью опции скрипта конфигурации --enable-command-args. # # * ВКЛЮЧЕНИЕ ЭТОЙ ОПЦИИ ЯВЛЯЕТСЯ РИСКОМ БЕЗОПАСНОСТИ! * # Прочитайте файл SECURITY для получения информации о некоторых из # последствий безопасности включения этой переменной. # # Значения: 0=не разрешать аргументы, 1=разрешить аргументы команд dont_blame_nrpe=1 [...] |

(Если вы этого не сделаете, вы увидите ошибку

CHECK_NRPE: Получено 0 байт от демона. Проверьте журналы удаленного сервера на наличие сообщений об ошибках.

для множества проверок удаленных служб в веб-интерфейсе Icinga, и в /var/log/syslog на server2 вы увидите эти ошибки:

Aug 23 14:20:20 server2 nrpe[11496]: Ошибка: Запрос содержал аргументы команды, но опция аргумента не включена!  
Aug 23 14:20:20 server2 nrpe[11496]: Запрос клиента был недействительным, выходим...

)

Наконец, мы должны добавить определения команд для каждой проверки службы, которую мы хотим выполнить на server2 и которая еще не определена. Я хочу выполнить проверки check_procs, check_all_disks и check_mysql_cmdlinecred на server2; они не определены в /etc/nagios/nrpe.cfg, поэтому я добавляю их сейчас (я также хочу выполнить проверки check_users и check_load, но они уже определены):

| [...] command[check_procs]=/usr/lib/nagios/plugins/check_procs -w 250 -c 400 command[check_all_disks]=/usr/lib/nagios/plugins/check_disk -w '20%' -c '10%' -e command[check_mysql_cmdlinecred]=/usr/lib/nagios/plugins/check_mysql -H localhost -u 'nagios' -p 'howtoforge' [...] |

(Если вы этого не сделаете, вы получите ошибки, такие как

NRPE: Команда 'check_all_disks' не определена  
NRPE: Команда 'check_mysql_cmdlinecred' не определена  
NRPE: Команда 'check_procs' не определена

в веб-интерфейсе Icinga.)

Как вы видите, я жестко закодировал аргументы командной строки, потому что использование переменных, таких как command[check_procs]=/usr/lib/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$, не сработало для меня. Но все же, когда мы настраиваем проверки служб для server2 на server1, нам нужно будет передать аргументы командной строки для этих проверок; server2 проигнорирует их, потому что я жестко закодировал аргументы командной строки в /etc/nagios/nrpe.cfg, но если вы оставите их пустыми, вы получите ошибки, такие как /usr/lib/nagios/plugins/check_nrpe: опция требует аргумент – ‘a’ в веб-интерфейсе Icinga.

Теперь сохраните файл и перезапустите сервер NRPE:

/etc/init.d/nagios-nrpe-server restart

Теперь проверьте, слушает ли сервер NRPE:

netstat -tap | grep nrpe
root@server2:~# netstat -tap | grep nrpe  
tcp        0      0 *:nrpe                  *:*                     LISTEN      2132/nrpe  
root@server2:~#

Теперь вернитесь к server1…

server1:

… и проверьте, может ли он подключиться к серверу NRPE на server2:

/usr/lib/nagios/plugins/check_nrpe -H 192.168.0.101

Вывод должен быть следующим в случае успеха:

root@server1:~# /usr/lib/nagios/plugins/check_nrpe -H 192.168.0.101  
NRPE v2.12  
root@server1:~#

Теперь вернитесь к server2:

server2:

Мы хотим проверить MySQL на server2; поскольку мы используем демон NRPE, мы можем выполнять проверку локально на server2, т.е. нам не нужно открывать MySQL для внешнего доступа, чтобы разрешить server1 выполнять проверку. Поэтому я создаю пользователя MySQL nagios для localhost и localhost.localdomain вместо 192.168.0.100 и server1.example.com:

mysql -u root -p
GRANT USAGE ON *.* TO nagios@localhost IDENTIFIED BY 'howtoforge';  
GRANT USAGE ON *.* TO [email protected] IDENTIFIED BY 'howtoforge';  
FLUSH PRIVILEGES;
quit;

Теперь мы возвращаемся к server1…

server1:

… и создаем конфигурацию Icinga для server2:

vi /etc/icinga/objects/server2_icinga.cfg

| define host{ use generic-host host_name server2.example.com alias server2 address 192.168.0.101 } define service{ use generic-service host_name server2.example.com service_description PING check_command check_ping!100.0,20%!500.0,60% } define service{ use generic-service ; Имя шаблона службы для использования host_name server2.example.com service_description Disk Space check_command check_nrpe!check_all_disks!20%!10% } define service{ use generic-service host_name server2.example.com service_description Current Users check_command check_nrpe!check_users!20!50 } define service{ use generic-service ; Имя шаблона службы для использования host_name server2.example.com service_description Total Processes check_command check_nrpe!check_procs!250!400 } define service{ use generic-service ; Имя шаблона службы для использования host_name server2.example.com service_description Current Load check_command check_nrpe!check_load!5.0!4.0!3.0!10.0!6.0!4.0 } define service{ use generic-service host_name server2.example.com service_description MySQL check_command check_nrpe!check_mysql_cmdlinecred!nagios!howtoforge } define service{ use generic-service host_name server2.example.com service_description SMTP check_command check_smtp } define service{ use generic-service host_name server2.example.com service_description POP3 check_command check_pop } define service{ use generic-service host_name server2.example.com service_description IMAP check_command check_imap } |

(Как я уже упоминал, хотя я жестко закодировал аргументы командной строки для некоторых команд в /etc/nagios/nrpe.cfg на server2, нам все равно нужно добавить аргументы командной строки для некоторых из этих проверок здесь.)

Как вы видите, я использую check_nrpe для некоторых проверок и передаю фактическую проверку (такую как check_all_disks) в качестве аргумента командной строки для check_nrpe. Это проверки, которые будут выполняться локально демоном NRPE на server2. check_nrpe не нужен для всех проверок. Проверки, которые тестируют соединение снаружи, такие как check_ping или check_smtp, могут выполняться с server1.

Чтобы проверить службы SSH и HTTP на server2, мы можем ИЛИ добавить следующие разделы в /etc/icinga/objects/server2_icinga.cfg…

| [...] define service { use generic-service host_name server2.example.com service_description SSH check_command check_ssh } define service { use generic-service host_name server2.example.com service_description HTTP check_command check_http } |

ИЛИ мы добавляем server2.example.com в группы хостов http-servers и ssh-servers в /etc/icinga/objects/hostgroups_icinga.cfg:

vi /etc/icinga/objects/hostgroups_icinga.cfg

| # Некоторые определения групп хостов # Простое определение группы хостов с подстановочными знаками define hostgroup { hostgroup_name all alias Все серверы members * } # Список ваших серверов Debian GNU/Linux define hostgroup { hostgroup_name debian-servers alias Серверы Debian GNU/Linux members localhost,server2.example.com } # Список ваших веб-серверов define hostgroup { hostgroup_name http-servers alias HTTP серверы members localhost,server2.example.com } # Список ваших серверов с доступом по ssh define hostgroup { hostgroup_name ssh-servers alias SSH серверы members localhost,server2.example.com } |

Перезапустите Icinga:

/etc/init.d/icinga restart

После этого вы должны увидеть server2 в веб-интерфейсе Icinga:

Вот проверки служб для server2:

Если вы добавили server2 в группы хостов, он также должен быть перечислен в Обзоре служб для всех групп хостов:

5 Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.