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

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

OTel: построй vendor-нейтральный пайплайн

Суть Практический проект — заинструментируй многосервисное приложение OTel, подними пайплайн Collector agent-to-gateway с tail sampling и докажи vendor-нейтральность и самомониторинг доказательствами.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 240 min

Читать про четыре части — не то же самое, что свести их вместе под нагрузкой. Подними небольшое многосервисное приложение, заинструментируй его OTel, прогони через пайплайн Collector agent-to-gateway с tail sampling и докажи — с доказательствами — что можешь менять backend, не трогая код приложения.

Цель

Преврати ментальную модель юнита в рабочий пайплайн: эмить OTLP на границе, обогащай и курируй в Collector, сэмпли head + tail, защищай Semantic Conventions и продемонстрируй vendor-нейтральность и самомониторинг Collector измерениями, а не заявлениями.

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

Заинструментируй приложение из 2-3 сервисов OTel, прогони телеметрию через пайплайн Collector agent-to-gateway, делающий tail sampling и редактирование PII, затем докажи vendor-нейтральность (смена backend только конфигом) и самомониторинг Collector (отказ Collector сам наблюдаем).

Требования
Критерии приёмки
  • Непрерывный end-to-end трейс от входного сервиса через нижестоящий сервис и базу появляется в backend, с видимым ручным бизнес-span и его типизированными атрибутами и трейсом ошибки, показывающим recordException + статус ERROR.
  • Diff (или два скриншота), показывающий, что смена backend была изменением только YAML Collector — код приложения и конфиг Resource побайтово идентичны до и после.
  • Доказательство, что tail sampling сохранил 100% трейсов с ошибками и медленных и лишь ~1% baseline-трафика — счётчик или запрос к backend, а не утверждение.
  • Self-метрики Collector, снятые под нагрузкой, плюс продемонстрированный отказ-дрилл: убей реплику gateway и покажи, что трафик выживает через другие реплики, а полный отказ gateway срабатывает алертом из мета-мониторинга, а не проходит незамеченным.
Senior-стретч
  • Добавь проверку управления Semantic Convention: крошечный линтер или transform-правило Collector, отмечающее или переписывающее нестандартное имя атрибута (http_route -> http.route), и докажи, что оно ловит намеренно неверно названный сервис.
  • Добавь персистентную очередь (file_storage) на exporter gateway и продемонстрируй, что она поглощает симулированный 5-минутный отказ backend с нулевой потерей span после восстановления.
  • Воспроизведи и почини утечку кардинальности: включи url.full на инструментировании HTTP-клиента, покажи взрыв числа metric series, затем переключись на http.route или срежь query-строки через attributes-процессор и покажи ограниченное число series.
  • Добавь покрытие браузера или serverless: заинструментируй фронтенд OTel web SDK, эмитящим OTLP/HTTP в gateway (с CORS), и покажи браузерный span, сшитый в серверный трейс через traceparent.
Итог

Это цикл, который ты будешь гонять, строя реальную observability: эмить OTLP на границе с корректными Semantic Conventions и правильно сформированными ручными span, обогащай и курируй в Collector agent-to-gateway с порядком memory_limiter-первым и tail sampling на полных трейсах, докажи портируемость сменой backend только в YAML и сделай сам Collector наблюдаемым, чтобы его отказ не мог спрятаться. Сделав это однажды на игрушечном флоте, ты превращаешь продовую версию — где Collector это инфраструктура критического пути — в мышечную память.

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

Trademarks belong to their respective owners. Editorial reference only.