Введение
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 — мощный инструмент для глубокой наблюдаемости. Начните с базового сбора трассировок и постепенно расширяйтесь.