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)