Модуль 11 — Observability ⭐⭐⭐

Если ты не видишь систему — ты ей не управляешь. Observability ≠ monitoring. Monitoring — известные проблемы. Observability — способность задать любой вопрос системе и получить ответ.

Три столпа

📊

Metrics

Численные временные ряды. Дешёвые, агрегируемые, но без контекста.

Stack: Prometheus, VictoriaMetrics, Grafana

📝

Logs

Структурированные события. Контекст, дорогие в хранении.

Stack: Loki, ELK, OpenSearch

🔗

Traces

Путь запроса через сервисы. Идеально для микросервисов.

Stack: Tempo, Jaeger, Datadog APM

Четвёртый «новый» столп — Profiles (Pyroscope, Parca) — CPU/memory профили в реальном времени.

Стек 2026 года

Open source (рекомендуется)

Альтернативы

Коммерческие

Prometheus ⭐

Концепции

PromQL — must master

# Скорость HTTP запросов в секунду
rate(http_requests_total[5m])

# Сгруппировать по route
sum by (route) (rate(http_requests_total[5m]))

# 95-й перцентиль latency
histogram_quantile(0.95, sum by (le) (rate(http_request_duration_seconds_bucket[5m])))

# Сколько pod-ов в каждом namespace
count by (namespace) (kube_pod_info)

# Pod restart за последний час
increase(kube_pod_container_status_restarts_total[1h]) > 0

# Error rate (для SLO алертов)
sum(rate(http_requests_total{status=~"5.."}[5m]))
  /
sum(rate(http_requests_total[5m]))

Типичный prod-стек

Grafana

Loki — логи cloud-native

Tempo / Jaeger — traces

OpenTelemetry ⭐⭐ (must для 2026+)

Единый стандарт CNCF для сбора metrics, logs, traces. К 2027 OTel станет стандартом везде.

Пример: OTel Collector конфиг

receivers:
  otlp:
    protocols:
      grpc: {endpoint: 0.0.0.0:4317}
      http: {endpoint: 0.0.0.0:4318}

processors:
  batch:
  memory_limiter: {check_interval: 1s, limit_percentage: 75}

exporters:
  prometheus:
    endpoint: 0.0.0.0:8889
  loki:
    endpoint: http://loki:3100/loki/api/v1/push
  otlp/tempo:
    endpoint: tempo:4317
    tls: {insecure: true}

service:
  pipelines:
    metrics: {receivers: [otlp], processors: [memory_limiter, batch], exporters: [prometheus]}
    logs:    {receivers: [otlp], processors: [memory_limiter, batch], exporters: [loki]}
    traces:  {receivers: [otlp], processors: [memory_limiter, batch], exporters: [otlp/tempo]}

Alerting

SRE концепции

SLI / SLO / SLA

Методы анализа

Burn rate alerts

Современный подход — алерты по скорости расхода error budget, а не по threshold-ам.

Incident response

Best practices

  1. Метрики дешёвые, логи дорогие, трейсы средние — балансируй
  2. Структурированные логи — JSON, поля, не текст
  3. Один traceID связывает всё: логи, метрики, трейсы
  4. SLO, не SLA для алертов
  5. Меньше дашбордов лучше — 5 хороших > 50 плохих
  6. RED для каждого сервиса — Rate, Errors, Duration минимум
  7. USE для нод — Utilization, Saturation, Errors
  8. Cardinality monitoring — Prometheus падает на high-cardinality labels (никогда не лей user_id в метрики)
  9. Retention — короткое для всего, долгое для агрегатов (через Thanos/VM)
  10. Документируй каждый алерт runbook-ом

Чек-лист

Источники

Observability освоена. Дальше — Configuration Management и платформы.

Модуль 12 →