Серверное оборудование для бизнеса — надёжные решения для любых задач Подробнее →
Статья

Blackbox exporter: мониторим внешние сервисы

Node Exporter отлично показывает состояние сервера изнутри. Но как узнать, что ваш сайт доступен снаружи, SSL-сертификат не истёк, а DNS правильно разрезолвается? Для этого существует Blackbox Exporter — инструмент Prometheus для проверки сервисов методом black-box тестирования.

Что умеет Blackbox Exporter

Blackbox Exporter поддерживает несколько типов проб:

  • HTTP/HTTPS — проверка доступности, статус-кода, содержимого ответа, времени отклика
  • TCP — проверка доступности TCP-порта
  • ICMP — ping-мониторинг доступности хостов
  • DNS — проверка корректности DNS-резолвинга

Конфигурация модулей

Файл blackbox.yml описывает модули — шаблоны проверок:

modules:
  http_2xx:
    prober: http
    timeout: 10s
    http:
      valid_http_versions: ["HTTP/1.1", "HTTP/2.0"]
      valid_status_codes: [200, 201]
      method: GET
      follow_redirects: true
      preferred_ip_protocol: "ip4"
      tls_config:
        insecure_skip_verify: false

  http_post_json:
    prober: http
    timeout: 10s
    http:
      method: POST
      headers:
        Content-Type: application/json
      body: '{"ping": "pong"}'
      valid_status_codes: [200]

  tcp_connect:
    prober: tcp
    timeout: 5s

  icmp_ping:
    prober: icmp
    timeout: 5s
    icmp:
      preferred_ip_protocol: "ip4"

  dns_check:
    prober: dns
    timeout: 5s
    dns:
      query_name: "example.com"
      query_type: "A"
      valid_rcodes: ["NOERROR"]

Интеграция с Prometheus

В prometheus.yml добавляем job с relabeling:

scrape_configs:
  - job_name: 'blackbox'
    metrics_path: /probe
    params:
      module: [http_2xx]
    static_configs:
      - targets:
          - https://example.com
          - https://api.example.com/health
          - https://admin.example.com
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: blackbox-exporter:9115

  - job_name: 'blackbox_tcp'
    metrics_path: /probe
    params:
      module: [tcp_connect]
    static_configs:
      - targets:
          - postgres-server:5432
          - redis-server:6379
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: blackbox-exporter:9115

Алерт на истечение SSL-сертификата

Одна из самых полезных проверок — мониторинг срока действия SSL:

groups:
  - name: ssl_certificates
    rules:
      - alert: SSLCertificateExpiringSoon
        expr: probe_ssl_earliest_cert_expiry - time() < 86400 * 30
        for: 1h
        labels:
          severity: warning
        annotations:
          summary: "SSL сертификат истекает через {{ $value | humanizeDuration }}"
          description: "Сертификат для {{ $labels.instance }} нужно обновить"

      - alert: SSLCertificateExpired
        expr: probe_ssl_earliest_cert_expiry - time() < 0
        for: 0m
        labels:
          severity: critical
        annotations:
          summary: "SSL сертификат истёк для {{ $labels.instance }}"

Grafana дашборд

Ключевые метрики для дашборда:

  • probe_success — 1 если проба успешна, 0 если нет (главный индикатор)
  • probe_duration_seconds — полное время выполнения пробы
  • probe_http_status_code — HTTP статус-код ответа
  • probe_ssl_earliest_cert_expiry — timestamp истечения сертификата
  • probe_dns_lookup_time_seconds — время DNS-резолвинга

Хороший дашборд строится вокруг probe_success с drill-down в probe_duration_seconds по фазам: DNS lookup, TCP connect, TLS handshake, transfer.

Готовый дашборд с ID 7587 на Grafana.com покрывает большинство сценариев и подходит как отправная точка для кастомизации.

Blackbox Exporter — обязательный компонент зрелой системы мониторинга. Он закрывает слепую зону между внутренними метриками сервера и реальным пользовательским опытом.

2 Ответа

  1. Алерт на SSL очень выручает — один раз пропустил истечение сертификата на prod и с тех пор Blackbox обязателен в каждом проекте. Дополнительно мониторю ещё и intermediate сертификаты в цепочке.

  1. Relabeling в Prometheus для blackbox всегда вызывает вопросы у новичков — хорошо, что здесь подробно расписан пример. Это нестандартный паттерн и с первого раза редко кто понимает, зачем он нужен.