OTel SDK
Тема дорожной карты · Observability
OpenTelemetry SDK — это языковая реализация OpenTelemetry API, которая непосредственно занимается сбором и экспортом данных телеметрии. Если OpenTelemetry API предоставляет абстрактные интерфейсы (Tracer, Meter, Logger), то SDK предоставляет конкретные реализации: процессоры спанов, ридеры метрик, процессоры лог-записей и экспортеры, которые передают данные из приложения. В каждой языковой экосистеме есть официальный SDK: opentelemetry-sdk для Python, go.opentelemetry.io/otel/sdk для Go, @opentelemetry/sdk-node для Node.js, — и все они используют одну и ту же модель конфигурации, основанную на переменных окружения, таких как OTEL_EXPORTER_OTLP_ENDPOINT и OTEL_TRACES_SAMPLER. SDK высоко конфигурируем: стратегии сэмплирования (always-on, trace ID ratio, parent-based), интервалы пакетного экспорта и атрибуты ресурсов — всё это можно настраивать в коде или через переменные окружения OTEL_* без перекомпиляции. Понимание внутреннего устройства OpenTelemetry SDK необходимо для продвинутых сценариев наблюдаемости: пользовательских сэмплеров, процессоров спанов, обогащающих спаны бизнес-контекстом, и хвостового сэмплирования с использованием otel-collector.
Как это работает
OTel SDK (OTel) — vendor-neutral стандарт инструментирования. Спеки покрывают API + SDK + протокол (OTLP — gRPC или HTTP). Auto-instrumentation библиотеки — для популярных фреймворков. OTel Collector — sidecar/daemon, принимающий OTLP + роутящий в backends (Prometheus, Loki, Tempo, Jaeger, vendor API). Один API + SDK для метрик, логов, traces. Поддерживается CNCF, принят AWS, Google, Microsoft, Datadog, Splunk, Yandex.
Когда применять
OpenTelemetry — для любого нового проекта; нет причин запираться в vendor SDK. Auto-instrumentation сначала (покрывает 80% без изменения кода). Collector — для централизации роутинга; смена backend без переинструментирования приложений. Для метрик OTel может заменить Prometheus client libs или кормить Prometheus через OTLP-receiver; оба работают.
Типичные ошибки
Ловушки OTel SDK: ручное инструментирование, когда сработала бы auto-instrumentation (DRY + баги); запуск Collector с дефолт-конфигом во внутренний API production (нет auth + TLS — защитите); pre-OTel и post-OTel SDK в одном проекте (путано, хрупко); не выставлены resources service.name + service.version (traces без provenance).