У цій частині ми розглянемо основні кроки налаштування 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
Давайте розглянемо, що і для чого ці файли потрібні:
- 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)