Мониторинг серверов · 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 nrperoot@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 -pGRANT 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 Ссылки
- Icinga: https://www.icinga.org/
- Документация Icinga: http://docs.icinga.org/latest/en/
- Nagios: http://www.nagios.org/
- Debian: http://www.debian.org/
Get new posts in your inbox
No spam. Unsubscribe anytime.