awesome-everything EN
↑ Обратно к восхождению

Наблюдаемость

Golden signals, структура дашборда и auto-RED в service mesh

Суть Как четыре golden signals Google расширяют RED, как выглядит senior RED+USE дашборд, как service mesh эмитирует RED без кода приложения и как RED переносится на не-HTTP протоколы.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на middle-высоте — в небе
◷ 12 min

У команды пять сервисов. Каждый RED-дашборд выглядит по-разному — разные имена метрик, разная раскладка панелей, разная структура label. Когда инцидент затрагивает несколько сервисов, on-call тратит 30 минут на чтение документации до начала триажа. Единый консистентный паттерн дашборда для всех сервисов сократил бы это до секунд.

Четыре golden signals

SRE-книга Google (по духу предшествует RED и USE, опубликована позже) называет четыре сигнала: Latency, Traffic, Errors, Saturation. Пересечение с RED прямое: Latency = Duration, Traffic = Rate, Errors = Errors. Новый элемент — Saturation: насколько сервис «заполнен» относительно известного предела мощности.

В отличие от Saturation в USE (про физические ресурсы), Saturation в golden signals — на уровне сервиса: количество in-flight запросов, длина очереди, число активных сессий, занятость connection pool. Сервис может быть на 50% CPU, но иметь connection pool на 100% — сервис заполнен, пользователи стоят в очереди, а USE на хосте ничего не показывает.

Многие production-команды рассматривают RED + Saturation как практическую эволюцию сигналов из SRE-книги:

СигналREDGolden signals
Частота запросовRateTraffic
Упавшие запросыErrorsErrors
Задержка ответаDurationLatency
Запас мощности(неявно в плато Rate)Saturation

Senior-структура дашборда

Хорошо структурированный дашборд сервиса читается сверху вниз во время инцидента:

Ряд 1: RED  — панель Rate | панель Errors | панель Duration p50/p95/p99
Ряд 2: USE  — CPU util+PSI | Memory util+PSI | Disk %util+queue
Ряд 3: Downstreams — время ответа + errors DB | hit rate кэша | глубина очереди

Ритм чтения:

  1. Какая RED-метрика изменилась?
  2. Какой USE-ряд совпадает по времени?
  3. Какая downstream-зависимость следовала тому же временному профилю?
  4. Кликни exemplar для подтверждения в трейсе.

Ключевая дисциплина: RED и USE делят одну временну́ю ось на одном дашборде. Кросс-сервисная корреляция требует консистентных ключей label (service, route, region), чтобы панели можно было фильтровать одним набором label.

Разделение severity в алертинге

Зрелый паттерн — алертить на user-facing симптомы (RED) с page-severity и на сигналы внутренних причин (USE) с warning-severity:

АлертМетрикаSeverity
Нарушение SLO latencyp99 Duration > 200 мс в течение 5 минPage
Всплеск error rateErrors > 1% в течение 2 минPage
CPU saturationPSI cpu some > 20% в течение 10 минWarning / Slack
Memory pressurePSI memory full > 0 в течение 5 минWarning / Slack
Запас дискаDisk > 90% в течение 5 минWarning / Slack

Разделение намеренное. RED-алерты будят людей, потому что затронуты пользователи. USE-алерты уходят в более медленный канал, чтобы capacity-команды планировали заранее — а не on-call просыпался каждый раз при достижении CPU 70%. Одно это архитектурное решение — один из сильнейших инструментов против alert fatigue.

СлойКаналПричина
RED-алерт (влияние на пользователя)PagerDuty / page on-callПользователю уже плохо
USE-алерт (запас ресурсов)Slack / тикетПланировать capacity до того, как это станет RED-инцидентом

Auto-RED в service mesh

Service mesh (Envoy, Linkerd, Istio) эмитируют RED-метрики на уровне sidecar без изменений кода приложения. Метрики Envoy downstream_rq_total, downstream_rq_xx и downstream_rq_time дают Rate, Errors-по-статусу и гистограмму Duration на кластер, с консистентными label по всему fleet.

Преимущество: полиглотный fleet (Node, Go, Python, JVM, Rust) получает один паттерн RED-дашборда, даже если языки расходятся в конвенциях Prometheus-клиентов.

