Короткий ответ
Истечение регистрации домена и истечение TLS-сертификата — разные часы. Cert на zabbix.example может быть валиден, а домен у регистратора уже в redemption — тогда DNS рано или поздно умрёт. Нужен item: дата expiry из RDAP (предпочтительно) или WHOIS, число дней, триггеры 30/14/7. Интервал опроса сутки, не 60s: WHOIS rate-limit. TLS: сертификаты. «Сайт не открывается»: доступность.
Не путайте AD-домен contoso внутри LAN со сроком публичного zabbix.example. Эта статья — про регистрацию DNS-имени в публичной зоне.
Симптомы и как отличить
Типичная картина:
- браузер NXDOMAIN / «домен продаётся», cert item зелёный (кэш/ещё не смотрят);
- автопродление у регистратора выключено, почта registrar в спаме;
- скрипт whois парсит английский
Expiry Date:, регистратор сменил формат — item unsupported; - внутренний DNS резолвит split-horizon, снаружи домен мёртв.
Отличия:
| Что упало | Контроль |
|---|---|
| notAfter cert | TLS item |
| Registrar expiry | этот материал |
| HTTP 502 | frontend/сервис |
| AD password expiry | не эта статья |
Возможные причины
- Нет item — «домены продлевает бухгалтер».
- Только ICMP/HTTP: домен резолвится до дня X.
- WHOIS парсер сломался о новый формат.
- RDAP URL не тот TLD.
- Порог 1 день, выходные.
- Список доменов не полный (старый лендинг, MX-домен, autodiscover).
- Редко: privacy WHOIS скрыл дату — нужен RDAP/кабинет API регистратора.
Диагностика
1. Живая дата (ручная сверка)
RDAP (пример для многих gTLD):
curl -sS 'https://rdap.org/domain/zabbix.example' | headПоле expiry в JSON зависит от реестра (events type expiration). WHOIS:
whois zabbix.example | grep -iE 'expir|paid-till|renew'Если zabbix.example плейсхолдер в статье — подставьте боевой FQDN. Сверьте с кабинетом регистратора: это эталон, парсер обязан совпасть ±1 день.
2. Есть ли item в Zabbix
Latest data: ключи domain.expiry, HTTP agent к RDAP, script. Пусто — проектируйте item, не порог.
3. Почему item мёртв
HTTP 429 — rate limit. JSONPath не матчится — unsupported. nodata — скрипт cron не зовёт zabbix_sender. Триггер: не срабатывает.
4. Список доменов
Снимите с DNS/MX/сайтов, не из памяти. Внутренние имена AD не кладите в публичный whois-опрос.
Решение
Сценарий A. HTTP agent + RDAP
Item на 10.0.20.50 (не обязательно на WS-042): HTTP agent GET RDAP, preprocessing JSONPath к expiration, dependent — дни = (expiry_ts - now())/86400.
Интервал 1d. Timeout разумный. Триггеры:
last(/zabbix.example/domain.days)<30
last(/zabbix.example/domain.days)<14Host name для item может быть отдельный «domains» инвентарный хост, не обязательно веб-сервер.
Сценарий B. Внешний скрипт + sender
Cron раз в сутки на jump host:
# псевдокод: получить days, затем
zabbix_sender -z 10.0.20.50 -s 'domains' -k 'domain.days[zabbix.example]' -o 42Trapper + nodata(...,3d) если cron умер. Не whois в UserParameter агента каждые 5m.
Сценарий C. WHOIS как запас
Парсер хрупкий. Если только whois — фиксируйте формат вашего TLD (.ru paid-till ≠ .com Registry Expiry Date). Тест после смены регистратора обязателен.
Сценарий D. Privacy скрыл дату
API регистратора с ключом в vault, не в item URL plaintext. Либо ручной календарь + напоминание, но тогда Zabbix хотя бы nodata на «скрипт не смог».
Сценарий E. Карта алертов
Disaster <7 дней — SMS. Не смешивать с Warning CPU. Зависимость: если весь DNS рекурсор мёртв, не прячьте expiry (expiry не зависит от рекурсора).
Связка TLS: оба алерта могут быть. Продлили cert, забыли домен — классика.
Как проверить, что проблема устранена
Latest data days совпадает с кабинетом. На тестовом домене-стенде с близкой датой (или временно заниженный порог на копии item) — PROBLEM. 429 нет в логах за неделю. Nodata на trapper проверяется остановкой cron на стенде. После продления days вырос, OK.
Не ждите реального истечения прод-домена как «тест».
Если не помогло
- RDAP.org редирект/не тот сервер для ccTLD — используйте RDAP реестра страны.
- Item ходит через прокси, который кэширует JSON неделями — получите просроченный «ещё 200 дней».
- Триггер сравнивает строку даты как число без парса.
- Мониторите
www.а истекает apex, или наоборот.
Профилактика
- Реестр доменов: владелец, регистратор, автопродление, item.
- Новый публичный сервис в том же change, что DNS.
- Алерт 30 дней, календарь финансов.
- Не держать единственный контакт регистратора на личной почте админа.
Инвентарь доменов ведите так же, как инвентарь VM. Забытый лендинг и отдельное MX-имя падают независимо от «основного сайта». В список: apex, www, mail, vpn, autodiscover, старые редиректы, которые всё ещё в письмах клиентов.
Автопродление у регистратора не отменяет item. Карта протухает, 3-D Secure не проходит, имя уходит в redemption. Zabbix кричит за 30 дней, финансы успевают оплатить. Контакт registrar не должен быть единственной личной почтой админа.
Не склеивайте TLS и домен в один trigger «или-или». Разный runbook: перевыпуск nginx против оплаты счёта. Иначе дежурный пойдёт обновлять сертификат, когда нужна квитанция.
Раз в квартал сверяйте кабинет регистратора с Latest data days для zabbix.example и остальных имён из инвентаря. Расхождение больше суток — сломан парсер RDAP, а не «календарь врёт». Не поднимайте частоту whois, почините JSONPath. Порог 30/14/7 дней оставьте, даже если автопродление включено.
FAQ
Домен AD corp.local?
Не whois. Срок паролей/сертификатов AD — другие item. Не слать corp.local в RDAP.
Достаточно ли HTTP check сайта?
Нет. Сайт может жить на другом имени. Доменное имя — юридический объект.
Можно ли 5m интервал «надёжнее»?
Нет, хуже: ban. Суток достаточно: expiry не прыгает почасово.
WHOIS GDPR пустой
RDAP/API. Не увеличивайте DebugLevel агента.
Несколько TLD одной компании
Отдельные item, один хост-инвентарь domains. Макрос порога одинаковый.
Связь с Windows Server?
Публичный AD FS / внешний доступ на zabbix.example упадёт вместе с доменом. Внутренний DC от публичного expiry не умрёт. Мониторьте оба мира отдельно: Windows.