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с) больше 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 больше 3х минут"
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