Ограничение: sidecar видит только то, что видит сеть. Запрос, успешный с точки зрения sidecar, но неправильно обслуженный из-за бага в коде приложения, отображается как 2xx в mesh-метриках.

Production-паттерн: работай на обоих уровнях — sidecar RED для широты и консистентности, RED на уровне приложения для business-logic точности (например, счётчик payment-success с label по gateway, который sidecar не видит). Держи ключи label согласованными между обоими уровнями, чтобы дашборды могли их объединять.

RED переносится на другие протоколы

Запросо-центричная форма RED переносится на любой протокол; изменяется только определение «запроса» и «ошибки»:

ПротоколRateErrorsDuration
HTTPreq/sHTTP 5xxp99 время ответа
gRPCRPC/sstatus != OKend-to-end для unary, first-byte для streaming
Очереди (Kafka, SQS)messages/s потреблённыхdead-letter rateвремя ожидания publish-to-consume
Batch-заданияjobs/minупавшие jobswall-clock на задание
Serverlessinvocations/serror rate + throttle rateвключая cold-start хвост

Для async- и queue-based сервисов глубина очереди (backlog) — это сигнал Saturation, который чистый RED упускает. Очередь с Duration p99 10 с на задание может иметь бэклог на 10 минут — пользователь ждёт 10 мин + 10 с. RED фиксирует время обработки задания; Saturation фиксирует ожидание в очереди до начала обработки.

Почему это работает

Batch- и async-системы нуждаются в отдельной метрике глубины очереди, которую RED в чистом виде не предоставляет. Паттерн — эмитировать queue_depth_seconds: возраст самого старого необработанного элемента в секундах wall-clock. Если он растёт, пользователи ждут дольше, чем показывает Duration. Это Saturation-сигнал на уровне сервиса, дополняющий resource-level Saturation в USE.

Викторина

Что означает 'Saturation' в четырёх golden signals и чем отличается от Saturation в USE?

Викторина

On-call видит, что RED Duration p99 растёт, но Rate и Errors стабильны. Какой USE-ряд проверить первым?

Расставь шаги по порядку

Расставь шаги реагирования на инцидент RED+USE в production по порядку:

  1. 1 Пейджер сработал — описан симптом с именем сервиса и severity
  2. 2 Открой RED-дашборд сервиса, определи, какой из R / E / D изменился
  3. 3 Читай временные ряды — единичный скачок или устойчивый дрейф?
  4. 4 Сопоставь USE на тех же хостах и на прямых downstream-зависимостях
  5. 5 Если RED-D изменился вместе с USE-CPU saturation: проблема мощности → scale
  6. 6 Если RED-E изменился вместе с USE-Errors на зависимости: сбой зависимости → failover
  7. 7 Если и RED, и USE выглядят нормально, но пейджер сработал: пересмотри источник алерта, подозревай false positive
Вспомните перед уходом
  1. 01
    Что SRE-книга Google добавляет к RED, что RED сам не покрывает?
  2. 02
    В чём практическое преимущество и ограничение auto-RED от service mesh?
  3. 03
    Для Kafka consumer — что такое Rate, Errors и Duration? Какой дополнительный сигнал нужен?
Итог

Четыре golden signals Google — Latency, Traffic, Errors, Saturation — расширяют RED добавлением Saturation уровня сервиса: насколько сервис заполнен относительно своего логического предела (connection pool, in-flight count, глубина очереди), а не только физических ресурсов. Зрелый RED+USE дашборд размещает RED-панели в верхнем ряду, USE-панели посередине, а downstream-зависимости RED+USE снизу — все на одной временно́й оси с консистентными ключами label. Дисциплина алертинга — вторая половина: RED-алерты будят on-call (пользователь затронут), USE-алерты идут в Slack или тикет (capacity-команда планирует заранее). Service mesh эмитирует RED бесплатно на уровне sidecar — консистентно по всем языкам — но видит только то, что видит сеть; RED на уровне приложения нужен для точности business-логики. Форма RED переносится на gRPC, очереди, batch-задания и serverless с минимальной адаптацией — изменяется только определение «запроса» и «ошибки».

Связанные уроки
встречается в167
Продолжить восхождение ↑Cardinality как драйвер затрат: label, PII, exemplars и семплирование
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.