Мониторинг Icinga · 6 min read · Nov 18, 2025
Добавление нового хоста и служб для мониторинга в Icinga 2
В этом руководстве я покажу вам, как добавить новый хост для мониторинга в Icinga 2 и как службы хоста, такие как веб HTTP сервер, могут быть мониторингом Icinga. Я также покажу вам, как создать свою собственную команду плагина Icinga для мониторинга UDP служб в вашей сетевой инфраструктуре.
Icinga 2 предоставляет инфраструктуру плагинов, которая позволяет легко реализовывать проверки серверов и служб, а также уведомления. Этот факт позволяет системным администраторам и программистам создавать новую функциональность для Icinga 2 и создавать специальные команды, специализированные на проверке различных аспектов хоста, сетевой службы или сетевой функциональности.
Icinga 2 хранит определения хостов с атрибутами объектов, используемыми для правил служб, уведомлений, зависимостей и объектов запланированного простоя в файле hosts.conf, который находится в директории /etc/icinga2/conf.d/. В этом файле вы можете добавить новое определение хоста для проверки процессом мониторинга Icinga2. В приведенном ниже примере мы добавим новое определение, чтобы наш маршрутизатор по умолчанию мог периодически проверяться Icinga2, чтобы узнать, находится ли он в сети через проверки ICMP.
nano /etc/icinga2/conf.d/hosts.confПерейдите в конец файла и добавьте следующие строки, чтобы добавить новое определение хоста.
object Host "Router" {
address = "192.168.1.1"
check_command = "hostalive"
}Например, на основном маршрутизаторе мы также хотим проверить статус HTTP веб-сервера, который используется для аутентификации и настроек. Ниже приведенные строки будут проверять веб-сервер на маршрутизаторе, чтобы узнать, жив ли HTTP сервер и отвечает ли он правильными HTTP кодами.
object Service "http" {
host_name = "Router"
check_command = "http"
}
Для того чтобы Icinga 2 подхватила новые определения хостов и начала периодически мониторить новый ресурс, вам необходимо перезапустить процесс, выполнив следующую команду.
systemctl restart icinga2.serviceЧтобы проверить состояние вновь добавленного хоста, в данном случае маршрутизатора, войдите в веб-панель Icinga 2 и перейдите в Обзор -> Хосты. В правой части вы должны увидеть статус вновь добавленного хоста, как показано на изображении ниже, которое описывает статус нашего маршрутизатора. Проверки хостов в основном выполняются через протокол ICMP, и Icinga2 будет отображать среднее время кругового обхода для хоста в веб-панели.

Если вы хотите отобразить статус проверок службы HTTP хоста, перейдите в Обзор -> Группы служб и нажмите на HTTP Проверки. В правой части вы должны увидеть статус службы HTTP маршрутизатора, как показано на следующем скриншоте.

