{"id":23108,"library":"grpcio-observability","title":"gRPC Python Observability","description":"Observability package for gRPC Python, providing OpenTelemetry integration for client and server interceptors. Current version 1.80.0, released alongside grpcio. Release cadence matches grpcio releases (monthly).","status":"active","version":"1.80.0","language":"python","source_language":"en","source_url":"https://github.com/grpc/grpc/tree/master/src/python/grpcio_observability","tags":["gRPC","observability","OpenTelemetry","tracing","metrics"],"install":[{"cmd":"pip install grpcio-observability","lang":"bash","label":"Install grpcio-observability"}],"dependencies":[{"reason":"core gRPC library required","package":"grpcio","optional":false},{"reason":"OpenTelemetry API for observability","package":"opentelemetry-api","optional":false},{"reason":"OpenTelemetry SDK for exporting traces","package":"opentelemetry-sdk","optional":true},{"reason":"export traces via OTLP","package":"opentelemetry-exporter-otlp","optional":true}],"imports":[{"note":"older docs may show submodule path; top-level import is correct since v1.0","wrong":"from grpc_opentelemetry.interceptors import OpenTelemetryClientInterceptor","symbol":"OpenTelemetryClientInterceptor","correct":"from grpc_opentelemetry import OpenTelemetryClientInterceptor"},{"note":"","wrong":null,"symbol":"OpenTelemetryServerInterceptor","correct":"from grpc_opentelemetry import OpenTelemetryServerInterceptor"},{"note":"","wrong":null,"symbol":"create_metric_interceptors","correct":"from grpc_opentelemetry import create_metric_interceptors"}],"quickstart":{"code":"import grpc\nfrom grpc_opentelemetry import OpenTelemetryServerInterceptor, OpenTelemetryClientInterceptor\nfrom opentelemetry import trace\nfrom opentelemetry.sdk.trace import TracerProvider\nfrom opentelemetry.sdk.trace.export import ConsoleSpanExporter, SimpleSpanProcessor\n\n# Set up tracer provider and exporter\ntrace.set_tracer_provider(TracerProvider())\ntrace.get_tracer_provider().add_span_processor(SimpleSpanProcessor(ConsoleSpanExporter()))\n\n# Create interceptors\nserver_interceptor = OpenTelemetryServerInterceptor(trace.get_tracer(__name__))\nclient_interceptor = OpenTelemetryClientInterceptor(trace.get_tracer(__name__))\n\n# Use with gRPC server/server\n# server = grpc.server(futures.ThreadPoolExecutor(), interceptors=[server_interceptor])\n# stub = ... with interceptor","lang":"python","description":"Minimal setup for tracing gRPC calls with console export."},"warnings":[{"fix":"Upgrade to Python 3.8+ and use `from grpc_opentelemetry import ...` (not `grpc_opentelemetry.interceptors`)","message":"grpcio-observability 1.60+ drops support for Python 3.7 and earlier pre-1.60 import paths","severity":"breaking","affected_versions":">=1.60"},{"fix":"Ensure both client and server interceptors use the same global tracer provider (set via `trace.set_tracer_provider`)","message":"Interceptors must be created with the same tracer provider; mixing providers may result in missing spans","severity":"gotcha","affected_versions":"all"},{"fix":"Use `create_metric_interceptors()` or manually inject context into gRPC metadata","message":"OpenTelemetryClientInterceptor does not automatically propagate context; you must install a propagation injector or use the interceptor correctly with metadata","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"Use `from grpc_opentelemetry import OpenTelemetryClientInterceptor`","cause":"Using an incorrect import path from older documentation or outdated examples","error":"ImportError: cannot import name 'OpenTelemetryClientInterceptor' from 'grpc_opentelemetry'"},{"fix":"Upgrade to grpcio-observability>=1.0: `pip install -U grpcio-observability`","cause":"Installed older version (<1.0) where interceptors were in submodule","error":"AttributeError: module 'grpc_opentelemetry' has no attribute 'OpenTelemetryClientInterceptor'"},{"fix":"Pass a tracer instance: `OpenTelemetryServerInterceptor(trace.get_tracer(__name__))`","cause":"OpenTelemetryServerInterceptor requires a tracer argument; missing it","error":"TypeError: __init__() missing 1 required positional argument: 'tracer'"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}