{"library":"opentelemetry-instrumentation-asyncio","title":"OpenTelemetry Asyncio Instrumentation","description":"The `opentelemetry-instrumentation-asyncio` package provides OpenTelemetry tracing and metrics for applications built with Python's `asyncio` library. It enables the collection of duration and counts for coroutines and futures, even if no explicit tracing is configured. This library is part of the `opentelemetry-python-contrib` project, with the current version being `0.62b0`, indicating it is actively developed and in a pre-release (beta) stage.","language":"python","status":"active","last_verified":"Wed May 13","install":{"commands":["pip install opentelemetry-instrumentation-asyncio opentelemetry-sdk opentelemetry-exporter-otlp"],"cli":{"name":"opentelemetry-instrument","version":"opentelemetry-instrument 0.62b1"}},"imports":["from opentelemetry.instrumentation.asyncio import AsyncioInstrumentor"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import asyncio\nimport os\nfrom opentelemetry import trace\nfrom opentelemetry.sdk.resources import Resource\nfrom opentelemetry.sdk.trace import TracerProvider\nfrom opentelemetry.sdk.trace.export import BatchSpanProcessor\nfrom opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter\nfrom opentelemetry.instrumentation.asyncio import AsyncioInstrumentor\n\n# Configure OpenTelemetry TracerProvider\nresource = Resource.create({\"service.name\": \"asyncio-example\"})\nprovider = TracerProvider(resource=resource)\n# Use os.environ.get for OTLP endpoint in quickstart\notlp_exporter = OTLPSpanExporter(\n    endpoint=os.environ.get('OTEL_EXPORTER_OTLP_ENDPOINT_GRPC', 'http://localhost:4317'),\n    insecure=True # Set to False for production with HTTPS\n)\nspan_processor = BatchSpanProcessor(otlp_exporter)\nprovider.add_span_processor(span_processor)\ntrace.set_tracer_provider(provider)\n\n# Instrument asyncio\nAsyncioInstrumentor().instrument()\n\ntracer = trace.get_tracer(__name__)\n\nasync def some_async_task(task_id: int):\n    with tracer.start_as_current_span(f\"some_async_task-{task_id}\"):\n        print(f\"Task {task_id}: Starting...\")\n        await asyncio.sleep(0.05) # Simulated async I/O\n        print(f\"Task {task_id}: Done.\")\n\nasync def main():\n    print(\"Main application starting...\")\n    await asyncio.gather(\n        some_async_task(1),\n        some_async_task(2),\n        some_async_task(3)\n    )\n    print(\"Main application finished.\")\n\nif __name__ == \"__main__\":\n    # Example of configuring tracing for specific coroutines via environment variable\n    # os.environ['OTEL_PYTHON_ASYNCIO_COROUTINE_NAMES_TO_TRACE'] = 'some_async_task'\n    asyncio.run(main())\n    # Ensure all spans are exported before exiting\n    provider.shutdown()","lang":"python","description":"This quickstart demonstrates how to instrument an `asyncio` application using `AsyncioInstrumentor`. It sets up a basic OpenTelemetry `TracerProvider` with an OTLP exporter, then enables the `asyncio` instrumentation. The example includes multiple concurrent `asyncio` tasks to show how traces are captured across `await` boundaries. Environment variables like `OTEL_PYTHON_ASYNCIO_COROUTINE_NAMES_TO_TRACE` can be used for more granular control over which coroutines are traced [1, 2, 5].","tag":null,"tag_description":null,"last_tested":"2026-04-25","results":[{"runtime":"python:3.10-alpine","exit_code":0},{"runtime":"python:3.10-slim","exit_code":0},{"runtime":"python:3.11-alpine","exit_code":0},{"runtime":"python:3.11-slim","exit_code":0},{"runtime":"python:3.12-alpine","exit_code":0},{"runtime":"python:3.12-slim","exit_code":0},{"runtime":"python:3.13-alpine","exit_code":0},{"runtime":"python:3.13-slim","exit_code":0},{"runtime":"python:3.9-alpine","exit_code":0},{"runtime":"python:3.9-slim","exit_code":0}]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-13","installed_version":"0.62b1","pypi_latest":"0.62b1","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":5,"avg_import_s":0.48,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"opentelemetry-instrumentation-asyncio","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.31,"mem_mb":9.3,"disk_size":"52.0M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"opentelemetry-instrumentation-asyncio","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.42,"mem_mb":9.3,"disk_size":"51.9M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"opentelemetry-instrumentation-asyncio","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":5.7,"import_time_s":0.22,"mem_mb":9.3,"disk_size":"50M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"opentelemetry-instrumentation-asyncio","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.26,"mem_mb":9.3,"disk_size":"50M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"opentelemetry-instrumentation-asyncio","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.46,"mem_mb":10.6,"disk_size":"55.5M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"opentelemetry-instrumentation-asyncio","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.57,"mem_mb":10.5,"disk_size":"55.4M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"opentelemetry-instrumentation-asyncio","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":5,"import_time_s":0.42,"mem_mb":10.6,"disk_size":"53M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"opentelemetry-instrumentation-asyncio","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.52,"mem_mb":10.5,"disk_size":"53M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"opentelemetry-instrumentation-asyncio","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.6,"mem_mb":10.5,"disk_size":"47.0M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"opentelemetry-instrumentation-asyncio","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.73,"mem_mb":10.5,"disk_size":"46.9M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"opentelemetry-instrumentation-asyncio","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4,"import_time_s":0.54,"mem_mb":10.5,"disk_size":"45M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"opentelemetry-instrumentation-asyncio","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.78,"mem_mb":10.5,"disk_size":"45M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"opentelemetry-instrumentation-asyncio","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.57,"mem_mb":10.3,"disk_size":"46.8M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"opentelemetry-instrumentation-asyncio","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.66,"mem_mb":10.3,"disk_size":"46.5M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"opentelemetry-instrumentation-asyncio","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.1,"import_time_s":0.53,"mem_mb":10.3,"disk_size":"45M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"opentelemetry-instrumentation-asyncio","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.88,"mem_mb":10.3,"disk_size":"44M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"opentelemetry-instrumentation-asyncio","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.28,"mem_mb":8.5,"disk_size":"51.2M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"opentelemetry-instrumentation-asyncio","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.32,"mem_mb":8.4,"disk_size":"51.2M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"opentelemetry-instrumentation-asyncio","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":6.4,"import_time_s":0.25,"mem_mb":8.5,"disk_size":"49M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"opentelemetry-instrumentation-asyncio","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.32,"mem_mb":8.4,"disk_size":"49M"}]}}