Опис
Передісторія. Почав займатися моніторингом на новому проєкті й в першу чергу потрібно було перевіряти статус продуктових сервісів на доступність. Через те, що в ролі основного моніторингу виступає prometheus то для таких цілей підійде blackbox eporter.
blackbox-exporter – прометеус експортер який дозволяє перевіряти кінцеві точки (ендпоінти) по HTTP, HTTPS, DNS, TCP, ICMP та gRPC. Доволі зрозумілий та простий в налаштуванні, написаний на go як і більшість офіційних експортерів від prom. Доступний він по 9115 порту.
Для реалізації знадобиться:
- налаштований prometheus;
- список ендпоінтів;
- blackbox exporteer;
Що будемо відстежувати:
- доступність;
- код відповіді;
- мати уяву про кількість probe та вдалих та не вдалих probe перевірок;
- перевірити термін дії сертифікатів (для загальної інформативності)
Послідовність виконання:
- створимо необхідні директорії для docker-compose файлу з експортерами для prom;
- створимо загальний файл з назвою prometheus-exporters.yml в якому будемо описувати контейнеризовані експортери;
- додамо конфігураційний файл blackbox.yml;
- внесемо зміни в конфігурацій файд prometheus /etc/prometheus/prometheus.yml
- візьмемо за основу борду з grafana marketplace, а саме https://grafana.com/grafana/dashboards/13659 яку трішки модифікуємо;
Переходимо до практики.
prom-exporters-compose file
Для початку створимо файл prom-exporters-compose.yml. Це буде загальний файл для всіх різних експортерів які розташовуються на сервері(yace-exporter, cost-exporter, etc). Описуємо наш blackbox:
version: '3.9' networks: prometheus: services: blackbox-exporter: image: prom/blackbox-exporter:v0.20.0 container_name: blackbox networks: - prometheus ports: - 9115:9115 volumes: - /etc/prometheus/blackbox.yaml:/config/blackbox.yml command: '--config.file=/config/blackbox.yml'
blackbox config
В директорії /etc/prometheus додаємо файл blackbox.yml з базовими налаштуваннями, яких нам поки що вистачить. Повний приклад параметрів дивимось тут:
modules: icmp: prober: icmp timeout: 5s http_200_module: prober: http timeout: 5s http: preferred_ip_protocol: ip4 valid_http_versions: ["HTTP/1.1", "HTTP/2.0"] valid_status_codes: [200] method: GET no_follow_redirects: false
prometheus config
Редагуємо файл /etc/prometheus/prometheus.yml, додавши в нього – job_name: ‘blackbox’ та список ендпоінтів які потрібно відстежувати:
- job_name: 'blackbox' metrics_path: /probe params: module: - http_200_module - icmp static_configs: - targets: - https://geekops.guru - https://************.net/login - https://********.com relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: blackbox-exporter:9115
Коли всі файли створено, запускаємо для початку сам експортер:
docker-compose -f prometheus-exporters.yml up
перевіримо метрики:
curl localhost:9115 <html> <head><title>Blackbox Exporter</title></head> <body> <h1>Blackbox Exporter</h1> <p><a href="probe?target=prometheus.io&module=http_2xx">Probe prometheus.io for http_2xx</a></p> <p><a href="probe?target=prometheus.io&module=http_2xx&debug=true">Debug probe prometheus.io for http_2xx</a></p> <p><a href="metrics">Metrics</a></p> <p><a href="config">Configuration</a></p> ....
Перед перезапуском prometheus потрібно перевірити конфігураційний файл на синтаксис:
promtool check config /etc/prometheus/prometheus.yml Checking /etc/prometheus/prometheus.yml SUCCESS: /etc/prometheus/prometheus.yml is valid prometheus config file syntax
перезапускаємо:
docker restart prometheus
Після чого переходимо в веб prometheus, обираємо Status –> Targets, де побачимо список наших endpoints:
Переходимо до налаштування dashboard в grafana.
Grafana Dashboard
Не буду описувати детально як що змінювалося, залишу знімок з екрана та посилання на сам файл з dashboard, завантажити можемо тут
Посилання
- https://prometheus.io/docs/instrumenting/exporters
- https://github.com/prometheus/blackbox_exporter
- https://grafana.com/grafana/dashboards/13659