Налаштування конфігурацій зі стеком Prometheus (Частина 2)

У цій частині ми розглянемо основні кроки налаштування Prometheus та його інтеграцію з моніторинговим стеком. Ми охопимо основні конфігураційні файли, зокрема prometheus.yml, prometheus-rules.yml та alertmanager.yml, а також API Prometheus і як використовувати його для керування та розширення вашої моніторингової системи.

Огляд конфігурації Prometheus

Prometheus — це потужний набір інструментів для моніторингу та сповіщення з відкритим кодом. Для забезпечення правильного збору та обробки метрик вашим екземпляром Prometheus потрібно налаштувати кілька критичних файлів. Ці файли є основою вашої моніторингової системи, і розуміння їх структури є необхідним для кастомізації Prometheus під ваші потреби.

Структура файлів проекту

Структура проекту включає каталог config з основними конфігураційними файлами для Prometheus та Alertmanager, файл docker-compose.yml для оркестрації сервісів та файл prometheus_api для увімкнення адміністративного API.

.  
├── config  
│ ├── alertmanager.yml  
│ ├── prometheus-rules.yml  
│ └── prometheus.yml  
├── docker-compose.yml  
└── prometheus_api  

1 directory, 6 files

Давайте розглянемо, що і для чого ці файли потрібні:

  1. prometheus.yml: Основний конфігураційний файл

Файл prometheus.yml — це місце, де починається конфігурація Prometheus. Цей YAML файл визначає, як Prometheus взаємодіє з вашими моніторинговими сервісами і звідки він збирає метрики. Нижче наведено базовий приклад конфігурації:

global:  
 scrape_interval: 20s  
 external_labels:  
 monitor: 'prometheus-monitoring'  

rule_files:  
 - '/config/prometheus-rules.yml'  

scrape_configs:  
 - job_name: 'node-exporter'  
 scrape_interval: 20s  
 static_configs:  
 - targets: ['node-exporter:9100']  
 metrics_path: "/metrics"  

 - job_name: 'cadvisor'  
 scrape_interval: 20s  
 static_configs:  
 - targets: ['cadvisor:8080']  

alerting:  
 alertmanagers:  
 - static_configs:  
 - targets:  
 - 'alertmanager:9093'
  • scrape_interval: Визначає, як часто Prometheus збирає метрики з цільових сервісів. В цьому конфігураційному файлі встановлено 20 секунд.
  • external_labels: Додає користувацьку мітку (monitor: 'prometheus-monitoring'), щоб допомогти ідентифікувати цей екземпляр Prometheus.
  • rule_files: Визначає місце розташування правил для сповіщень (/config/prometheus-rules.yml).
  • scrape_configs: Визначає цільові сервіси для збору метрик:
    • node-exporter-zite: Збирає системні метрики з node-exporter на порту 9100.
    • cadvisor: Збирає метрики контейнерів з cadvisor на порту 8080.
  • alerting: Налаштовує Prometheus на відправку сповіщень до Alertmanager на alertmanager:9093.

2. prometheus-rules.yml: Визначення правил сповіщень

Щоб Prometheus не лише збирав дані, але й активно моніторив і сповіщав, вам потрібно налаштувати правила сповіщень. Ці правила вказують умови, за яких Prometheus повинен запускати сповіщення.

Ось приклад базового правила сповіщень у файлі prometheus-rules.yml:

groups:  
- name: HighDiskUsage  
 rules:  
 - alert: HighDiskUsage  
 expr: ((node_filesystem_size_bytes{instance="13.232.195.85:9100", fstype!="", mountpoint="/"} - node_filesystem_avail_bytes{instance="13.232.195.85:9100", fstype!="", mountpoint="/"}) / node_filesystem_size_bytes{instance="13.232.195.85:9100", fstype!="", mountpoint="/"} * 100) > 80  
 for: 30s  
 labels:  
 severity: warning  
 type: hdd  
 annotations:  
 identifier: '{{ $labels.instance }}: {{ $labels.mountpoint }}'  
 description: 'Використання диска для {{ $labels.mountpoint }} на сервері {{ $labels.instance }} перевищує 80% ({{ $value | printf "%.2f" }}%).'
  • groups: Визначає набір правил для сповіщень. У цьому випадку група називається HighDiskUsage.
  • alert: Визначає назву сповіщення, яке — HighDiskUsage.
  • expr: Вираз, який ініціює сповіщення. Він обчислює використання диска для кореневої файлової системи (/) на екземплярі 13.232.195.85.
    Якщо використання перевищує 80% протягом 30 секунд, спрацьовує сповіщення.
  • for: Встановлює тривалість (30 секунд), яку має триматися умова, перш ніж спрацює сповіщення.
  • labels: Додає додаткову інформацію, наприклад:
  • severity: Встановлює рівень серйозності сповіщення на warning.
  • type: Позначає тип сповіщення як hdd (жорсткий диск).
  • annotations: Надає додаткові деталі про сповіщення, такі як екземпляр і точка монтування, що його викликали, а також опис з відсотком використання диска.

