В этой статье мы рассмотрим, как настроить отслеживания срока действия (делегирования /регистрации) ваших доменов в Zabbix. Это позволит вам не пропустить дату продления аренды и окончания делегирования ваших доменных имен.
Если в течении 30 дней после окончания срока регистрации домена, предыдущий владелец не оплачивает его, домен освобождается (разделегируется). Рассмотрим простой скрипт и шаблон для Zabbix, которые позволят вот мониторить время окончания регистрации домена.
Итак, предполагаем, что у вас уже установлен Zabbix сервер. Для получения данных о сроках делегирования доменов мы будем использовать небольшой bash скрипт. Для его работы на хосте должна быть установлена утилита whois. Установите ее:
- CentOS/RHEL/Rocky Linux:
$ sudo dnf install whois -y
- Ubuntu/Debian:
$ sudo apt install whois -y
Проверьте в конфигурационном файле zabbix-server.conf путь к каталогу для внешних скриптов. По умодчанию это (раскоментируйте сттроку):
ExternalScripts=/usr/lib/zabbix/externalscripts
Создайте в этом каталоге файл /usr/lib/zabbix/externalscripts/domain_expiration.sh со следующим кодом:
#!/bin/bash
DOMAIN="$1"
exdate=`whois $DOMAIN | grep -E 'paid|Expire|Expiry' | grep -o -E '[0-9]{4}.[0-9]{2}.[0-9]{2}|[0-9]{2}/[0-9]{2}/[0-9]{4}'`
expire=$((`date -d "$exdate" '+%s'`))
today=$((`date '+%s'`))
leftsec=$(($expire - $today))
leftdays=$(($leftsec/86400))
echo $leftdays
Разрешите запуск файла:
$ sudo chmod +x /usr/lib/zabbix/externalscripts/domain_expiration.sh
Проверьте, что скрипт работает корректно. Укажите в качестве параметра имя домена, для которого вы хотите получить количество дней, оставшихся до окончания делегирования.
$ /usr/lib/zabbix/externalscripts/domain_expiration.sh winitpro.ru
В моем примере скрипт вернул, что до окончания срока действия домена осталось 39 дней.
Теперь с помощью параметра UserParameter нужно разрешить запуск этого пользовательского скрипта агентом Zabbix.
$ sudo mcedit /etc/zabbix/zabbix_agentd.conf
Добавьте строку:
UserParameter=domainexpire[*],/usr/lib/zabbix/externalscripts/domain_expiration.sh $1
Такой параметр позволит выполнить определенный внешний скрипт через агента Zabbix. Для вызова этого скрипта из Zabbix нужно исопльзовать параметр domainexpire.
Перезапустите агента:
$ sudo service zabbix-agent restart
Проверьте, что агент zabbix может получить данные через новый параметр. Для тестирования агента используется утилита zabbix-get:
$ sudo apt install zabbix-get
$ zabbix_get -s 127.0.0.1 -p 10050 -k domainexpire[winitpro.ru]
Если вы все настроили правильно, команда должна вернуть количество дней до окончания срока регистрации домена.
Теперь добавьте новый шаблон CheckDomainExpiration для мониторинга сроков делегирования доменов в Zabbix.
На вкладке items добавьте параметр
- Имя: Cрок регистрации домена {$DOMAINNAME}
- Type: Zabbix Agent
- Key:
domainexpire[{$DOMAINNAME}]
- Type of information: Numeric (unsigned)
- Update Interval: 1d
- History: 90d
- Trenfd: 365d
Теперь добавьте новый триггер
- Name: Срок регистрации домена {$DOMAINNAME} заканчивается
- Expression:
last(/CheckDomainExpiration/domainexpire[{$DOMAINNAME}])<39
- Severity: High
Такой триггер буде срабатывать, если до окончания срока регистрации домена осталось менее 39 дней.
Можно сразу добавить параметр триггера для восстановления:
Recovery expression:
last(/CheckDomainExpiration/domainexpire[{$DOMAINNAME}])>=40
Теперь добавьте в Zabbix новый хост для вашего доменного именис с типом интерфейса Agent.
На вкладке Macros нужно указать имя домена, срок регистрации которого вы хотите отслеживать:
- Macro:
{$DOMAINNAME}
- Value:
winitpro.ru
Назначьте хосту ранее созданный шаблон CheckDomainExpiration.
В нашем шаблоне срок регистрации домена проверяется раз в сутки. Чтобы получить данные из whois немедленно, найдите ваш параметр на вкладке хоста и нажмите Execute Now.
Теперь проверьте Latest Data. Zabbix показывает, что срок регистрации вашего домена истекает через 39 дней.
Сработал триггер, который отправил уведомление на email или в telegram и показал проблему на дашборде. По аналогии добавьте через Hosts все домены, срок регистрации которых нужно отслеживать.
Как вариант можно использовать авто обнаружение и передавать список сайта через прасинг заданного MACROS хоста, например как используется здесь https://cdnnow.ru/blog/zbxdiscojs/
Шаблон для *.net доменов не работает.
Так заработало:
grep -E 'paid|Expires|Expiry'
Из-за различий в registry и registrar лучше использовать grep -E ‘paid|Expire|Expiry’ иначе возвращаются две даты Registry Expiry Date и Registrar Registration Expiration Date и скрип выдаёт ошибку. А так всё корректно и для .ru и .рф, и .com и .net. Дальше не проверял ибо нету сайтов.
Принято! Внес в пост.
Спасибо огромное за ваши статьи!
эх, с .kz не работает 🙁
для kg длмена (понимаю что костыль, я не силен в скриптах)
;;
kg)
WHOIS=`whois $DOMAIN`
DATE=`echo «$WHOIS» | grep «Record expires on:» | sed ‘s/Record expires on: //’ | xargs | sed -e ‘s/[()]//g’`
if [[ $DATE != «» ]]; then
REGISTRAR=`echo «$WHOIS» | grep -m 1 «PID: H» | sed ‘s/PID://’ | xargs`
CDATE=`echo «$WHOIS» | grep -m 1 «Record created:» | sed ‘s/Record created: //’ | xargs | sed -e ‘s/[()]//g’`
NSERVER=`echo «$WHOIS» | grep -m 1 -A 5 «Name servers in the listed order:*» | sed ‘s/Name servers in the listed order://’ | xargs`
fi
с доменами .id тоже не работает, возвращает ноль.
При добовлении триггера ошибка: «Invalid parameter «/1/expression»: incorrect trigger expression starting from «last(/CheckDomainExpiration/domainexpire[{$DOMAINNAME}])<39"."
Делаю все по инструкции как на сайте, Zabbix 5, Centos 8.
exdate=`whois $DOMAIN | grep -E -i ‘paid|Expire|Expiry’ | grep -o -E ‘[0-9]{4}.[0-9]{2}.[0-9]{2}|[0-9]{2}/[0-9]{2}/[0-9]{4}’`
Я бы добавил параметр -i к grep -E -i, чтобы не учитывать регистр (большая\маленькая буква).
если whois возвращает сразу paid-till: 2024.02.08 и Registry Expiry Date: 2024-02-08T07:23:15Z то при проверке скрипта возвращает ошибку date: invalid date ‘2024-02-08\n2024.02.08’ -19734
Зона .ru сегодня сломалась. Не чекается, 0 выдает.
Кто-нибудь знает как поправить?
Делал все по инструкции, но на этапе проверки скрипта —
/usr/lib/zabbix/externalscripts/domain_expiration.sh xxx.ru
Timeout.
0
Попробуйте руками в консоли выполнить команду:
$ whois xxx.ru
Key: domainexpire[{$DOMAINNAME}]
Type of information: Numeric (unsigned)
нужно не Unsigned, а Float, потому как иначе перестает работать про полной просрочке домена (число дней уходит в минусовые значения)
Поломался скрипт. Шаблон переподключал.
Пишет неверная дата «2024-12-12\n2024-12-12»
-19906