Гайды
Мониторинг Kubernetes: Prometheus Operator
ServiceMonitor и PrometheusRule, kube-state-metrics, Grafana и контроль кардинальности метрик.
~9 мин чтения
Мониторинг Kubernetes: Prometheus Operator
Prometheus Operator (проект kube-prometheus / чарт kube-prometheus-stack) ставит Prometheus, Alertmanager, Grafana и CRD: ServiceMonitor, PodMonitor, PrometheusRule. Цель — декларативный мониторинг сервисов в k8s. Кластер — Pods, Deployments и Services; Helm — чарты. Для сравнения с метриками брокера — Мониторинг Kafka.
1. Идея Operator
Operator следит за CRD и синхронизирует конфигурацию Prometheus (scrape targets, правила алертов) без ручного редактирования prometheus.yml.
2. ServiceMonitor
Описывает, как скрапить Service по label selector:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: api
labels:
release: prometheus-stack
spec:
selector:
matchLabels:
app: api
endpoints:
- port: metrics
interval: 30s
path: /metrics
Под metadata.labels часто нужна метка, которую чарт prometheus-stack использует для обнаружения мониторов (release: kube-prometheus-stack — зависит от prometheus.prometheusSpec.serviceMonitorSelector).
3. PrometheusRule
Алерты в формате PromQL → Alertmanager → PagerDuty/Slack.
Минимальный пример (подставьте свои метки и пороги):
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: api-errors
labels:
release: kube-prometheus-stack
spec:
groups:
- name: api
rules:
- alert: High5xxRate
expr: |
sum(rate(http_requests_total{status=~"5.."}[5m]))
/ sum(rate(http_requests_total[5m])) > 0.05
for: 10m
labels:
severity: warning
annotations:
summary: "Доля 5xx выше 5% (10m)"
Recording rules (record:) заранее агрегируют тяжёлые выражения — дешевле дашборды и алерты на длинных окнах.
4. Grafana
Дашборды из чарта + импорт community JSON. Datasource Prometheus настраивается автоматически в стеке.
5. kube-state-metrics и node-exporter
Метрики объектов k8s (Deployments, pods pending) и узлов — база для алертов «кластер болен».
6. PodMonitor и TLS к целям
PodMonitor скрапит поды напрямую по labels — удобно, когда нет отдельного Service с метриками. tlsConfig, bearerTokenSecret — для HTTPS /metrics и kube-rbac-proxy.
7. Alertmanager: маршрутизация
route, receiver, inhibit_rules — чтобы дисковый алерт на ноде не дублировался десятком подов. Silences с истечением срока для плановых работ.
8. Чек-лист
- Retention и размер диска Prometheus.
- Разделение infra vs app алертов.
- Не скрапить всё подряд — лимит кардинальности меток (
metric_relabel_configs). - Версии CRD совместимы с версией operator.
- Thanos/Cortex/VictoriaMetrics при росте данных за пределы одного Prometheus.
-
remote_writeв долгосрочное хранилище, если retention в Prometheus короткий, а запросы — длинные.
Дальше: тег Prometheus · тег Kubernetes