EMZETT.
Войти

OpenTelemetry: единая наблюдаемость

Коротко: Открытый стандарт с библиотеками для единообразного создания трасс, метрик и журналов из приложений и отправки их в любой инструмент анализа.

Подробнее: OpenTelemetry (кратко OTel) — проект Cloud Native Computing Foundation. Раньше у каждого поставщика были свои библиотеки, и переход означал переделку кода. OTel определяет общие API, SDK и формат данных (OTLP), так что приложения инструментируются один раз, а данные могут идти в Jaeger, Prometheus, Grafana, Datadog или другие системы.

Подробности

Три сигнала

  • Трассы (traces): путь запроса через несколько сервисов, разделённый на спаны (spans) (отдельные рабочие шаги с длительностью и свойствами). Trace ID связывает все спаны.
  • Метрики: числовые ряды, такие как запросы в секунду или использование памяти.
  • Журналы (logs): текстовые события, которые можно связать с trace ID.

Строительные блоки

Инструментирование создаёт данные, автоматически (агенты для Java, Node.js, Python и других перехватывают HTTP-вызовы и обращения к базам данных) или вручную через API. SDK собирает и обрабатывает их. Коллектор (collector) — отдельный сервис, который принимает, фильтрует, обогащает и пересылает данные. Контекст передаётся между сервисами через заголовки вроде traceparent (W3C Trace Context).

Пример ручного спана (JavaScript)

import { trace } from '@opentelemetry/api';
const tracer = trace.getTracer('shop');
await tracer.startActiveSpan('calculate-shipping', async (span) => {
  span.setAttribute('country', 'DE');
  // ... работа ...
  span.end();
});

Примечания

Трассы дороги, если хранить всё: обычна выборка (sampling), то есть только часть запросов или все неудачные и медленные. Следите, чтобы не записывать персональные данные или секреты в атрибуты. Проект зрел в разной степени для разных сигналов; трассы и метрики считаются стабильными.

См. также: Наблюдаемость (observability), Prometheus и метрики, Журналирование (logging)