Проверяем 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