Спостережуваність

OpenTelemetry

Єдиний відкритий стандарт і набір SDK для трейсів, метрик і логів, незалежний від постачальника.

Що це

OpenTelemetry (OTel) виник у 2019 році після злиття проєктів OpenTracing і OpenCensus. Це проєкт CNCF зі статусом incubating і одна з найактивніших спільнот екосистеми.

Він визначає формат телеметрії (OTLP), API та SDK для основних мов, а також Collector: процес, який приймає, обробляє й надсилає дані в будь-який бекенд (Jaeger, Prometheus, Grafana, Datadog, Elastic).

Головна ідея: інструментуєте код один раз за стандартом, а бекенд можна змінювати без переписування. Є автоінструментація для популярних фреймворків і HTTP-клієнтів.

Коли брати

  • Розподілені системи, де потрібне наскрізне трасування запитів.
  • Хочете уникнути прив'язки до постачальника спостережуваності.
  • Потрібні трейси, метрики й логи з єдиною кореляцією.
  • Мікросервіси різними мовами з єдиним форматом даних.

Коли не варто

  • Один простий моноліт, де вистачить логів і кількох метрик.
  • Потрібна готова система з дашбордами: OTel лише збирає та передає дані, але не зберігає й не візуалізує їх.
  • Немає ресурсів на налаштування Collector і бекенду.

Ключові поняття

Trace / Span
Трейс це шлях одного запиту через систему, спан це одна операція всередині нього з часом і атрибутами.
OTLP
Власний протокол OpenTelemetry для передачі трейсів, метрик і логів по gRPC чи HTTP.
Collector
Проміжний процес із receivers, processors і exporters, що розв'язує додаток і бекенд.
Context propagation
Передача ідентифікатора трейсу між сервісами через заголовок traceparent (W3C Trace Context).
Auto-instrumentation
Агенти й бібліотеки, що додають спани для HTTP, баз даних і черг без змін у коді.

Приклад

Підключення OpenTelemetry SDK до Node.js із автоінструментацією.

Питання на співбесіді

  1. 1. Що таке трейс і спан?

    Трейс це повний шлях одного запиту через усі сервіси, а спан це окрема операція в ньому, наприклад SQL-запит чи виклик іншого сервісу. Спани утворюють дерево з батьківськими зв'язками.

  2. 2. Навіщо потрібен Collector?

    Він приймає дані від застосунків, обробляє їх (семплінг, фільтрація, збагачення) і надсилає в один чи кілька бекендів. Завдяки цьому код застосунку не залежить від конкретного постачальника.

  3. 3. Як трейс передається між сервісами?

    Через контекст у HTTP-заголовку traceparent стандарту W3C Trace Context. Кожен сервіс читає його й додає свої спани до того самого трейсу.

Питання з банку співбесід

Логотипи належать їхнім власникам і використані лише для ідентифікації. Іконки: Simple Icons (CC0), Devicon (MIT).

Розділи платформи