Icinga 2 поставляется с рядом предопределенных команд, которые могут быть использованы для мониторинга широкого спектра служб. Но эти стандартные команды иногда недостаточны для проверки пользовательских служб. В этом случае одним из подходов является создание собственного скрипта команды, который может быть вызван Icinga 2 для мониторинга службы. В приведенном ниже примере мы покажем вам, как добавить новый пользовательский скрипт команды для проверки состояния различных UDP служб в вашей сети. Пользовательская команда должна быть параметризована и должна содержать как минимум два параметра в виде –H hostname или IP и –p номер порта. Скрипт пользовательской команды для проверки порта UDP должен быть размещен в директории /usr/lib/nagios/plugins/ и должен содержать содержание, как указано в приведенном ниже примере.
nano /usr/lib/nagios/plugins/check_udpportФрагмент файла check_udpport.
#!/bin/bash
while getopts H:p: option
do
case "${option}"
in
H) addr=${OPTARG};;
p) port=${OPTARG};;
esac
done
/bin/nc -vz -u "$addr" "$port" > /dev/null 2>&1
stat=`echo $?`
if test $stat -eq 0; then
echo "Порт $port открыт на $addr"
exit 0
else
echo "Порт $port не открыт на $addr"
exit 2
fi
Давайте попробуем понять, как работает этот скрипт. Как вы можете видеть, плагин не что иное, как простой Bash скрипт. Мы используем управляющее выражение while, чтобы пройти через два параметра, определенных буквами H и p. Две переменные оболочки H и p параметризованы и разбираются как аргументы командной строки с использованием оператора case. Оператор case проверит, существуют ли параметры, и объявит их для переменных addr и port. Далее переменные $ addr и $ port будут добавлены как параметры команд для команды netcat, которая, в свою очередь, проверит, открыт ли номер порта, определенный в $port variable, для хоста с IP-адресом, определенным переменной $addr. Вывод команды netcat и возможные ошибки не интересуют этот плагин, поэтому он будет отброшен в черную дыру Linux /dev/null. Нам нужен код выхода команды netcat. После того как netcat проверит порт на хосте, он всегда вернет код выхода 0 в случае, если проверяемый UDP порт открыт. Остальная часть команды довольно проста. Условное выражение if-else выведет следующее: если UDP порт открыт на указанном IP-адресе, выведите строку с содержанием ‘порт открыт’ для этого IP-адреса хоста вместе с добавлением кода выхода 0. Код выхода 0 всегда является кодом успеха или кодом отсутствия ошибки, возвращаемым процессом в Linux. Если UDP порт не открыт (код выхода netcat будет отличен от 0), выведите строку, которая говорит ‘порт не открыт’ для хоста и добавьте код выхода 2. Код выхода, добавленный после каждой строки echo в этом скрипте, имеет огромное значение для проверок Icinga2, как объяснено ниже.
Код возврата плагина команды для состояния службы или состояния хоста в Icinga 2:
0 = OK для служб и ВКЛ для хостов
1 = ПРЕДУПРЕЖДЕНИЕ для служб и ВКЛ или ВЫКЛ/НЕДОСТУПЕН для хостов (хост колеблется или часто меняет свои состояния)
2 = КРИТИЧЕСКИЙ для служб и ВЫКЛ/НЕДОСТУПЕН для хостов
3 = НЕИЗВЕСТНЫЙ ВЫКЛ/НЕДОСТУПЕН
Таким образом, Icinga 2 выполнит этот скрипт с параметрами хоста и порта, и он вернет два состояния: либо UDP порт недоступен и уведомит вас, что служба UDP хоста критическая, либо UDP порт доступен и уведомит вас, что служба UDP работает в хороших условиях и в порядке.
После того как вы отредактировали файл скрипта, сохраните и закройте его и убедитесь, что файл может быть запущен в исполнении, добавив разрешения на выполнение с помощью следующей команды.
chmod +x /usr/lib/nagios/plugins/check_udpportЗатем, чтобы проверить, работает ли скрипт как ожидалось, выполните команду против открытого UDP порта и закрытого UDP порта на хосте в вашей сети, выполнив следующий синтаксис.
Здесь проверяется TFTP сервер для хоста 192.168.1.2.
/usr/lib/nagios/plugins/check_udpport –H 192.168.1.2 –p 69 Симулируйте проверки против UDP порта, который вы точно знаете, что закрыт.
/usr/lib/nagios/plugins/check_udpport –H 192.168.1.2 –p 68
Для того чтобы этот новый пользовательский плагин широко использовался в Icinga 2, добавьте новое определение команды в файл конфигурации команд Icinga 2, как показано в приведенном ниже примере.
nano /etc/icinga2/conf.d/commands.confПерейдите в конец этого файла и добавьте определение команды следующим образом:
object CheckCommand "myudp" {
command = [ PluginDir + "/check_udpport" ]
arguments = {
"-H" = "$addr$"
"-p" = "$port$"
}
vars.addr = "$address$"
}
Имя команды, которую мы будем использовать в конфигурациях Icinga 2 для вызова команды ckeck_udpport, будет “ myudp ”. Нам не нужно указывать адрес, когда мы вызываем команду для определения службы хоста, потому что он закодирован в переменной макроса Icinga 2 $address$.
Чтобы проверить, работает ли команда как ожидалось, добавьте новое определение службы для хоста, чтобы проверить, открыт ли конкретный UDP сервис или нет на этом хосте. Например, чтобы проверить, открыт ли порт DHCP для хоста 192.168.1.2, добавьте следующее определение в файл hosts.conf Icinga2.
object Service "dhcp" {
host_name = "Pi.hole"
check_command = "myudp"
vars.port = "67"
}
После этого перезапустите Icinga 2, чтобы отразить изменения, и перейдите в веб-панель Icinga 2, Обзор -> Хосты, нажмите на ваш конкретный хост и проверьте статус службы UDP, как показано на следующем скриншоте.

Вот и все! Вы успешно добавили хост, и его службы будут периодически проверяться приложением мониторинга сети Icinga 2. Для других пользовательских конфигураций, касающихся движка мониторинга Icinga 2 и пользовательского скрипта команды, посетите страницу документации по следующему адресу: https://www.icinga.com/docs/icinga2/latest/doc/03-monitoring-basics/#check-commands
Get new posts in your inbox
No spam. Unsubscribe anytime.