🔥 Prometheus
Метрики, scrape-конфиг, PromQL, правила оповещений, exporters и Alertmanager.
Шпаргалки · Администрирование · #prometheus #monitoring #metrics #promql
Идея
Prometheus сам опрашивает (scrape) цели по HTTP и хранит временные ряды имя{метки} значение. Язык запросов: PromQL. Графики: Grafana. Оповещения: Alertmanager. Интерфейс :9090.
Типы метрик
| Тип | Смысл | Пример |
|---|---|---|
| Counter | только растёт | http_requests_total |
| Gauge | растёт и падает | memory_usage_bytes |
| Histogram | распределение по корзинам | http_request_duration_seconds_bucket |
| Summary | квантили на клиенте |
prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
rule_files: [alerts.yml]
alerting:
alertmanagers: [{ static_configs: [{ targets: ['alertmanager:9093'] }] }]
scrape_configs:
- job_name: prometheus
static_configs: [{ targets: ['localhost:9090'] }]
- job_name: node
static_configs: [{ targets: ['10.0.0.11:9100', '10.0.0.12:9100'] }]
- job_name: k8s-pods
kubernetes_sd_configs: [{ role: pod }]
Проверка: promtool check config prometheus.yml.
PromQL
up # доступность целей (1 / 0)
http_requests_total{job="api", status=~"5.."} # фильтр по меткам
rate(http_requests_total[5m]) # скорость в секунду (для counter)
sum by (job) (rate(http_requests_total[5m]))
histogram_quantile(0.95, sum by (le) (rate(http_request_duration_seconds_bucket[5m])))
(1 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m]))) * 100 # загрузка CPU, %
node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes
increase(errors_total[1h])
topk(5, sum by (instance) (rate(x[5m])))
Операторы меток: =, !=, =~, !~. Функции: rate, irate, increase, avg_over_time, delta, predict_linear.
Правила оповещений
groups:
- name: basics
rules:
- alert: InstanceDown
expr: up == 0
for: 5m
labels: { severity: critical }
annotations:
summary: "{{ $labels.instance }} недоступен"
- alert: HighErrorRate
expr: sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m])) > 0.05
for: 10m
labels: { severity: warning }
Alertmanager
Группировка, подавление дублей, тихие часы, маршрутизация: Telegram, Slack, email, PagerDuty.
route:
receiver: team
group_by: [alertname]
receivers:
- name: team
telegram_configs: [{ bot_token: "...", chat_id: 123 }]
Exporters
| Источник | Exporter |
|---|---|
| Сервер Linux | node_exporter (:9100) |
| Windows | windows_exporter |
| Контейнеры | cAdvisor |
| PostgreSQL, MySQL, Redis | postgres_exporter, mysqld_exporter, redis_exporter |
| Nginx | nginx-prometheus-exporter |
| «Чёрный ящик» (HTTP, ping) | blackbox_exporter |
| Kubernetes | kube-state-metrics |
Приёмы
- Метки с малым числом значений (не
user_id): иначе взрывается кардинальность. - Хранение:
--storage.tsdb.retention.time=15d; долгое хранение через remote_write (Mimir, Thanos, VictoriaMetrics). - Для коротких заданий используйте Pushgateway.