Експортери
Надсилайте телеметрію до OpenTelemetry Collector, щоб переконатися, що вона експортується правильно. Використання Collector у виробничих середовищах є найкращою практикою. Щоб візуалізувати вашу телеметрію, експортуйте її до бекенду, такого як Jaeger, Zipkin, Prometheus або бекенд, специфічний для постачальника.
Доступні експортери
Реєстр містить список експортерів для Python.
Серед експортерів, експортери OpenTelemetry Protocol (OTLP) розроблені з урахуванням моделі даних OpenTelemetry, що передають дані OTel без втрати інформації. Крім того, багато інструментів, які працюють з телеметричними даними, підтримують OTLP (таких як Prometheus, Jaeger і більшість постачальників), надаючи вам високий ступінь гнучкості, коли це потрібно. Щоб дізнатися більше про OTLP, дивіться Специфікацію OTLP.
Ця сторінка охоплює основні експортери OpenTelemetry Python та як їх налаштувати.
Якщо ви використовуєте інструментування без коду, ви можете дізнатися як налаштувати експортери, дотримуючись Посібника з налаштування.
OTLP
Налаштування Collector
Якщо у вас вже налаштований OTLP collector або бекенд, ви можете пропустити цей розділ і налаштувати залежності OTLP експортерів для вашого застосунку.
Щоб спробувати та перевірити ваші OTLP експортери, ви можете запустити collector у docker контейнері, який записує телеметрію безпосередньо в консоль.
У порожній теці створіть файл з назвою collector-config.yaml з наступним вмістом:
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
exporters:
debug:
verbosity: detailed
service:
pipelines:
traces:
receivers: [otlp]
exporters: [debug]
metrics:
receivers: [otlp]
exporters: [debug]
logs:
receivers: [otlp]
exporters: [debug]
Тепер запустіть collector у docker контейнері:
docker run -p 4317:4317 -p 4318:4318 --rm -v $(pwd)/collector-config.yaml:/etc/otelcol/config.yaml otel/opentelemetry-collector
Цей collector тепер може приймати телеметрію через OTLP. Пізніше ви можете налаштувати collector, щоб надсилати вашу телеметрію до вашого бекенду для спостереження.
Залежності
Якщо ви хочете надсилати телеметричні дані на точку доступу OTLP (наприклад, OpenTelemetry Collector, Jaeger або Prometheus), ви можете вибрати між двома різними протоколами для транспортування ваших даних:
Почніть з встановлення відповідних пакунків експортерів як залежності для вашого проєкту:
pip install opentelemetry-exporter-otlp-proto-http
pip install opentelemetry-exporter-otlp-proto-grpc
Використання
Далі налаштуйте експортер для вказівки на кінцеву точку OTLP у вашому коді.
from opentelemetry.sdk.resources import SERVICE_NAME, Resource
from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry import metrics
from opentelemetry.exporter.otlp.proto.http.metric_exporter import OTLPMetricExporter
from opentelemetry.sdk.metrics import MeterProvider
from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader
# Service name is required for most backends
resource = Resource.create(attributes={
SERVICE_NAME: "your-service-name"
})
tracerProvider = TracerProvider(resource=resource)
processor = BatchSpanProcessor(OTLPSpanExporter(endpoint="<traces-endpoint>/v1/traces"))
tracerProvider.add_span_processor(processor)
trace.set_tracer_provider(tracerProvider)
reader = PeriodicExportingMetricReader(
OTLPMetricExporter(endpoint="<traces-endpoint>/v1/metrics")
)
meterProvider = MeterProvider(resource=resource, metric_readers=[reader])
metrics.set_meter_provider(meterProvider)
from opentelemetry.sdk.resources import SERVICE_NAME, Resource
from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry import metrics
from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter
from opentelemetry.sdk.metrics import MeterProvider
from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader
# Service name is required for most backends
resource = Resource.create(attributes={
SERVICE_NAME: "your-service-name"
})
tracerProvider = TracerProvider(resource=resource)
processor = BatchSpanProcessor(OTLPSpanExporter(endpoint="your-endpoint-here"))
tracerProvider.add_span_processor(processor)
trace.set_tracer_provider(tracerProvider)
reader = PeriodicExportingMetricReader(
OTLPMetricExporter(endpoint="localhost:5555")
)
meterProvider = MeterProvider(resource=resource, metric_readers=[reader])
metrics.set_meter_provider(meterProvider)
Консоль
Щоб налагодити вашу інструментацію або побачити значення локально під час розробки, ви можете використовувати експортери, що записують телеметричні дані в консоль (stdout).
ConsoleSpanExporter та ConsoleMetricExporter включені в пакунок opentelemetry-sdk.
from opentelemetry.sdk.resources import SERVICE_NAME, Resource
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor, ConsoleSpanExporter
from opentelemetry import metrics
from opentelemetry.sdk.metrics import MeterProvider
from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader, ConsoleMetricExporter
# Service name is required for most backends,
# and although it's not necessary for console export,
# it's good to set service name anyways.
resource = Resource.create(attributes={
SERVICE_NAME: "your-service-name"
})
tracerProvider = TracerProvider(resource=resource)
processor = BatchSpanProcessor(ConsoleSpanExporter())
tracerProvider.add_span_processor(processor)
trace.set_tracer_provider(tracerProvider)
reader = PeriodicExportingMetricReader(ConsoleMetricExporter())
meterProvider = MeterProvider(resource=resource, metric_readers=[reader])
metrics.set_meter_provider(meterProvider)
Існують пресети темпоральності для кожного виду інструментації. Ці пресети можуть бути встановлені за допомогою змінної середовища OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE, наприклад:
export OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE="DELTA"
Стандартне значення для OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE — "CUMULATIVE".
Доступні значення та їх відповідні налаштування для цієї змінної середовища:
CUMULATIVECounter:CUMULATIVEUpDownCounter:CUMULATIVEHistogram:CUMULATIVEObservableCounter:CUMULATIVEObservableUpDownCounter:CUMULATIVEObservableGauge:CUMULATIVE
DELTACounter:DELTAUpDownCounter:CUMULATIVEHistogram:DELTAObservableCounter:DELTAObservableUpDownCounter:CUMULATIVEObservableGauge:CUMULATIVE
LOWMEMORYCounter:DELTAUpDownCounter:CUMULATIVEHistogram:DELTAObservableCounter:CUMULATIVEObservableUpDownCounter:CUMULATIVEObservableGauge:CUMULATIVE
Встановлення OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE на будь-яке інше значення, ніж CUMULATIVE, DELTA або LOWMEMORY, призведе до логування попередження та встановлення цієї змінної середовища на CUMULATIVE.
Jaeger
Налаштування бекенду
Jaeger нативно підтримує OTLP для отримання даних трасування. Ви можете запустити Jaeger у docker контейнері з доступом до UI на порту 16686 та увімкненим OTLP на портах 4317 та 4318:
docker run --rm \
-e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
-p 16686:16686 \
-p 4317:4317 \
-p 4318:4318 \
-p 9411:9411 \
jaegertracing/all-in-one:latest
Використання
Тепер дотримуйтесь інструкцій для налаштування OTLP експортерів.
Prometheus
Щоб надіслати ваші метрики до Prometheus, ви можете або
увімкнути OTLP Receiver Prometheus і використовувати OTLP експортер, або ви можете використовувати експортер Prometheus, MetricReader, який запускає HTTP сервер, що збирає метрики та серіалізує їх у
текстовий формат Prometheus за запитом.
Налаштування бекенду
Якщо у вас вже налаштований Prometheus або сумісний з Prometheus бекенд, ви можете пропустити цей розділ і налаштувати залежності експортера Prometheus або OTLP для вашого застосунку.
Ви можете запустити Prometheus у docker контейнері, доступному на порту 9090, дотримуючись цих інструкцій:
Створіть файл під назвою prometheus.yml з наступним вмістом:
scrape_configs:
- job_name: dice-service
scrape_interval: 5s
static_configs:
- targets: [host.docker.internal:9464]
Запустіть Prometheus у docker контейнері з доступом до UI на порту 9090:
docker run --rm -v ${PWD}/prometheus.yml:/prometheus/prometheus.yml -p 9090:9090 prom/prometheus --web.enable-otlp-receiver
Коли використовуєте OTLP Receiver Prometheus, переконайтеся, що ви встановили OTLP endpoint для метрик у вашому застосунку на http://localhost:9090/api/v1/otlp.
Не всі docker середовища підтримують host.docker.internal. У деяких випадках вам може знадобитися замінити host.docker.internal на localhost або IP адресу вашої машини.
Залежності
Встановіть пакунок експортера як залежність для вашого застосунку:
pip install opentelemetry-exporter-prometheus
Оновіть вашу конфігурацію OpenTelemetry для використання експортера та надсилання даних до вашого бекенду Prometheus:
from prometheus_client import start_http_server
from opentelemetry import metrics
from opentelemetry.exporter.prometheus import PrometheusMetricReader
from opentelemetry.sdk.metrics import MeterProvider
from opentelemetry.sdk.resources import SERVICE_NAME, Resource
# Service name is required for most backends
resource = Resource.create(attributes={
SERVICE_NAME: "your-service-name"
})
# Запустіть клієнта Prometheus
start_http_server(port=9464, addr="localhost")
# Initialize PrometheusMetricReader which pulls metrics from the SDK
# on-demand to respond to scrape requests
reader = PrometheusMetricReader()
provider = MeterProvider(resource=resource, metric_readers=[reader])
metrics.set_meter_provider(provider)
З вищенаведеним ви можете отримати доступ до ваших метрик за адресою http://localhost:9464/metrics. Prometheus або OpenTelemetry Collector з приймачем Prometheus можуть збирати метрики з цієї точки доступу.
Zipkin
Налаштування бекенду
Якщо у вас вже налаштований Zipkin або сумісний з Zipkin бекенд, ви можете пропустити цей розділ і налаштувати залежності експортера Zipkin для вашого застосунку.
Ви можете запустити Zipkin у Docker контейнері, виконавши наступну команду:
docker run --rm -d -p 9411:9411 --name zipkin openzipkin/zipkin
Залежності
Щоб надсилати ваші дані трасування до Zipkin, ви можете вибрати між двома різними протоколами для транспортування ваших даних:
Встановіть пакунок експортера як залежність для вашого застосунку:
pip install opentelemetry-exporter-zipkin-proto-http
pip install opentelemetry-exporter-zipkin-json
Оновіть вашу конфігурацію OpenTelemetry для використання експортера та надсилання даних до вашого бекенду Zipkin:
from opentelemetry import trace
from opentelemetry.exporter.zipkin.proto.http import ZipkinExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.sdk.resources import SERVICE_NAME, Resource
resource = Resource.create(attributes={
SERVICE_NAME: "your-service-name"
})
zipkin_exporter = ZipkinExporter(endpoint="http://localhost:9411/api/v2/spans")
provider = TracerProvider(resource=resource)
processor = BatchSpanProcessor(zipkin_exporter)
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)
from opentelemetry import trace
from opentelemetry.exporter.zipkin.json import ZipkinExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.sdk.resources import SERVICE_NAME, Resource
resource = Resource.create(attributes={
SERVICE_NAME: "your-service-name"
})
zipkin_exporter = ZipkinExporter(endpoint="http://localhost:9411/api/v2/spans")
provider = TracerProvider(resource=resource)
processor = BatchSpanProcessor(zipkin_exporter)
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)
Власні експортери користувача
Нарешті, ви також можете написати свій власний експортер. Для отримання додаткової інформації дивіться Інтерфейс SpanExporter в документації API.
Пакетування відрізків та записів журналу
SDK OpenTelemetry надає набір стандартних процесорів відрізків та записів журналу, які дозволяють вам або генерувати відрізки по одному (“простий”), або пакетувати їх. Використання пакетування рекомендується, але якщо ви не хочете пакетувати свої відрізки або записи журналу, ви можете використовувати простий процесор наступним чином:
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace.export import SimpleSpanProcessor
processor = SimpleSpanProcessor(OTLPSpanExporter(endpoint="your-endpoint-here"))
Відгук
Чи це було корисним?
Дякуємо. Ми цінуємо ваші відгуки!
Будь ласка, дайте нам знати як ми можемо покращити цю сторінку. Ми цінуємо ваші відгуки!