Skip to main content
Using a coding agent? Paste this prompt directly in your voice agent codebase to jumpstart your Cekura OTel integration.

Overview

OpenTelemetry (OTel) tracing gives you deep visibility into your voice agent’s execution - every LLM call, TTS request, STT transcription, and tool invocation captured as spans with timing, token usage, and metadata. Once traces are flowing into Cekura, you can:
  • View span timelines and waterfall diagrams for each call
  • Identify latency bottlenecks (slow LLM responses, TTS delays)
  • Track token usage and model performance across calls
  • Debug tool call failures with full input/output context
Using Pipecat? The Cekura Python SDK instruments your pipeline automatically - no manual setup needed. See the Pipecat Tracing guide.

Prerequisites

  • A Cekura account with an API key
  • An Agent ID or Project ID from the Cekura dashboard
  • Python 3.8+ (examples use Python, but any OTel-compatible language works)

Install Dependencies

Endpoints

Authentication

Every request to the OTel endpoint requires two headers: * Provide either x-cekura-agent-id or x-cekura-project-id. These are passed as exporter headers (HTTP) or gRPC metadata, not as span attributes.

Setup

1

Configure the OTel exporter

Set up the exporter with your Cekura credentials:
2

Instrument your agent code

Create spans around each service call in your agent. Use the span names from the naming conventions for best results in the Cekura UI.
3

Capture the trace ID

Extract the trace ID from your root span - you’ll need this to correlate the trace with the call log in Cekura.
4

Send the trace ID with your call log

When sending the call log to Cekura via the Send Calls API, include the trace_id field. This links the OTel trace to the call in the dashboard.
Once the call log is submitted with a trace_id, the trace will be visible in the call details page in the Cekura dashboard.

Span Naming Conventions

Cekura recognizes these span names and renders them with specialized UI: Custom span names work too - they just won’t have specialized styling in the UI.
Use s2s when a single realtime model handles the full audio-in/audio-out turn (e.g. OpenAI Realtime, Gemini Live), instead of a cascading sttllmtts pipeline:
For workflows that require audit-grade explainability — capturing the reasoning behind individual agent decisions, not just pass/fail outcomes — see Decision-Level Reasoning and Explainability in the FAQ.

Example: Full Voice Agent

Here’s a complete example showing a voice agent with OTel tracing and Cekura integration:

Next Steps

  • Pipecat Tracing - auto-instrumentation for Pipecat agents
  • Send Calls API - full API reference for the observe endpoint
  • Custom Metrics - evaluate agent performance from your call data
  • Cekura MCP Server - use MCP tools to create tests, run simulations, and monitor production calls directly from your IDE or AI assistant