Перейти к основному содержанию
 

Zabbix — срок действия домена 3

Zabbix

Продолжаю работу по переводу шаблонов на пятую версию Zabbix. Сегодня дописал третью версию шаблона для мониторинга срока действия доменов. Мониторим в Linux.

Предыдущие версии можно найти здесь:

Zabbix — срок действия домена 2

Zabbix — срок действия домена

Новую версия полностью переработал. Получилось следующее:

  • Существенно уменьшено количество файлов. Для работы шаблона достаточно самого шаблона, одного скрипта и одного конфигурационного файла с пользовательскими переменными.
  • Механизм 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 сервера
  • Дата создания домена
  • Дата истечения срока оплаты домена
  • Количество дней до истечения срока оплаты домена

Сознательно не стал собирать контактные данные владельца домена, потому как мониторинг мне нужен не для этого.

domain

Плюс 9 триггеров, отслеживающих срок действия домена, смену регистратора и NS серверов. Один триггер срабатывает в том случае, если элемент перестаёт получать данные.

domain

Установка шаблона

Скачать шаблон для 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"

domain

Импортируем шаблон 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. Срок хранения трендов.

domain

Список проверяемых доменов

Находим шаблон в Configuration → Templates. Я назвал шаблон Domain check.

domain

Переходим в items. Здесь всего один элемент данных под названием Domain list.

domain

Кликаем по нему.

domain

Выбираем вкладку Preprocessing.

domain

Здесь один шаг препроцессинга JavaScript. Нажимаем на его параметр.

domain

А вот и список доменов в формате 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, например, на кириллице. Обязательный параметр.

Примечание

Если приходится часто проверять срок действия доменов, то можно вынести скрипт на отдельный хост. То же самое, если доменов очень много.

Если домены не входят в один JSON, то можно сделать несколько шаблонов с разными именами и разным набором проверяемых доменов.

Данные исключённых из списка доменов удаляются через 30 дней согласно правилам низкоуровневого обнаружения LLD.

Триггеры, отслеживающие срок действия домена, настроены на 30, 14, 7, 1, 0- дней.

Значение {$DOMAIN_NODATA_PERIOD} должно превышать {$DOMAIN_REQUEST_PERIOD}, иначе сработает триггер, отслеживающий отсутствие данных домена.

Update

Версия 4. Иногда whois данные не отдаёт, в этом случае элемент данных domain.check.days["internet-lab.ru"] сбрасывается в 0 и ложно срабатывает триггер "Domain internet-lab.ru expires today". Теперь триггер проверяет сумму последних двух значений.

Версия 5. В четвёртой версии устранено ложное срабатывание триггера "Domain internet-lab.ru expires today", но стали срабатывать другие зависимые. Исправил.

Теги