Введение
OpenTelemetry (сокращённо OTel) – открытый проект CNCF, предоставляющий стандартизированный набор API, SDK, инструментов и протоколов для инструментирования приложений и инфраструктуры с целью сбора телеметрических данных. OpenTelemetry объединяет три сигнала observability: трассировки (traces), метрики (metrics) и логи (logs) в единую, независимую от конкретного вендора платформу.
OpenTelemetry возник из слияния двух проектов: OpenTracing (стандарт distributed tracing) и OpenCensus (библиотеки от Google). Оба проекта в 2019 году объединились в OpenTelemetry под эгидой CNCF. Сегодня OTel является вторым по активности проектом CNCF после Kubernetes.
История и контекст
До OpenTelemetry каждый вендор (Datadog, New Relic, Dynatrace, Jaeger) имел собственный SDK для инструментирования. Разработчику приходилось выбирать и «замыкаться» на конкретном инструменте. OpenTracing (2016) и OpenCensus (Google, 2018) предпринимали попытки стандартизации, но конкурировали между собой.
В 2019 году сообщества обоих проектов объявили о слиянии в OpenTelemetry. Ключевые вехи: OTel Traces API stable (2021), Metrics SDK stable (2022-2023 по языкам), Logs Bridge API stable (2023). Протокол OTLP (OpenTelemetry Protocol) стал стабильным для трассировок, метрик и логов, обеспечивая единый канал передачи телеметрии.
Как это работает
OpenTelemetry состоит из нескольких компонентов:
- API: независимые от имплементации интерфейсы для создания трассировок, метрик, логов. Позволяют библиотекам инструментировать себя без привязки к конкретному SDK.
- SDK: реализация API для конкретного языка. Предоставляет Tracer, Meter, Logger, Sampler, процессоры и экспортёры.
- OpenTelemetry Collector: агент/шлюз для приёма, обработки и экспорта телеметрии. Принимает данные в форматах OTLP, Jaeger, Zipkin, Prometheus и экспортирует в Jaeger, Prometheus, Grafana Tempo, Datadog, New Relic и другие.
- OTLP (OpenTelemetry Protocol): стандартный бинарный протокол (gRPC/HTTP+protobuf) для передачи телеметрии. Stale для traces, metrics, logs.
- Auto-instrumentation: автоматическое инструментирование популярных фреймворков и библиотек без изменения кода (Java agent, Python auto-instrumentation).
Distributed Tracing – ключевая возможность OTel:
- Каждый запрос получает уникальный TraceId (128 бит).
- Каждая операция в рамках запроса – Span с SpanId, временными метками, атрибутами и событиями.
- Контекст трассировки передаётся между сервисами через заголовки (W3C TraceContext – стандарт).
- Логи связываются с трассировкой через поля TraceId/SpanId, позволяя переходить от метрики к трассировке и к логу.
OpenTelemetry Collector
Collector – центральный компонент инфраструктуры OTel. Работает в двух режимах:
- Agent mode: развёртывается как sidecar или DaemonSet рядом с приложениями. Собирает и пересылает телеметрию.
- Gateway mode: централизованный шлюз для агрегации и маршрутизации телеметрии.
Collector конфигурируется декларативно через YAML: Receivers (входные данные) → Processors (фильтрация, обогащение, сэмплирование) → Exporters (назначение).
Где применяется
- Микросервисные архитектуры: distributed tracing позволяет отследить запрос через 10-20 микросервисов и найти узкое место.
- SRE и performance engineering: метрики OTel заменяют или дополняют Prometheus для унифицированного сбора.
- Kubernetes: OTel Operator автоматически внедряет auto-instrumentation в Pod'ы.
- FinOps: атрибуты трассировок позволяют связать стоимость инфраструктуры с конкретными операциями.
- Compliance: полная цепочка обработки запроса (audit trail) через distributed traces.
Связь с другими понятиями
- Observability – OpenTelemetry является основным инструментом реализации observability в cloud-native системах.
- Prometheus – OTel может экспортировать метрики в Prometheus или получать из него через OpenMetrics receiver.
- Grafana – Grafana Tempo – бэкенд для трассировок OTel; Grafana визуализирует все три сигнала OTel.
- gRPC – OTLP использует gRPC как основной транспорт. gRPC-приложения легко интегрируются с OTel через interceptors.
- Service Mesh (Istio) – генерирует трассировки, совместимые с OTel, через Envoy.
- Log Aggregation – Logs Bridge API позволяет связать существующие логи (log4j, zap) с OTel трассировками.