Skip to content

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

pip install traceloop-sdk openai

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_tokens
  • gen_ai.prompt.0.role, gen_ai.prompt.0.content, gen_ai.prompt.1.role, gen_ai.prompt.1.content
  • gen_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.