Blackbox Exporter: проверять сайт и срок TLS-сертификата
Добавлено 2026-10-11. Нужны Prometheus, Blackbox Exporter и настроенная доставка алертов.
Проблема
Контейнер работает, но домен не открывается из-за DNS, Nginx или истёкшего сертификата. Внутренняя проверка контейнера не проходит весь путь до публичного сайта.
Решение
Проверять HTTPS-адрес через Blackbox Exporter. Следить одновременно за результатом пробы, доступностью самого экспортера и сроком сертификата. Внешняя точка проверки нужна отдельно: проба с того же VPS не подтверждает доступность из других сетей.
Пример
blackbox.yml — HTTP 200, валидный TLS и характерный текст сайта:
modules:
devops_kb_https:
prober: http
timeout: 5s
http:
valid_status_codes: [200]
fail_if_not_ssl: true
fail_if_body_not_matches_regexp: ['devops-kb']
tls_config:
insecure_skip_verify: false
Запуск для проверки на хосте:
blackbox_exporter --config.file=blackbox.yml \
--web.listen-address=127.0.0.1:9115
Добавить к существующим scrape_configs Prometheus. Здесь Prometheus и экспортер работают на одном хосте. Если Prometheus в контейнере, указать доступный ему адрес экспортера: 127.0.0.1 внутри контейнера означает сам контейнер.
scrape_configs:
- job_name: blackbox-devops-kb
scrape_interval: 30s
scrape_timeout: 10s
metrics_path: /probe
params:
module: [devops_kb_https]
static_configs:
- targets: ['https://devops-kb.strangled.net']
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 127.0.0.1:9115
Файл правил, подключаемый через rule_files Prometheus:
groups:
- name: devops-kb-external
rules:
- alert: DevopsKbProbeFailed
expr: probe_success{job="blackbox-devops-kb"} == 0
for: 2m
labels:
severity: critical
annotations:
summary: 'Проверка devops-kb не проходит'
- alert: DevopsKbProbeUnavailable
expr: up{job="blackbox-devops-kb"} == 0 or absent(up{job="blackbox-devops-kb"})
for: 2m
labels:
severity: critical
annotations:
summary: 'Prometheus не получает результаты проверки'
- alert: DevopsKbCertificateExpiring
expr: (probe_ssl_earliest_cert_expiry{job="blackbox-devops-kb"} - time()) / 86400 < 14
for: 10m
labels:
severity: warning
annotations:
summary: 'До истечения сертификата devops-kb меньше 14 дней'
Эти правила не обнаружат остановку самого Prometheus. Его доступность и канал уведомлений проверять независимым монитором. Для домена с A и AAAA отдельно проверять обе семьи адресов: одна успешная проба не доказывает работоспособность всех IP.
Когда применять
После переноса сайта за Nginx и получения сертификата. Проверять URL, которым пользуется посетитель, а не только внутренний порт приложения.
Источник
Как применить у себя
- Проверить конфигурацию и правила через
promtool check configиpromtool check rulesс путями к файлам. - На тестовой цели вернуть 500; затем сделать тестовый экспортер недоступным. Получить оба алерта.
- Проверить правило срока сертификата временным порогом выше его оставшегося срока в тестовом наборе правил.
- Убедиться в доставке и снятии алертов, затем отметить «Изучено».