Перейти к содержанию

Blackbox Exporter: проверять сайт и срок TLS-сертификата

Мониторинг · HTTP · 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, которым пользуется посетитель, а не только внутренний порт приложения.

Источник

Как применить у себя

  1. Проверить конфигурацию и правила через promtool check config и promtool check rules с путями к файлам.
  2. На тестовой цели вернуть 500; затем сделать тестовый экспортер недоступным. Получить оба алерта.
  3. Проверить правило срока сертификата временным порогом выше его оставшегося срока в тестовом наборе правил.
  4. Убедиться в доставке и снятии алертов, затем отметить «Изучено».