Проверка доступности порта в Zabbix
Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов в рунете по системному администрированию. В прошлый раз мы с вами разобрали ситуацию, когда в Windows 11 на устройстве в диспетчера оборудования висела вот такая ошибка "Запуск этого устройства невозможен. (код 10)". Сегодня я покажу вам, как можно производить мониторинг доступности порта службы через Zabbix, мы настроим уведомления для своевременного реагирования.
Постановка задачи
Все наверняка знают, о такой крутой системе мониторинга Zabbix, она простая и бесплатная. Задача заключается в том, чтобы научиться анализировать состояние порта у службы, в качестве примера это будет служба RPC работающая по порту 135 на терминальных столах RDS фермы. Как только порт окажется недоступным, необходимо это зафиксировать и сообщить администратору, по почте или телеграмм каналу.
Настройка проверки доступности порта в Zabbix
Первое, что я советую сделать, это создать группу для объединения в них серверов, которые схожи по своим задачам. У меня это будет группа RDS серверы. Для этого перейдите в "Настройка - Группы узлов сети" потом в правом, верхнем углу нажмите "Создать группу узлов сети".
Задаем нужное вам имя для группы.
Теперь создайте узел сети, это по сути объект вашего сервера, который вы будите мониторить. Переходим в "Настройки — Узлы сети — Создать узел сети".
Заполните:
- Имя узла сети
- Группы - тут через кнопку "Выбрать" выберите нашу ранее созданную группу
- IP-адрес
- DNS имя
- Описание
Так же если у вас есть общие шаблоны, то вы их можете прилинковать тут, это удобно когда нужно проверку проводить по группе серверов.
Далее нам необходимо создать элемент данных, я это сделаю для шаблона, это так же можно делать и для отдельного хоста.
Задаем ему:
- Понятное имя, в моем случае это будет "Check port 135"
- Тип - Zabbix агент
- Ключ - net.tcp.listen[135] данный вид проверки будет осуществляться со стороны Zabbix агента, что создаст меньше нагрузки, можно сделать внешнюю проверку, чтобы сам сервер Zabbix проверял по типу net.tcp.service[сервис,<ip>,<порт>], пример net.tcp.service[tcp,192.168.100.100,135]
- Задаем интервал - я установлю 1 минуту
- Пользовательские интервалы - Переменный
- Отображение значения - Нужно выбрать тип значений, тут "0 - сервис недоступен" и "1 - сервис запущен"
В итоге у вас должно быть вот так.
Теперь осталось создать тригер. Переходим в соответствующее меню, где задаем:
- Имя тригера - Порт 135 не слушается
- Важность
- Выражение - {TMPL_VIRT_MS_RDS_SH:net.tcp.listen[135].last()}=0
На этом все. Теперь Zabbix агент будит каждую минуту проверять доступность порта, если есть проблемы, то он пришлет предупреждение:
14:58:09,2021.07.29 : Важно : term131.root.pyatilistnik.org : Порт 135 не слушается
Массовая проверка сервисов Google на конечных узлах с помощью агента Zabbix
Так же появилась задача проверить доступность различных сервисов компании Google по https, на 50 хостах RDS фермы через агентов Zabbix. Список приблизительно такой, но он может варьироваться.
- www.google.com
- google.com
- mail.google.com
- docs.google.com
- meet.google.com
- calendar.google.com
- drive.google.com
- mail.google.com
- chromewebstore.google.com
Для решения данной задачи был создан мини шаблон "Google services check". В качестве элемента данных выбрана конструкция net.tcp.service[https,calendar.google.com,443].
Пример элемента данных.
Пример элемента данных для процентного вычисления. Тут нужно добавить в формулу:
100 * (1 - avg(//net.tcp.service[https,www.google.com,443],3600))
Эта формула используется для расчета процентной недоступности сервиса за определенный период времени:
- net.tcp.service[https,google.com] - Это ключ элемента данных Zabbix, который проверяет доступность HTTPS-сервиса на google.com. Если 1, то сервис доступен (порт 443 отвечает), если 0, то нет.
- avg(...,3600): - Функция усреднения значений за последние 3600 секунд (1 час). Например, если сервис был доступен 45 минут и недоступен 15 минут, среднее будет 0.75
- 1 - avg(...): - Инвертирует значение доступности в значение недоступности. Если средняя доступность 0.75, недоступность будет 0.25
- 100 * (...): - Преобразует дробное значение в проценты. 0.25 становится 25%
Если сервис был полностью доступен: avg = 1, 1 - 1 = 0, 100 * 0 = 0% недоступности
Если сервис был недоступен 15 минут: avg = 0.75 (45мин/60мин), 1 - 0.75 = 0.25, 100 * 0.25 = 25% недоступности
Если сервис полностью недоступен: avg = 0, 1 - 0 = 1, 100 * 1 = 100% недоступности
Далее цепляем мини-шаблон на нужные узлы сети.
В результате сбора будет подобного рода график.
На этом у меня все. С вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.
Добрый день, Иван! Спасибо за статью.