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

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

Три pillarа: построй навигационную поверхность observability

Суть Практический проект — инструментируй один сервис всеми тремя сигналами, свяжи join-ключи и exemplarы, затем докажи triage metric-to-log-to-trace под 30 секунд и guardrail на cardinality.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 240 min

Читать про три pillarа — не то же самое, что пивотнуть от всплеска метрики к одному медленному трейсу за менее чем 30 секунд. Инструментируй реальный сервис всеми тремя сигналами, свяжи join-ключи, которые делают их компонуемыми, и докажи проход triage — и guardrail-ы — с доказательствами на каждом шаге.

Цель

Преврати ментальную модель юнита в работающую поверхность observability: эмить metrics, logs и traces из одного сервиса; свяжи их через OpenTelemetry Semantic Conventions и exemplarы; продемонстрируй кросс-pillar triage в один клик; и защити слой метрик от cardinality-бомбы.

Проект
0 из 7
Цель

Возьми небольшой HTTP-сервис (свой или стартовый) и инструментируй его всеми тремя сигналами через OpenTelemetry так, чтобы один всплеск метрики можно было навигировать к трейсу и log-строкам именно того медленного запроса за менее чем 30 секунд — затем докажи, что слой метрик переживает намеренно внедрённую cardinality-бомбу.

Требования
Критерии приёмки
  • Записанный проход triage metric → trace → log за менее чем 30 секунд, скриншоты или терминальные захваты на каждом шаге, все связанные одним trace_id.
  • Доказательство, что три сигнала делят идентичные имена join-ключей (покажи label метрики, поле лога и атрибут span бок о бок для http.route и service.name).
  • Histogram задержки показывает кликабельные exemplarы, и ни одна метрика не несёт per-user или per-customer label идентичности.
  • Демонстрация, что guardrail на cardinality срабатывает на внедрённый неограниченный label (CI-сбой или алерт + labeldrop), при этом скорость создания серий возвращается к базе в пределах одного scrape-интервала.
  • Сводка в один абзац, называющая для каждого из трёх сигналов вопрос, на который он ответил дешевле всего в triage, и ось стоимости, которую он взорвал бы при неверном использовании.
Senior-стретч
  • Добавь страницу on-call runbook: порядок triage от самого дешёвого сигнала, режимы отказа по сигналам с их детект-метриками и процесс ревью cardinality-бюджета.
  • Добавь guardrail на PII: redactor Vector или Fluent Bit для распространённых паттернов (email, token, phone) на пайплайне логов, плюс audit-запрос, ранжирующий high-cardinality строковые поля по сигналам.
  • Подними путь wide-event 2.0 рядом со стеком 1.0: эмить одно wide event на запрос в колоночное хранилище (ClickHouse/Honeycomb), воспроизведи тот же triage через GROUP BY + фильтр + join по trace_id и сравни developer experience и форму стоимости с версией на трёх бэкендах.
  • Добавь сравнение нагрузки tail-sampling: измерь CPU и память коллектора при head-only против head+tail семплирования на одном трафике и покажи, что стоимость tail-sampling масштабируется с сырым трафиком, а хранимый объём — нет.
Итог

Это цикл, который ты прогоняешь, когда владеешь observability сервиса: эмить все три сигнала, связывай их join-ключами OpenTelemetry Semantic Conventions и exemplarами, чтобы всплеск метрики навигировал к точному трейсу и логу за секунды, семплируй трейсы так, чтобы никогда не потерять ошибку, и защищай слой метрик от cardinality-бомб, прежде чем они положат TSDB в 03:00. Сделав это раз на небольшом сервисе, ты превращаешь production-версию — и решение 1.0-против-2.0 по стоимости — в мышечную память.

Продолжить восхождение ↑Зачем нужны структурные логи: дневник против таблицы
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources2
expand
  1. 01
  2. 02

Trademarks belong to their respective owners. Editorial reference only.