Поиск по сайту:

Добавьте новый хост и службы для мониторинга с помощью Icinga 2


В этом руководстве я покажу вам, как добавить новый хост для мониторинга с помощью Icinga 2 и как службы хоста, такие как веб-HTTP-сервер, могут отслеживаться с помощью Icinga. Я также покажу вам, как создать собственную команду подключаемого модуля Icinga для мониторинга служб UDP в вашей сетевой инфраструктуре.

Ознакомьтесь с этим руководством, если у вас еще не установлен Icinga 2. gpt-ad-howtoforge_com-medrectangle-3-0;var ffid=1;var alS=1021%1000;var container=document.getElementById(slotId);container.style.width=100%;var ins=document.createElement( ins);ins.id=slotId+-asloaded;ins.className=adsbygoogle ezasloaded;ins.dataset.adClient=pid;ins.dataset.adChannel=cid;if(ffid==2){ins.dataset.fullWidthResponsive=true; }

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 имя хоста или 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 $port is opened on $addr"
exit 0
else
echo "Port $port is not opened on $addr"
exit 2
fi

Попробуем разобраться, как работает этот скрипт. Как видите, плагин — это не что иное, как простой скрипт Bash. Мы используем управляющее выражение while для перебора двух параметров, определяемых буквами H и p. Две буквы переменных оболочки H и p параметризуются и анализируются как аргументы командной строки с использованием оператора case. Оператор case проверит наличие параметров и объявит их для переменных addr и port. Затем переменные $addr и $port будут добавлены в качестве опций для команды netcat, которая, в свою очередь, проверит, соответствует ли номер порта, указанный в переменной $port, открывается для хоста с IP-адресом, определяемым переменной $addr. Вывод команды netcat и возможные ошибки не представляют интереса для этого плагина, поэтому он будет отброшен в файл Linux blackhole /dev/null. Что нам нужно, так это код выхода команды netcat. После того, как netcat проверит порт на хосте, он всегда будет возвращать код выхода 0, если проверяемый порт UDP открыт. Остальная часть команды довольно проста. Условный оператор if-else case напечатает следующее: если порт UDP открыт на указанном IP-адресе, напечатайте строку с содержимым «порт открыт» для этого IP-адреса хоста вместе с добавлением код выхода 0. Код выхода 0 всегда является кодом успеха или отсутствия ошибки, возвращенным процессом в Linux. Если порт UDP не открыт (код выхода netcat будет отличен от 0), напечатайте строку, которая говорит, что «порт не открыт» для хоста, и добавьте код выхода 2. Коды выхода добавляются после каждого напечатанного эха string в этом скрипте имеет огромное значение для проверок Icinga2, как описано ниже.

Код возврата командного плагина для состояния службы или состояния хоста в Icinga 2:

0=OK для сервисов и UP для хостов

1=ПРЕДУПРЕЖДЕНИЕ для служб и UP или DOWN/UNREACHABLE для хостов (хост часто колеблется или меняет свое состояние)

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$variable.

Чтобы проверить, работает ли команда должным образом, добавьте новое определение службы для хоста, чтобы проверить, открыта ли конкретная служба UDP на этом хосте. Например, чтобы проверить, открыт ли порт DHCP для хоста 192.168.1.2, добавьте приведенное ниже определение в файл Icinga2 hosts.conf.

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- команды