Проверяем Zabbix

14 февраля 2020

Проверяем Zabbix (Episode II)

Наш предыдущий рецепт для проверки Zabbix-сервера содержит неочевидный, но важный изъян.

Он контролирует, что Zabbix-сервер жив и доступен из Интернета, но упускает существенную деталь:
успешные ответы Zabbix-сервера на запросы извне отнюдь не означают, что Zabbix-сервер может обратиться наружу.

Например, обращения к серверу Telegram или SMTP-серверам обычно производится по DNS-имени.
Если DNS отказывает — обратиться к ним Zabbix не сможет, хотя всё остальное в нём продолжит работать нормально.

В результате мы не узнаем от него об авариях в те моменты, когда не смотрим в Веб-интерфейс.

Поэтому Zabbix-сервер (или дополнительный костыль на нём) обязан:

  • регулярно проверять работоспособность используемых инструментов оповещения;
  • и информировать внешний мониторинг о результатах проверки.

В случае с электронной почтой это может быть периодическая отправка емейлов на внешний ящик и проверка через fetchmail, что они в него дошли.

Для Telegram достаточно убедиться, что https://api.telegram.org (а) открывается, (б) имеет корректный сертификат и (в) возвращает редирект на сайт с документацией:

nn="$(curl -sS -v https://api.telegram.org/ 2>&1 | 
      egrep -c '^. (HTTP/1.1 302 Moved Temporarily|Location: https://core.telegram.org/bots)')"
test "$nn" = "2" && echo "Telegram OK" || echo "Telegram failure"

Поскольку наша проверка будет запускаться извне как Веб-страница, перепишем её на PHP и сохраним в файл /usr/share/zabbix/TGCheck-секретный-суффикс.php:

<?php
                
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://api.telegram.org/');
curl_setopt($ch, CURLOPT_NOBODY, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
curl_setopt($ch, CURLOPT_TIMEOUT, 10);

curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);

printf("%s,%s", $info['http_code'], $info['redirect_url']);

Поскольку написанная на PHP часть Zabbix'a не использует cURL, то соответствующий пакет вряд ли установлен и его потребуется установить сейчас:

apt install php-curl
apachectl graceful

В завершение добавим проверку во внешний мониторинг:

  • URL = zabbix.наша-фирма.ru/TGCheck-секретный-суффикс.php
  • Требуемая строка = 302,https://core.telegram.org/bots


← Назад в Блог

Подпишитесь на новые статьи: