{ name = "agent.run" && duration > 10s }Runs that took too long, whatever the cause.
Start from the run, then open the step that held it.
Agent frameworks that emit OpenTelemetry spans land here without a plugin. Every step becomes a span, every model call carries its token counts and finish reason, and a run that stalls names the tool call it stalled on.
Included on the free tier: 20,000 active series, 50 GB of logs and 50 GB of traces a month. No card.
Agents it reads spans from
What you get
How it gets there
Point the framework’s exporter at the agent. The agent holds the credentials, not your application.
Point your framework’s OTLP exporter at the agent on 4317.
The agent forwards spans with the standard two headers.
Runs appear in Insights as traces you can search.
export OTEL_SERVICE_NAME=support-triage
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
python run_agent.pyWhat you can ask
Paste any of these into Insights, or use them as an alert rule.
{ name = "agent.run" && duration > 10s }Start from the run, then open the step that held it.
{ span.gen_ai.response.finish_reasons = "length" }Model calls that hit max tokens rather than finishing.
sum by (gen_ai_request_model) (
rate(gen_ai_client_token_usage_sum[1h]))Token usage per model, ready for your own rate.
Questions
Something not here? Talk to an engineer who works on the platform.
Book thirty minutesAny framework that exports OpenTelemetry spans, with no plugin to wait for. Point its OTLP exporter at the agent on 4317 and the run arrives as a trace. Where a provider SDK has no instrumentation package yet, wrap the call in a span of your own.
20,000 active series, 50 GB of logs and 50 GB of traces a month, 90-day retention, and the whole of Insights.