Введение

OpenTelemetry — это фреймворк с открытым исходным кодом для сбора метрик, логов и трассировок в распределённых системах. Он помогает получать полную картину происходящего в приложениях и инфраструктуре.

Почему OpenTelemetry?

  • Единый стандарт: метрики, логи и трассировки — всё в одном.
  • Независимость от вендоров: поддержка экспорта в Prometheus, Jaeger и другие.
  • Гибкость: работает с разными языками и платформами.

Пошаговая инструкция

Шаг 1: Установка коллектора

docker run --rm -p 4317:4317 -v "$(pwd)/otel-config.yaml":/otel-config.yaml otel/opentelemetry-collector:latest --config=/otel-config.yaml

Пример otel-config.yaml:

receivers:
  otlp:
    protocols:
      grpc:
      http:

exporters:
  logging:
    loglevel: debug
  jaeger:
    endpoint: "http://localhost:14250"
    tls:
      insecure: true

service:
  pipelines:
    traces:
      receivers: [otlp]
      exporters: [logging, jaeger]

Шаг 2: Инструментирование приложения

Пример для Python:

pip install opentelemetry-api opentelemetry-sdk opentelemetry-exporter-otlp

Код для интеграции:

from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter

trace.set_tracer_provider(TracerProvider())
span_processor = BatchSpanProcessor(OTLPSpanExporter())
trace.get_tracer_provider().add_span_processor(span_processor)

tracer = trace.get_tracer(__name__)

with tracer.start_as_current_span("main-span"):
    print("Трейсинг с OpenTelemetry")

Шаг 3: Визуализация

docker run -d --name jaeger -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 -p 16686:16686 jaegertracing/all-in-one:latest

Перейдите по адресу http://localhost:16686 для просмотра.

Ограничения

  • Высокий порог входа.
  • Конфигурация отличается для каждого языка.
  • Требует строгой передачи контекста.

Заключение

OpenTelemetry — мощный инструмент для глубокой наблюдаемости. Начните с базового сбора трассировок и постепенно расширяйтесь.