prometheus – blackbox-exporter для моніторингу endpoints

Опис

Передісторія. Почав займатися моніторингом на новому проєкті й в першу чергу потрібно було перевіряти статус продуктових сервісів на доступність. Через те, що в ролі основного моніторингу виступає 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, завантажити можемо тут

Посилання

Click to rate this post!
[Total: 5 Average: 5]