Коротко. blackbox_exporter — это отдельный сервис Prometheus, который проверяет эндпоинты «снаружи»: делает HTTP-запрос, TCP-коннект, DNS-резолв или ICMP-Ping инструмент и отдаёт метрики probe_success, probe_duration_seconds и probe_http_status_code. Prometheus периодически скрейпит экспортёр, передавая ему target через relabeling, а Alertmanager шлёт уведомления при падении. Это идеальный инструмент для проверки доступности без агента на целевом хосте.
Зачем нужен blackbox_exporter
Обычные экспортёры (node_exporter, cAdvisor) смотрят на систему «изнутри». Blackbox смотрит «снаружи» — как пользователь. Он отвечает на вопрос «отвечает ли мой сайт» без установки агента на целевую машину. Один экспортёр обслуживает множество таргетов — список приходит из Prometheus при каждом скрейпе.
- http_2xx — проверка HTTP/SSL/TLS проверку, кода ответа, редиректов, срока SSL;
- tcp_connect — доступность TCP-порта (БД, очередь, SMTP);
- dns — резолв записи и валидация ответа;
- icmp — пинг (требует прав на raw-сокеты).
Конфиг blackbox_exporter
Модули описываются в blackbox.yml. Каждый модуль — это пресет проверки: протокол, таймаут, ожидаемые коды, версия IP.
modules:
http_2xx:
prober: http
timeout: 5s
http:
valid_http_versions: ["HTTP/1.1", "HTTP/2.0"]
valid_status_codes: [200, 301, 302]
method: GET
follow_redirects: true
fail_if_ssl: false
fail_if_not_ssl: true
preferred_ip_protocol: "ip4"
tcp_connect:
prober: tcp
timeout: 5s
dns_example:
prober: dns
dns:
query_name: "example.com"
query_type: "A"
Джоб в prometheus.yml
Ключевой трюк — relabeling: адрес таргета подменяется на адрес экспортёра, а реальный URL передаётся в параметре target. Так один экспортёр проверяет десятки эндпоинтов.
scrape_configs:
- job_name: 'blackbox-http'
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- https://example.com
- https://api.example.com/health
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: blackbox-exporter:9115
Ключевые метрики
| Метрика | Что показывает | Пример алерта |
|---|---|---|
| probe_success | 1 = ок, 0 = провал | probe_success == 0 |
| probe_duration_seconds | Общее время пробы | > 2s в течение 5 мин |
| probe_http_status_code | HTTP-код ответа | >= 500 |
| probe_ssl_earliest_cert_expiry | Срок действия SSL | < 14 дней |
Правило алерта
Алерт на падение и на скорое истечение сертификата:
groups:
- name: blackbox
rules:
- alert: EndpointDown
expr: probe_success == 0
for: 3m
labels:
severity: critical
annotations:
summary: "Эндпоинт {{ $labels.instance }} недоступен"
- alert: SslCertExpiringSoon
expr: probe_ssl_earliest_cert_expiry - time() < 14 * 24 * 3600
for: 1h
labels:
severity: warning
annotations:
summary: "SSL на {{ $labels.instance }} истекает менее чем через 14 дней"
Параметр for: 3m критичен: без него любая одиночная сетевая ошибка превратится в инцидент и разбудит дежурного среди ночи зря.
Слепое пятно и внешний слой
blackbox_exporter запускается в вашей инфраструктуре. Если упадёт сеть или дата-центр, где он живёт, — упадёт и проверка, и вы не получите алерт о реальном падении сайта. Это классическое слепое пятно self-hosted мониторинга.
enterno.io закрывает его как внешний synthetic-мониторинг: проверки HTTP / SSL / ping / DNS идут из независимых регионов RU / EU / US. Бесплатно — 10 мониторов с интервалом 5 минут, на платных тарифах — 1 минута и 30 секунд. Это дополнение к Prometheus, а не замена: внутренний blackbox даёт детальную диагностику, внешний чекер — честный взгляд снаружи и резервный канал алертов в Telegram, Slack, email, webhook.
FAQ
Чем blackbox_exporter отличается от node_exporter?
node_exporter отдаёт метрики системы изнутри (CPU, память, диск). blackbox_exporter проверяет эндпоинты снаружи, эмулируя пользователя. Это разные слои мониторинга.
Можно ли мониторить API-эндпоинт с проверкой тела ответа?
Да, в модуле http можно задать fail_if_body_not_matches_regexp, чтобы алерт срабатывал, если в ответе нет ожидаемой строки.
Нужен ли отдельный экспортёр на каждый сайт?
Нет. Один blackbox_exporter обслуживает любое число таргетов — список приходит из prometheus.yml через relabeling.
Как добавить внешнюю проверку рядом с blackbox?
Поднимите внешний synthetic-монитор на enterno.io и тяните метрики через API. Получите взгляд снаружи без своей сетевой зависимости.
Хотите взгляд снаружи? Создайте монитор на enterno.io/monitors и подключите его к Prometheus/Grafana через API v4. Дальше по теме: мониторинг как код, health-check эндпоинты, мониторинг аптайма API.