Гайды

Мониторинг 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:

yaml
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.

Минимальный пример (подставьте свои метки и пороги):

yaml
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