Недавно я начал использовать Nagios для мониторинга около 25 серверов (в основном виртуальных, с некоторыми автономными). Большинство серверов (включая сам хост Nagios) работают под управлением Ubuntu 14.04 LTS, а некоторые — под управлением 12.04 LTS. Поэтому я подумал, что могу просто использовать NRPE и покончить с этим.
Настройка NRPE оказалась для меня довольно сложной. Например, для простой команды check_disk мне пришлось вручную указать, какой раздел проверять, исключив все остальные разделы/файловые системы, как показано ниже:
command[check_disk]=/usr/lib/nagios/plugins/check_disk -w 57% -x /dev -x /run -x /run/lock -x /run/shm -x /run/user -x /sys/fs/cgroup
В противном случае мои пороговые значения предупреждения и критического состояния немедленно срабатывали на разделах sysfs, proc или других.
Затем я взглянул на базовый сервисный монитор, который хост Nagios выполняет на себе. Он указан в /usr/local/nagios/etc/localhost.cfg и содержит следующее (извините! Я не понимаю, почему он не форматируется должным образом!)
define service{
use local-service ; Name of service template to use
host_name localhost
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description Root Partition
check_command check_local_disk!20%!10%!/
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description Current Users
check_command check_local_users!20!50
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description Total Processes
check_command check_local_procs!250!400!RSZDT
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description Current Load
check_command check_local_load!5.0,4.0,3.0!10.0,6.0,4.0
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description Swap Usage
check_command check_local_swap!20!10
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description SSH
check_command check_ssh
notifications_enabled 0
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description HTTP
check_command check_http
notifications_enabled 0
}
В результате на панели управления появляется следующее:
Это ИДЕАЛЬНО для меня. Это именно то, что я хочу, чтобы отображалось на каждом добавляемом мной хосте. Вместо того, чтобы возиться с пользовательскими командами, как именно мне «скопировать» это на каждый хост через файл NRPE conf, чтобы я мог видеть все эти конкретные службы для каждого добавляемого мной хоста? Очевидно, что это уже здесь и уже функционирует на локальном хосте. Я с трудом представляю себе организацию, необходимую для того, чтобы это произошло.
Спасибо за любые советы.
решение1
Не так давно я написал действительно хороший скрипт автоустановщика NRPE, который, как я считаю, может вам помочь, если вы отредактируете его в соответствии со своими потребностями. Скрипт включает в себя множество встроенных проверок, которые добавляются в nrpe.cfg
файл каждого хоста. Это означает, что вы можете настроить проверки, которые вам нужны, и убедиться, что каждый хост, на котором запущен скрипт, также будет иметь их, это о стороне клиента.
Ссылка на сценарий:Здесь.
Что касается серверной части (Nagios), вы можете установить менеджер конфигурации Nagios, например NagioSQL, который поможет вам управлять вашими хостами и службами более удобным способом через графический интерфейс.
Более того, чтобы убедиться, что на всех ваших хостах выполняются указанные вами проверки, просто создайте группу служб, в которую войдут все службы (проверки), которые вы хотите отслеживать, а затем просто прикрепите эту группу служб к каждому хосту, который вы отслеживаете.
Позвольте мне рассказать вам, что я сделал в своей компании. Я хотел убедиться, что каждый сервер отслеживается с помощью проверки check_load
, но поскольку у нас в компании нет базового оборудования, а это значит, что у каждого сервера разные характеристики, и они check_load
рассчитываются по ядрам/процессорам в машине, я добавил в модуль «Nagios_client» на нашем сервере Puppet, custom_fact
который определяет, сколько процессоров имеется в машине, и соответствующим образом настраивает Nagios check_load
.
Например, допустим, что server1 имеет 4 процессора, что означает, что загрузка 2,8 является идеальной (0,7 на процессор). Puppet facter
определяет количество процессоров, а затем редактирует сервер nrpe.cfg
следующим образом:
command[check_load]=/usr/local/nagios/libexec/check_load -w 2.9,3.0,3.1 -c 4.0,5.0,6.0
Затем, например, в NagioSQL вы можете использовать "функцию импорта", которая позволяет вам импортировать *.cfg
файлы, которые будут загружены в Nagios как хосты и службы. Таким образом, вы можете создать один host.cfg
файл и с помощью скрипта дублировать его на каждом хосте, который вы хотите отслеживать, и просто изменить имя хоста/IP каждой машины, и это перенесет вас на еще один шаг к более автоматическим конфигурациям.
В моем случае, например, Puppet понимает, что он впервые запущен на машине, а затем создает соответствующий host.cfg
файл в Nagios.
Я считаю, что с Puppet + NagioSQL администрирование Nagios станет гораздо более простой задачей.
Что касается ваших трудностей с настройкой любых проверок... Вы всегда можете написать свой собственный скрипт и настроить Nagios для его запуска. Например, давайте возьмем вашу check_disk
команду, это очень богатая команда, которая позволяет вам отображать все виды данных, которые вам не нужны и важны.
Итак, у меня была та же проблема с check_procs
, еще одной очень богатой командой, которая дает вам все виды данных... которые мне не нужны, поэтому я написал простой скрипт проверки, который делает именно то, что мне нужно, и настроил его в Nagios. Пример:
#!/bin/bash
# This script checks for running processes for mt.js and adb-server.js
# Script by Itai Ganot 2015 .
process="$1"
appname=$(basename $0)
if [ -z "$1" ]; then
echo "Please specify a process to check"
exit 1
fi
ps -ef | grep "$process" | egrep -v "grep|$appname" &>/dev/null
if [ "$?" -eq "0" ] ; then
stat="OK"
exitcode="0"
msg="Process $process is running"
else
stat="Critical"
exitcode="2"
msg="There are currently no running processes of $process"
fi
pid=$(ps -ef | grep "$process" | egrep -v "grep|$appname" | awk '{print $2}')
echo "$stat: $msg Process PID: $pid"
exit $exitcode
Он дает мне меньше информации, чем настоящий, check_procs
но дает именно ту, которая мне нужна.
Короче говоря, если check_disk
у вас возникли трудности с настройкой вашей команды, то просто создайте свой собственный скрипт, в этом и заключается прелесть Nagios.
Надеюсь, я вам помог.
решение2
Вам понадобится программное обеспечение для управления конфигурацией, чтобы настроить и установить демон nrpe на каждом удаленном хосте, а также развернуть конфигурации и, в конечном итоге, ваши плагины.
Могу ли я предложитьАнсибльдля этой задачи.
https://github.com/bobmaerten/ansible-role-nagios-nrpe-server