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

Blackbox Exporter

Что это?

Blackbox exported для Prometheus позволяет реализовать мониторинг внешних сервисов по HTTP, DNS, TCP, ICMP

Запуск

Вот docker-compose:

version: '3.7'

services:
  blackbox-exporter:
    image: prom/blackbox-exporter:latest
    volumes:
      - ./blackbox.yml:/config/blackbox.yml
    command:
      - '--config.file=/config/blackbox.yml'
    restart: unless-stopped
    ports:
      - "9115:9115"

Сохраняем как docker-compose.yml и запускаем через docker-compose up -d.

Конфигурация

Почитать подробнее можно тут

blackbox.yml конфигурируется используя YAML формат. Вся суть конфигурации построена на "модулях" - это сущности которые в будущем будут использоваться для того чтобы делать запросы и обрабатывать их. Вот пример конфига с модулем для http запросов:

modules:
  http_2xx-general: # название модуля
    prober: http # тип проверки
    timeout: 10s # таймаут
    http: # тип проверки
      valid_status_codes: [200,302,301] # Валидные статус коды
      method: GET # http метод для проверки
      no_follow_redirects: false 
      fail_if_ssl: false # фейлится если ssl
      fail_if_not_ssl: false # фейлится если нет ssl
      preferred_ip_protocol: "ip4"
      tls_config: 
        insecure_skip_verify: false

После настройки конфига, можно заходить в prometheus.yml и настраивать задачу:

  - job_name: 'blackbox-http_2xx-general'
    scrape_interval: 30s
    metrics_path: /probe
    params:
      module: [http_2xx-general] # наш модуль из blackbox.yml
    static_configs:
      - targets:
        - https://kiriha.ru # что мониторим
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: blackbox-exporter:9115 # адрес сервиса blackbox

За счет переназначения меток в подразделе relabel_configs значение поле instance будет равно значению поля addess(а address — это те имена сайтов, которые указаны в параметре targets)

Перезапускаем prometheus, заходим в веб-морду и проверяем цели мониторинга.

Alertmanager

Для alertmanager я сделал следующие правила - они умеют проверять сайт на падение, замерять его скорость, проверять код ответа и уведомлять о необходимости обновить сертификат:

groups:
- name: sites
  rules:
  - alert: site_down
    expr: probe_success{job="blackbox-http_2xx-general"} == 0
    for: 3m
    labels:
      severity: critical
    annotations:
      summary: "Критично: Сайт '{{ $labels.instance }}' не доступен больше 3 минут"
      description: "Сайт {{ $labels.instance }} не доступен"

  - alert: site_is_very_slow
    expr: sum by (instance) (probe_http_duration_seconds) > 3
    for: 3m
    labels:
      severity: warning
    annotations:
      summary: "Внимание: Сайт '{{ $labels.instance }}' работает медленно (скорость ответа >3с) больше  минут"
      description: "Сайт {{ $labels.instance }} работает медленно: {{ humanize $value}}s"

  - alert: http_status_code_not_200-299
    expr: probe_http_status_code <= 199 OR probe_http_status_code >= 300
    for: 3m
    labels:
      severity: critical
    annotations:
      summary: "Критично: Cтатус код сайта '{{ $labels.instance }}' не в районе 200-299 больше  минут"
      description: "Статус код {{ $value }}"

  - alert: ssl_certificate_expire
    expr: probe_ssl_earliest_cert_expiry - time() < 86400 *30
    for: 10m
    labels:
      severity: warning
    annotations:
      summary: "Внимание: SSL сертификат для '{{ $labels.instance }}' скоро истечёт"
      description: "SSL сертификат истечет через 30 дней"

Grafana

Для Grafana я использую следующий дашборд. ID: 7587