Перейти к содержанию

Four Golden Signals

SRE · Observability
Изучено

Проблема

Дашборд сервиса — сборная солянка: CPU, память, количество логов, случайные бизнес-метрики. При инциденте непонятно, куда смотреть первым делом. При ревью дашбордов разных команд — у каждой своя философия, общие KPI отсутствуют.

Решение

Метрики Four Golden Signals из Google SRE Book — минимально достаточный набор для любого user-facing сервиса:

Signal Что меряет Пример для HTTP-сервиса
Latency Сколько времени занимает запрос (отдельно успех и ошибки!) p50 / p95 / p99 времени ответа
Traffic Сколько сервис обслуживает, в натуральных единицах RPS, сообщений в очереди в секунду
Errors Доля неуспешных запросов Error rate = 5xx / total
Saturation Насколько забит ресурс, ближайший к узкому месту CPU %, очередь worker'ов, heap util

Правило: если эти четыре графика в норме — пользователь не страдает. Если один из них «красный» — вот куда смотреть.

Пример

Prometheus + Grafana для HTTP-сервиса с http_requests_total и http_request_duration_seconds:

# Latency — p95 по всем успешным запросам
histogram_quantile(0.95,
  sum by (le) (rate(http_request_duration_seconds_bucket{status!~"5.."}[5m]))
)

# Traffic
sum(rate(http_requests_total[5m]))

# Errors — доля 5xx
sum(rate(http_requests_total{status=~"5.."}[5m]))
  /
sum(rate(http_requests_total[5m]))

# Saturation — утилизация CPU пода
sum by (pod) (rate(container_cpu_usage_seconds_total[5m]))
  /
sum by (pod) (kube_pod_container_resource_limits{resource="cpu"})

Бонус — recording rules, чтобы тяжёлые запросы не пересчитывались на каждом обновлении дашборда:

# prometheus/rules/golden.yml
groups:
  - name: golden-signals
    interval: 30s
    rules:
      - record: job:http_request_duration_seconds:p95_5m
        expr: histogram_quantile(0.95,
                sum by (job, le) (rate(http_request_duration_seconds_bucket[5m])))
      - record: job:http_errors:ratio_5m
        expr: sum by (job) (rate(http_requests_total{status=~"5.."}[5m]))
                /
              sum by (job) (rate(http_requests_total[5m]))

Когда применять

  • Всегда, как только у сервиса появляется пользователь (внутренний или внешний).
  • До любых «красивых» бизнес-дашбордов. Сначала Golden, потом уже revenue/funnel.

Источник

Как применить у себя

  1. Для каждого user-facing сервиса — отдельная Grafana-дашборд-страница из 4 панелей.
  2. Вынести Prometheus-запросы в recording rules.
  3. Алерты — только на два сигнала, которые действительно будят человека: errors > X% и latency p95 > Y ms.
  4. После того как дежурный смог локализовать реальный инцидент за 1–2 минуты по Golden Signals — статус Изучено.