Turn it on
Build oneTelemetry for every call, and give it to the agent.
close does it. Leave Pipecat’s own enable_tracing off, or the call is traced twice.
Pick where the spans go
Change the sink. The rest of your code stays the same.Langfuse
Logfire
Coval
Datadog
Send the spans to an OpenTelemetry Collector. The Collector sends them to Datadog.collector.yaml
Any OpenTelemetry endpoint
Send to several at once
Pass more than one sink. Each one gets every span.Keep transcripts out
Addfilter=MetadataOnly() to a sink. It then gets timings and names, and no transcript or prompt. The other sinks still get everything.
What you see
- The call span holds the transcript and why the call ended.
- Each turn holds what the caller said, what the agent said and how long the reply took.
- Each model span holds the prompt the model really read, the tools and the tokens.
- A missing time is left out, never sent as 0.
Where to go next
Telemetry reference
Every helper, sink argument, span and attribute.
Dev records
What one call did, for the local dev page.
Settings
Every Langfuse, Logfire and Coval variable.
Tracing on Unmute
The
tracing key of agent.yaml, on the Unmute tab.