Насколько мне известно, у Zabbix до сих пор нет стандартного шаблона для мониторинга за временем оплаты домена. Про крайней мере мне такой неизвестен. Если он уже есть и я его упустил, прошу подсказать.
В разное время я реализовывал различные способы решения этой задачи. Все они один за одним собирались в статью на сайте:
⇨
Мониторинг времени делегирования домена в zabbixВсе способы, описанные там, актуальны и работают. Основное их неудобство - реализация через скрипты, от чего уже давно хочется уйти, потому что неудобно ходить в консоль и править там список доменов. Можно собрать простенький пайплайн для этого, но это тоже перебор для такой простой задачи.
Я её однажды реализовал полностью в шаблоне без скриптов с помощью внешнего сервиса Whois API и его бесплатного тарифа. В принципе, вариант рабочий, но не всегда удобно регистрироваться во внешнем сервисе, получать от него токен и в целом зависеть от его доступности.
Прикинул, как можно сделать так же удобно, реализовав всю логику только в шаблоне Zabbix, в том числе в нём же в макросах вести список доменов, но при этом без внешнего сервиса. Решил для этого воспользоваться готовым экспортером для Prometheus. Он удобен тем, что отдаёт метрики по HTTP, а значит их можно забирать заббиксом напрямую через его HTTP Агент.
Рассказываю по шагам, как всё настроил.
1️⃣ Поднимаю на любой своей машине в докере
domain_exporter. Можно тут же на сервере Zabbix.
2️⃣ В шаблоне Zabbix создаю правило обнаружения с любым типом. Для примера взял тип
Внутренний Zabbix и ключ
zabbix[boottime]. Значения этого ключа нам не нужны, так как мы их сразу же будем преобразовывать.
3️⃣ В правиле обнаружения настроил предобработку типа
JavaScript с таким кодом:
var domains = '{$DOMAINS}'.split(/\s+/);var data = [];for (var i = 0; i < domains.length; i++) { data.push({ "{#DOMAIN}": domains[i] });}return JSON.stringify({ data: data });Берём список доменов из макроса
{$DOMAINS} и преобразуем их в строку:
{ "data": [ { "{#DOMAIN}": "serveradmin.ru" }, { "{#DOMAIN}": "example.com" } ]}Это формат, который принимают прототипы айтемов и триггеров.
4️⃣ Создал в шаблоне макросы:
◽️
{$DOMAINS} =
serveradmin.ru example.com # разделитель доменов - пробел;
◽️
{$PROM_URL} =
http://10.30.52.9:9222/probe # адрес экспортера;
◽️
{$WARN_DAYS} = 30 # порог в днях для триггера со статусом предупреждение;
◽️
{$CRIT_DAYS} = 5 # порог в днях для триггера со статусом критический.
5️⃣ Создал прототип айтема с типом
HTTP Agent. В качестве урла указал
{$PROM_URL}, а для передачи имени домена использовал поля запроса:
target ⇨ {#DOMAIN}То есть итоговый урл для получения данных будет такой:
http://10.30.52.9:9222/probe?target={#DOMAIN}. А если развернуть lld-макрос, то такой:
http://10.30.52.9:9222/probe?target=serveradmin.ru.
6️⃣ В прототипе айтема сделал предобработку:
Шаблон Prometheus ⇨ domain_expiry_daysТак как у нас данные поступают в формате Prometheus, с помощью этой предобработки мы сразу получаем данные о времени оплаты в формате целого числа.
7️⃣ В это же правило автообнаружения добавил 2 триггера.
На выходе мы имеем шаблон для мониторинга за оплатой доменов, где все настройки можно выполнять в веб интерфейсе Zabbix Server через макросы. Не нужны никакие скрипты на хостах. Единственное, что нужно сделать на сервере - запустить экспортер от Prometheus и убедиться, что с Zabbix Server есть к нему доступ.
Решение придумал и реализовал полностью сам. Не исследовал, что уже есть готового на эту тему. Мне видится такая реализация вполне удобной и функциональной. Если кто-то знает решение удобнее без скриптов, поделитесь информацией.
Шаблон публикую отдельно следующей публикацией. Проверял на версии Zabbix 7.0. Необходимо его импортировать на сервер и заполнить макросы либо в самом шаблоне, либо переопределить их после прикрепления к любому хосту.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#zabbix