3. alertmanager.yml: Налаштування сповіщень

Щоб бути сповіщеним про сповіщення, які генерує Prometheus, потрібно налаштувати Alertmanager. Файл alertmanager.yml містить налаштування для обробки сповіщень, зокрема маршрутизацію їх до різних каналів сповіщень (електронна пошта, Slack тощо).

Нижче наведено базовий приклад конфігурації для alertmanager.yml:

global:  
 slack_api_url: 'enter your Slack_API_URL'  
 resolve_timeout: 1m  

route:  
 receiver: 'slack-disk-usage'  
 group_by: [instance, severity]  
 group_interval: 2m  
 routes:  
 - receiver: 'slack-disk-usage'  
 match:  
 alertname: HighDiskUsage  
 severity: page  
 - receiver: 'slack-disk-usage-warning'  
 match:  
 alertname: HighDiskUsage  
 severity: warning  

receivers:  
 - name: 'slack-disk-usage'  
 slack_configs:  
 - channel: '#disk-alerts'  
 send_resolved: true  
 text: "ALERT: *Disk Usage* - Severity: *{{ .CommonLabels.severity }}*\nInstance: {{ .CommonLabels.instance }}\nMountpoint: {{ .CommonLabels.mountpoint }}\nUsage: *{{ .Value | printf \"%.2f\" }}%*"  

 - name: 'slack-disk-usage-warning'  
 slack_configs:  
 - channel: '#disk-alerts'  
 send_resolved: true  
 text: "WARNING: *Disk Usage* - Severity: *{{ .CommonLabels.severity }}*\nInstance: {{ .CommonLabels.instance }}\nMountpoint: {{ .CommonLabels.mountpoint }}\nUsage: *{{ .Value | printf \"%.2f\" }}%*"
  • global: Визначає URL API Slack та час на вирішення. resolve_timeout встановлено на 1 хвилину.
  • route: Визначає логіку маршрутизації сповіщень:
    receiver: Визначає отримувача за замовчуванням (slack-disk-usage).
    group_by: Групує сповіщення за instance та severity.
    routes: Визначає два маршрути для сповіщень:
    — — HighDiskUsage з серйозністю page надсилає сповіщення до slack-disk-usage.
    — — HighDiskUsage з серйозністю warning надсилає сповіщення до slack-disk-usage-warning.
  • receivers: Визначає, як сповіщення надсилаються:
    slack-disk-usage: Надсилає критичні сповіщення до Slack каналу #disk-alerts з деталями використання диска.
    slack-disk-usage-warning: Надсилає попереджувальні сповіщення до того ж Slack каналу з подібними деталями.

4. Файл prometheus_api

ARGS="--web.enable-admin-api"

Файл prometheus_api увімкне адміністративне API Prometheus, що дозволяє доступ до адміністративних кінцевих точок для конфігурації та усунення неполадок. Він змонтований у контейнер для цілей управління.

Запуск стеку

Тепер, щоб запустити стек, виконайте наступну команду у вашій директорії проекту:

docker compose up -d

Це запустить усі визначені сервіси (Prometheus, Alertmanager та інші необхідні контейнери) у фоновому режимі. Файл docker-compose.yml займається оркестрацією цих сервісів, створюючи необхідні контейнери Docker, пов’язуючи їх і відкриваючи потрібні порти.

У наступній статті ми розглянемо процес налаштування NGINX для проксирування запитів та безпечного доступу до графічної панелі Grafana за адресою grafana.anilrajrimal.com.np.

Перекладено з: Setting Up Configurations with the Prometheus Stack (Part 2)

Leave a Reply

Your email address will not be published. Required fields are marked *