OpenLLMetry (Traceloop) — Python
The most popular community instrumentation. Auto-instruments OpenAI calls with zero code changes.
Before you start
These examples export to a local OpenTelemetry Collector over OTLP/gRPC. Deploy the collector first — see Code examples → Deploy an OpenTelemetry Collector.
Warning
OpenLLMetry currently uses legacy semconv (gen_ai.prompt / gen_ai.completion indexed attributes). Migration to new is tracked in issue #3515. Coralogix AI Center supports both.
Install
Environment variables
export OPENAI_API_KEY="<YOUR_OPENAI_API_KEY>"
export TRACELOOP_BASE_URL="http://<COLLECTOR_HOST>:4317/v1/traces"
export TRACELOOP_TRACE_CONTENT="true"
export OTEL_RESOURCE_ATTRIBUTES="cx.application.name=my-genai-app,cx.subsystem.name=my-service"
Script
from openai import OpenAI
from traceloop.sdk import Traceloop # OTel: Traceloop auto-instruments OpenAI
Traceloop.init() # OTel: reads TRACELOOP_BASE_URL, TRACELOOP_HEADERS from env
# Your app logic
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "You are a concise assistant."},
{"role": "user", "content": "What is OpenTelemetry in one sentence?"},
],
max_tokens=100,
)
print(response.choices[0].message.content)
Expected span attributes (legacy semconv)
gen_ai.system="openai"gen_ai.request.model="gpt-4o-mini"gen_ai.usage.prompt_tokens,gen_ai.usage.completion_tokensgen_ai.prompt.0.role,gen_ai.prompt.0.content,gen_ai.prompt.1.role,gen_ai.prompt.1.contentgen_ai.completion.0.role,gen_ai.completion.0.content
Next steps
Look up which open-source library to use for your provider in Compatibility matrix.
Theme
Light