Registry / observability / opentelemetry-api

opentelemetry-api

JSON →
library1.44.0pypypi✓ verified 26d ago

OpenTelemetry Python API package. Current version: 1.40.0 (Mar 2026). TWO separate packages: 'opentelemetry-api' (interfaces + no-op implementations) and 'opentelemetry-sdk' (actual implementation). Installing only opentelemetry-api produces silent no-ops — all tracing calls succeed but nothing is recorded or exported. Must also install opentelemetry-sdk AND configure a TracerProvider AND call trace.set_tracer_provider(). Exporters (OTLP, Jaeger, Zipkin) are separate packages. All packages must be the same version.

pip install opentelemetry-api opentelemetry-sdk
INSTALL
IMPORT
SIG · OPENTELEMETRY-API
O
opentelemetry-api
observabilitypythonv1.44.0
Install
3.5s avg
Import
86ms
Disk
48MB
Pass rate
10/ 10
Env Coverage10 / 10
glibc
3.93.13
musl
3.93.13
Install & Compatibility
Where this runs
tested against v1.44.0 · pip install
no network on importno background threads
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
musl
py 3.103.915 runs
installs and imports cleanly · install 0.0s · import 0.089s · 49.9MB
glibc
py 3.103.915 runs
installs and imports cleanly · install 3.5s · import 0.083s · 48MB
48MB installed
● package 48MB
Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

TracerProvider setup
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 from opentelemetry.sdk.resources import Resource # Configure provider with resource and exporter resource = Resource.create({'service.name': 'my-service'}) provider = TracerProvider(resource=resource) exporter = OTLPSpanExporter(endpoint='http://localhost:4317') processor = BatchSpanProcessor(exporter) provider.add_span_processor(processor) # MUST register globally before any tracing trace.set_tracer_provider(provider) # Get tracer tracer = trace.get_tracer(__name__) # Use tracer with tracer.start_as_current_span('my-operation') as span: span.set_attribute('user.id', '42') # do work
# Wrong: API only — all no-ops, nothing exported from opentelemetry import trace tracer = trace.get_tracer(__name__) # returns NoopTracer # Wrong: forgot to call set_tracer_provider — still no-op from opentelemetry.sdk.trace import TracerProvider provider = TracerProvider() tracer = trace.get_tracer(__name__) # still NoopTracer — provider not registered
trace.get_tracer() returns a NoopTracer unless trace.set_tracer_provider() has been called with a real TracerProvider. No error is raised — spans are silently discarded.

OpenTelemetry Python — TracerProvider setup with ConsoleSpanExporter.

# pip install opentelemetry-api opentelemetry-sdk from opentelemetry import trace from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchSpanProcessor, ConsoleSpanExporter from opentelemetry.sdk.resources import Resource # Setup — do this once at app startup resource = Resource.create({'service.name': 'my-service', 'service.version': '1.0.0'}) provider = TracerProvider(resource=resource) # ConsoleSpanExporter for local dev — replace with OTLPSpanExporter in production provider.add_span_processor(BatchSpanProcessor(ConsoleSpanExporter())) # Register globally — MUST be before any trace.get_tracer() calls trace.set_tracer_provider(provider) # Get tracer tracer = trace.get_tracer(__name__) # Create spans with tracer.start_as_current_span('main-operation') as span: span.set_attribute('env', 'production') with tracer.start_as_current_span('db-query') as child: child.set_attribute('db.system', 'postgresql') child.set_attribute('db.statement', 'SELECT * FROM users') # do DB work # Flush remaining spans on shutdown provider.shutdown()
Debug
Known issues
breakingInstalling only 'opentelemetry-api' gives silent no-ops. All tracing calls succeed without errors but nothing is recorded. Must also install 'opentelemetry-sdk'.
fix
pip install opentelemetry-api opentelemetry-sdk
affects: all
breakingtrace.get_tracer() returns NoopTracer until trace.set_tracer_provider() is called. Forgetting this line means all spans are silently discarded. Warning: 'No TracerProvider configured, using NoopTracerProvider' only shows with debug logging enabled.
fix
Always call trace.set_tracer_provider(provider) after creating TracerProvider, before any trace.get_tracer() calls.
affects: all
breakingExporters are separate packages not included in opentelemetry-sdk. OTLP requires 'opentelemetry-exporter-otlp'. Jaeger requires 'opentelemetry-exporter-jaeger'. ConsoleSpanExporter is included in SDK.
fix
pip install opentelemetry-exporter-otlp for production. Use ConsoleSpanExporter for local development.
affects: all
breakingAll opentelemetry-* packages must be the same version. Mixing versions (e.g. api=1.20, sdk=1.25) causes ImportError or unexpected behavior.
fix
Pin all packages to same version: pip install 'opentelemetry-api==1.40.0' 'opentelemetry-sdk==1.40.0' 'opentelemetry-exporter-otlp==1.40.0'
affects: all
gotchaAuto-instrumentation packages (opentelemetry-instrumentation-fastapi etc.) are in the separate 'opentelemetry-python-contrib' repo — not in the main SDK. Must be installed separately.
fix
pip install opentelemetry-instrumentation-fastapi opentelemetry-instrumentation-sqlalchemy etc.
affects: all
gotchaprovider.shutdown() must be called on app exit to flush buffered spans. Without it, spans in the BatchSpanProcessor queue are lost on process exit.
fix
Call provider.shutdown() in app shutdown handler or use atexit.register(provider.shutdown).
affects: all
gotchaservice.name resource attribute is not set by default. Without it, traces appear as 'unknown_service' in your backend.
fix
Resource.create({'service.name': 'my-service'}) or set OTEL_SERVICE_NAME env var.
affects: all
Upgrade
Version history
1.44.0latest on PyPI · released Jul 16, 2026
Audit
Dependencies
opentelemetry-sdkrequiredRequired for actual telemetry. API alone gives no-ops.
opentelemetry-semantic-conventionsrequiredRequired by SDK. Installed automatically.
Agent activity
21 hits · last 30 days
node
18
OpenAI (training)
2
Resources
opentelemetry-api — pip install opentelemetry-api · libregistry