with one click
opentelemetry-python-otlp
// Configure OTLP exporters (HTTP/protobuf and gRPC) for Python OpenTelemetry SDK — traces, metrics, collector setup, temporality presets, and console fallback.
// Configure OTLP exporters (HTTP/protobuf and gRPC) for Python OpenTelemetry SDK — traces, metrics, collector setup, temporality presets, and console fallback.
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | opentelemetry-python-otlp |
| description | Configure OTLP exporters (HTTP/protobuf and gRPC) for Python OpenTelemetry SDK — traces, metrics, collector setup, temporality presets, and console fallback. |
| tech_stack | ["backend"] |
| language | ["python"] |
| capability | ["observability"] |
| version | OpenTelemetry Python SDK (exporters page, 2026-01-14) |
| collected_at | "2026-01-14T00:00:00.000Z" |
Source: https://opentelemetry.io/docs/languages/python/exporters/
Configure the OpenTelemetry Python SDK to export traces and metrics to an OTLP-compatible backend (Collector, Jaeger, Prometheus, or vendor). Covers both HTTP/protobuf and gRPC transports, BatchSpanProcessor / PeriodicExportingMetricReader wiring, temporality presets, and the console exporter for local development.
opentelemetry-exporter-otlp-proto-http and opentelemetry-exporter-otlp-proto-grpc.ConsoleSpanExporter before connecting to a real backend.Install (pick one):
pip install opentelemetry-exporter-otlp-proto-http # HTTP/protobuf
pip install opentelemetry-exporter-otlp-proto-grpc # gRPC
Minimal traces-only setup (HTTP/protobuf):
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
resource = Resource.create(attributes={SERVICE_NAME: "your-service-name"})
tracer_provider = TracerProvider(resource=resource)
tracer_provider.add_span_processor(
BatchSpanProcessor(OTLPSpanExporter(endpoint="http://localhost:4318/v1/traces"))
)
trace.set_tracer_provider(tracer_provider)
| Transport | Trace Exporter | Metric Exporter | Package |
|---|---|---|---|
| HTTP/protobuf | OTLPSpanExporter from opentelemetry.exporter.otlp.proto.http.trace_exporter | OTLPMetricExporter from opentelemetry.exporter.otlp.proto.http.metric_exporter | opentelemetry-exporter-otlp-proto-http |
| gRPC | OTLPSpanExporter from opentelemetry.exporter.otlp.proto.grpc.trace_exporter | OTLPMetricExporter from opentelemetry.exporter.otlp.proto.grpc.metric_exporter | opentelemetry-exporter-otlp-proto-grpc |
| Console (dev) | ConsoleSpanExporter from opentelemetry.sdk.trace.export | ConsoleMetricExporter from opentelemetry.sdk.metrics.export | included in opentelemetry-sdk |
http://<host>:4318/v1/traceshttp://<host>:4318/v1/metricshttp://<host>:4317 (no path suffix)BatchSpanProcessor(exporter) — buffers spans and exports in batches. Always use for production.SimpleSpanProcessor(exporter) — exports each span synchronously. Dev/debug only.PeriodicExportingMetricReader(exporter) — periodically flushes metrics on a configurable interval.Env var: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
| Value | Counter | Histogram | ObservableCounter | Use case |
|---|---|---|---|---|
CUMULATIVE (default) | CUMULATIVE | CUMULATIVE | CUMULATIVE | Prometheus, most backends |
DELTA | DELTA | DELTA | DELTA | Datadog, delta-friendly backends |
LOWMEMORY | DELTA | DELTA | CUMULATIVE | Memory-constrained environments |
Invalid values silently fall back to CUMULATIVE with a warning.
/v1/traces or /v1/metrics paths on the endpoint; gRPC does not.SimpleSpanProcessor blocks on every span — never use it in production.ConsoleSpanExporter, ConsoleMetricExporter) ship with opentelemetry-sdk — no extra install.ConsoleSpanExporter to verify spans are being created, then swap to OTLP.jaegertracing/all-in-one:latest (it supports OTLP natively on 4317/4318) and point your OTLP exporter at it.PrometheusMetricReader from opentelemetry-exporter-prometheus.Resource with SERVICE_NAME is required by most backends — always set it.