{"library":"opentelemetry-instrumentation-elasticsearch","title":"OpenTelemetry Elasticsearch Instrumentation","description":"This library provides instrumentation for the Python Elasticsearch client, allowing automatic capture of traces and metrics for interactions with Elasticsearch databases. It is part of the OpenTelemetry Python Contrib repository, currently at version 0.62b0, and follows the OpenTelemetry project's frequent release cadence, often with beta versions.","language":"python","status":"active","last_verified":"Thu May 14","install":{"commands":["pip install opentelemetry-instrumentation-elasticsearch elasticsearch opentelemetry-sdk opentelemetry-exporter-otlp"],"cli":null},"imports":["from opentelemetry.instrumentation.elasticsearch import ElasticsearchInstrumentor","from opentelemetry.sdk.trace import TracerProvider","from opentelemetry import trace; trace.set_global_tracer_provider(...)"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nfrom opentelemetry import trace\nfrom opentelemetry.sdk.resources import Resource\nfrom opentelemetry.sdk.trace import TracerProvider\nfrom opentelemetry.sdk.trace.export import ConsoleSpanExporter, SimpleSpanProcessor\nfrom opentelemetry.instrumentation.elasticsearch import ElasticsearchInstrumentor\nfrom elasticsearch import Elasticsearch, ConnectionError # Import ConnectionError for graceful handling\n\n# 1. Configure OpenTelemetry Tracer Provider\n# For demonstration, use ConsoleSpanExporter to print traces to stdout\nresource = Resource.create({\"service.name\": \"my-elasticsearch-app\"})\ntracer_provider = TracerProvider(resource=resource)\nspan_processor = SimpleSpanProcessor(ConsoleSpanExporter())\ntracer_provider.add_span_processor(span_processor)\ntrace.set_global_tracer_provider(tracer_provider)\n\n# 2. Instrument Elasticsearch\nElasticsearchInstrumentor().instrument()\n\n# 3. Use the Elasticsearch client\n# Ensure an Elasticsearch instance is running at this address.\n# For a quick runnable example without a real ES instance, we'll catch ConnectionError.\ntry:\n    # Replace with your Elasticsearch host if different. This will attempt connection.\n    client = Elasticsearch(\"http://localhost:9200\") \n    print(\"Attempting to ping Elasticsearch...\")\n    if client.ping():\n        print(\"Elasticsearch connection successful! Spans should be visible.\")\n    else:\n        print(\"Could not ping Elasticsearch. Check its status.\")\n    \n    # Example of an index operation that will also be traced\n    print(\"Indexing a document...\")\n    client.index(index=\"my-test-index\", id=1, document={\"message\": \"hello opentelemetry\"})\n    print(\"Document indexed. Check for additional spans.\")\n\nexcept ConnectionError as e:\n    print(f\"Could not connect to Elasticsearch: {e}\")\n    print(\"Spans for the connection attempt should still be generated, even if it failed.\")\nexcept Exception as e:\n    print(f\"An unexpected error occurred: {e}\")\n\nfinally:\n    # Ensure all spans are exported before exiting\n    tracer_provider.shutdown()\n","lang":"python","description":"This quickstart configures a basic OpenTelemetry SDK with a `ConsoleSpanExporter` to print traces to the console. It then instruments the Elasticsearch client and attempts a `ping()` and `index()` operation. Spans representing these operations will be generated and printed to stdout. It includes error handling for cases where an Elasticsearch instance is not running.","tag":null,"tag_description":null,"last_tested":"2026-04-25","results":[{"runtime":"python:3.10-alpine","exit_code":1},{"runtime":"python:3.10-slim","exit_code":1},{"runtime":"python:3.11-alpine","exit_code":1},{"runtime":"python:3.11-slim","exit_code":1},{"runtime":"python:3.12-alpine","exit_code":1},{"runtime":"python:3.12-slim","exit_code":1},{"runtime":"python:3.13-alpine","exit_code":1},{"runtime":"python:3.13-slim","exit_code":1},{"runtime":"python:3.9-alpine","exit_code":1},{"runtime":"python:3.9-slim","exit_code":1}]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-14","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.9,"avg_import_s":1.78,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"opentelemetry-instrumentation-elasticsearch","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.26,"mem_mb":21.2,"disk_size":"65.5M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"opentelemetry-instrumentation-elasticsearch","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.54,"mem_mb":21,"disk_size":"65.3M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"opentelemetry-instrumentation-elasticsearch","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":6.5,"import_time_s":0.84,"mem_mb":21.2,"disk_size":"63M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"opentelemetry-instrumentation-elasticsearch","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.94,"mem_mb":21,"disk_size":"63M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"opentelemetry-instrumentation-elasticsearch","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":2.04,"mem_mb":23.1,"disk_size":"71.0M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"opentelemetry-instrumentation-elasticsearch","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":2.55,"mem_mb":22.9,"disk_size":"70.8M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"opentelemetry-instrumentation-elasticsearch","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":5.8,"import_time_s":1.81,"mem_mb":23.1,"disk_size":"69M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"opentelemetry-instrumentation-elasticsearch","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":2.04,"mem_mb":22.9,"disk_size":"69M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"opentelemetry-instrumentation-elasticsearch","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":2.01,"mem_mb":22.9,"disk_size":"62.3M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"opentelemetry-instrumentation-elasticsearch","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":2.31,"mem_mb":22.7,"disk_size":"62.0M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"opentelemetry-instrumentation-elasticsearch","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.8,"import_time_s":2.2,"mem_mb":22.9,"disk_size":"60M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"opentelemetry-instrumentation-elasticsearch","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":2.59,"mem_mb":22.7,"disk_size":"60M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"opentelemetry-instrumentation-elasticsearch","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.99,"mem_mb":23.6,"disk_size":"61.8M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"opentelemetry-instrumentation-elasticsearch","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":2.49,"mem_mb":23.4,"disk_size":"61.5M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"opentelemetry-instrumentation-elasticsearch","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.9,"import_time_s":2.01,"mem_mb":23.6,"disk_size":"60M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"opentelemetry-instrumentation-elasticsearch","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":2.48,"mem_mb":23.4,"disk_size":"59M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"opentelemetry-instrumentation-elasticsearch","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.05,"mem_mb":20.7,"disk_size":"62.9M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"opentelemetry-instrumentation-elasticsearch","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.26,"mem_mb":20.6,"disk_size":"62.9M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"opentelemetry-instrumentation-elasticsearch","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":7.3,"import_time_s":0.98,"mem_mb":20.7,"disk_size":"61M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"opentelemetry-instrumentation-elasticsearch","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.19,"mem_mb":20.6,"disk_size":"61M"}]}}