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

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

Что такое три сигнала: метрики, логи, трейсы

Суть Чем три телеметрических сигнала отличаются друг от друга, какой сигнал отвечает на какой вопрос дешевле и как join-ключи соединяют их в единую навигационную поверхность.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на junior-высоте — поверхность
◷ 10 min

p99 checkout вырос с 80 мс до 1,2 с. Нужно понять что, почему и где — за 5 минут, а не за 5 часов. Три сигнала дают три разных ответа на три разных вопроса. Выбрать не тот — потратить 20 минут на бесполезные поиски.

Три сигнала и что каждый сохраняет

Три сигнала отличаются тем, что сохраняют и что выбрасывают.

СигналЧто сохраняетЧто выбрасываетОсь стоимости
МетрикиЧисловые агрегаты по label-измерениям, долгая историяВсё, что не вошло в label (user_id, request_id и т.д.)Кол-во активных series × retention
ЛогиКаждое поле каждого события в полном объёмеНичего в пределах записанного; но не записывают причинные цепочкиБайты ingestion в день × ставка хранения
ТрейсыПричинную цепочку одного запроса через сервисыБольшинство запросов (сэмплирование обязательно)Span’ы в месяц × ставка backend’а трейсинга

Какой сигнал отвечает на какой вопрос

Метрики отвечают на вопрос «что происходит сейчас?» — Rate, Errors, Duration по route и region за 2 года. Данные возвращаются за миллисекунды: предагрегация происходит при записи, а не при чтении. Слепые ко всему, что не попало в label.

Логи отвечают на вопрос «что именно произошло?» — конкретная трассировка стека, тело ошибки, значение поля order_id. Хранят каждое поле; высокая cardinality бесплатна при записи, но стоит байт ingestion.

Трейсы отвечают на вопрос «где внутри одного запроса было потрачено время?» — дерево span’ов из 7 сервисов с длительностью каждого. Требуют сэмплирования — хранить 100% запросов при 1000 запросах/с = миллиарды span’ов в день.

Join-ключи: мост между сигналами

Три сигнала на трёх разных backend’ах бесполезны, если между ними нельзя перейти за один клик. Общие атрибуты — join-ключи — делают три разрозненных инструмента единой навигационной поверхностью.

Обязательные join-ключи:

  • service.name — какой сервис эмитит данные
  • trace_id — какой конкретный запрос
  • http.route — шаблон маршрута (например, /orders/{id}, не /orders/42)

Когда метрики содержат service.name и http.route как label’ы, лог-строки содержат trace_id запроса, а трейсы содержат те же service.name и http.route — именно тогда работает «клик от всплеска метрики → лог-строка → трейс» за 30 секунд.

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

trace_id — самый важный join-ключ. Он соединяет три сигнала в конкретный запрос. Без него ты переключаешься между тремя разрозненными дашбордами и вручную сопоставляешь временны́е метки. Это разница между 5 минутами и 20 минутами триажа на инциденте.

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

p99 на checkout вырос в 14:02. Расставь шаги триажа по порядку:

  1. 1 Открыть дашборд метрик checkout — подтвердить Rate, Errors, Duration аномальны
  2. 2 Определить измерение (region, route, customer-segment) — перефильтровать метрики
  3. 3 Взять exemplar trace_id из медленного bucket'а гистограммы
  4. 4 Открыть трейс — найти span, который занял большую часть времени
  5. 5 Перейти в логи зависимости, отфильтровав по trace_id
  6. 6 Прочитать лог-строку с реальной причиной (timeout, error, queue full)
Викторина

p99 API вырос с 80 мс до 1,2 с. Какой сигнал первым подтверждает, что проблема реальная, и на каком измерении?

Викторина

Почему трейсы обязательно сэмплируются, а метрики — нет?

Закончи аналогию

Заполни пропуск: _______ — это стрелки на стенах кухни: дёшево читать, всегда включены, но показывают только то, что ты заранее пометил label'ом.

Вспомните перед уходом
  1. 01
    Объясни чем метрики дешевле логов при запросе, и почему они слепее.
  2. 02
    Назови три обязательных join-ключа между сигналами и объясни, что сломается без каждого.
  3. 03
    Команда управляет тремя разными backend'ами: Prometheus, Loki, Jaeger. В метриках поле называется route, в логах — http_path, в трейсах — http.route. Что происходит при инциденте?
Итог

Три сигнала — метрики, логи, трейсы — существуют потому, что ни одна форма хранения не является дешёвой по трём осям сразу: длительный retention, высокая cardinality, полная fidelity запроса. Метрики предагрегируются при записи — запросы мгновенны за годы истории, но слепы к измерениям, не попавшим в label. Логи хранят каждое поле каждого события — мощный инструмент для любого постфактум-вопроса, но дорогой в байтах ingestion. Трейсы захватывают причинную цепочку одного запроса через сервисы — незаменимы для диагностики latency, но требуют сэмплирования при масштабе. Join-ключи — service.name, trace_id, http.route — это общие атрибуты, которые появляются идентично во всех трёх сигналах и делают переход от всплеска метрики к лог-строке и трейсу за один клик возможным.

Связанные уроки
встречается в268
Продолжить восхождение ↑Метрики и cardinality: cost-модель time-series database
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.