Обычные Prometheus-экспортеры (node_exporter, postgres_exporter) отдают метрики изнутри процесса или хоста — то, что видно самому сервису о себе. blackbox_exporter смотрит снаружи: стучится в эндпоинт по HTTP/TCP/ICMP/DNS/gRPC и фиксирует, ответил ли он вообще и за сколько.
Список проверок (модулей) описывается в blackbox.yml — у каждого модуля свой prober, и указывается ровно одна секция с настройками под этот prober:
modules:
http_2xx:
prober: http
http:
preferred_ip_protocol: "ip4"
tcp_connect:
prober: tcp
icmp:
prober: icmp
dns_check:
prober: dns
dns:
query_name: "example.com"
query_type: "A"
Сам экспортер метрики не копит сам по себе — Prometheus опрашивает его HTTP-эндпоинт /probe, передавая реальный таргет и имя модуля параметрами:
scrape_configs:
- job_name: 'blackbox-http'
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- https://example.com
- https://api.internal.local/health
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 # адрес самого blackbox_exporter
Та же схема relabel, что и у snmp_exporter — без неё все пробы в Prometheus улетят под адресом самого экспортера, а не проверяемого таргета.
Главная метрика — probe_success (1/0, прошла ли проверка) и probe_duration_seconds (сколько заняла). Для HTTP-модуля можно сузить критерий успеха — например, считать пробу проваленной, если в ответе нет TLS или тело не совпадает с ожидаемым регэкспом:
http_2xx:
prober: http
http:
fail_if_not_ssl: true
fail_if_body_not_matches_regexp:
- "status.*ok"
Разница с обычными экспортерами принципиальная: node_exporter, упавший вместе с хостом, просто исчезает из метрик — Prometheus увидит отсутствие скрейпа. А blackbox_exporter, живущий отдельно (на другом хосте или хотя бы в другом процессе), продолжит отдавать probe_success=0 даже когда сам проверяемый сервис полностью недоступен — для алерта на “сайт лежит” это разница между “нет данных” и явным сигналом.
#prometheus #monitoring
