Продолжаю работу по переводу шаблонов на пятую версию Zabbix. Сегодня дописал третью версию шаблона для мониторинга срока действия доменов. Мониторим в Linux.
Новую версия полностью переработал. Получилось следующее:
- Существенно уменьшено количество файлов. Для работы шаблона достаточно самого шаблона, одного скрипта и одного конфигурационного файла с пользовательскими переменными.
- Механизм crontab больше не используется для получения данных доменов.
- Международные доменные имена (IDN) поддерживаются, например, "испытание.рф".
- Добавлена возможность указать название домена, которое вместе с доменным именем используется в триггеров.
- Кроме срока действия домена отслеживаются дополнительные данные.
- Все данные домена получаются одним запросом, скрипт можно использовать для просмотра данных домена из Linux.
- Тайминги настраиваются в макросах шаблона.
- И самое главное, список проверяемых доменов можно менять в самом шаблоне, он больше не хранится на хосте. Для получения данных доменов используется низкоуровневое обнаружение.
Механизм получения данных домена основан на работе утилиты whois.
whois — сетевой протокол на основе протокола TCP. Его основное предназначение: получение в текстовом виде регистрационных данных о владельцах IP адресов и доменных имен.
Работа whois описана в RFC 3912 http://tools.ietf.org/html/rfc3912. Открываем TCP соединение на 43 порт к нужному whois серверу, посылаем запрос в определенном формате, который зависит от конкретного whois сервера, заканчиваем запрос "\r\n" и получаем результат, формат которого также зависит от конкретного whois сервера. Получается что мы куда-то отправляем что-то и получаем в ответ нечто.
Из-за того, что результат выдачи whois сервера может в любой момент измениться, я не гарантирую правильность работы скрипта. Используйте на свой страх и риск и не забывайте вовремя оплачивать домены.
Скрипт протестирован в зонах:
RU NET.RU ORG.RU PP.RU SPB.RU MSK.RU РФ
INFO RE ORG COM NET TW OOO SHOP.
Есть шанс что в каких-то других зонах тоже будет работать.
Я подобрал несколько whois серверов к тем доменным зонам, которые мне были нужны и постарался распарсить основные данные домена, которые мне могли пригодиться:
- Название регистратора
- NS сервера
- Дата создания домена
- Дата истечения срока оплаты домена
- Количество дней до истечения срока оплаты домена
Сознательно не стал собирать контактные данные владельца домена, потому как мониторинг мне нужен не для этого.
Плюс 9 триггеров, отслеживающих срок действия домена, смену регистратора и NS серверов. Один триггер срабатывает в том случае, если элемент перестаёт получать данные.
Установка шаблона
Скачать шаблон для Zabbix 5.0: zbx5_domain_check.zip
В качестве хоста я использую сам Zabbix сервер, привязываю шаблон к нему. На хосте (у меня Ubuntu) устанавливаю необходимый для работы скрипта пакет whois:
apt-get install whois
Копируем domain_check.conf в папку с пользовательскими переменными, у меня это /etc/zabbix/zabbix_agentd.conf.d/domain_check.conf. Не забываем про владельца и права:
chown root\: /etc/zabbix/zabbix_agentd.conf.d/domain_check.conf
chmod 644 /etc/zabbix/zabbix_agentd.conf.d/domain_check.conf
Копируем папку со скриптом в /etc/zabbix/scripts/. В ней у нас:
- /etc/zabbix/scripts/domain_check.sh
Не забываем про владельца и права:
chown -R root\: /etc/zabbix/scripts
chmod a+x /etc/zabbix/scripts/*
Перезапускаем агент:
service zabbix-agent restart
Можно проверить работу скрипта:
cd /etc/zabbix/scripts
./domain_check.sh "Проверка" "internet-lab.ru"
Импортируем шаблон zbx5_domain_check.xml.
В макросах шаблона можно отредактировать периодичность опроса данных:
- {$DOMAIN_DISCOVERY_PERIOD} — 6h. Периодичность автообнаружения доменов.
- {$DOMAIN_HISTORY_PERIOD} — 180d. Срок хранения истории. У меня не работает, берётся значение из Zabbix. Оставил, вдруг в какй-то из версий будет работать.
- {$DOMAIN_NODATA_PERIOD} — 1d. Когда поднимать панику, если данных домена нет.
- {$DOMAIN_REQUEST_PERIOD} — 6h. Периодичность опроса доменов.
- {$DOMAIN_TREND_PERIOD} — 180d. Срок хранения трендов.
Список проверяемых доменов
Находим шаблон в Configuration → Templates. Я назвал шаблон Domain check.
Переходим в items. Здесь всего один элемент данных под названием Domain list.
Кликаем по нему.
Выбираем вкладку Preprocessing.
Здесь один шаг препроцессинга JavaScript. Нажимаем на его параметр.
А вот и список доменов в формате JSON. Здесь его можно отредактировать и указать свой список. Формат списка:
var DomainList = {
"data": [
{
"{#NAME}": "Сисадминам internet-lab.ru", "{#DOMAIN}": "internet-lab.ru" }, { "{#NAME}": "Пиццерия setpizza.com", "{#DOMAIN}": "setpizza.com" }, { "{#NAME}": "Карты cardmoney.net", "{#DOMAIN}": "cardmoney.net" }, { "{#NAME}": "Банк masterbank.net", "{#DOMAIN}": "masterbank.net" }, { "{#NAME}": "Спорт sportmaster.info", "{#DOMAIN}": "sportmaster.info" } ] }; return JSON.stringify(DomainList)
Для каждого проверяемого домена указывается:
- {#NAME} — название. Любое название, применяется в именах триггеров. Обязательный параметр.
- {#DOMAIN} — домен. Можно в формате IDN, например, на кириллице. Обязательный параметр.
Примечание
Если приходится часто проверять данные SSL сертификатов, то можно вынести скрипт на отдельный хост.
Если домены не входят в один JSON, то можно сделать несколько шаблонов с разными именами и разным набором проверяемых SSL сертификатов.
Данные исключённых из списка доменов удаляются через 30 дней согласно правилам низкоуровневого обнаружения LLD.
Триггеры, отслеживающие срок действия домена, настроены на 30, 14, 7, 1, 0- дней.
Значение {$DOMAIN_NODATA_PERIOD} должно превышать {$DOMAIN_REQUEST_PERIOD}, иначе сработает триггер, отслеживающий отсутствие данных домена.
Источник:
https://internet-lab.ru/zabbix_domain_expiration3
Если вам понравилась статья, то ставьте 👍🏻 каналу.
Пишите комментарии, задавайте вопросы, подписывайтесь.