Open the Grafana Tempo datasource explore view and switch to TraceQL query mode
Write a span-set pipeline query: { .http.method = "POST" && .http.status_code >= 500 } to find error spans with specific attributes
Add duration filters: { duration > 500ms } to filter spans exceeding a latency threshold independent of attribute values
Use the select() operator to project specific attributes into the result for aggregation: { status = error } | select(.db.statement, .service.name)
Combine span filters with a trace-level filter using the >> operator to find traces where a specific span precedes another: { .span.kind = client } >> { status = error }
Known gotchas
TraceQL attribute lookups are case-sensitive; .http.Method does not match .http.method even if they represent the same semantic attribute
Without a time range constraint, large TraceQL queries scan the entire Tempo index and can time out; always apply a time range in the Grafana query UI
The >> (followed-by) operator is a trace-scoped structural query and requires Tempo to evaluate full traces; it is significantly more expensive than simple span attribute queries
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp