Cookbook
Practical query recipes for common ROS2 observability tasks. Copy, adapt, and run against your telemetry data.
Basic queries
Find all error spans
FROM traces WHERE status = 'ERROR'
Error logs at a specific severity
FROM logs WHERE severity = 'ERROR'
Slowest actions (last hour)
SELECT span_name, duration
FROM traces
WHERE action_name = '/navigate_to_pose' AND duration > 500 ms
SINCE 1 hour ago
ORDER BY duration DESC
LIMIT 20
Filter by ROS2 node
FROM traces WHERE node = '/bt_navigator'
Robot-scoped query
FOR ROBOT 'robot_sim_001' FROM logs WHERE severity = 'ERROR'
Read topic messages
FROM topics WHERE topic_name = '/battery_state' AND fields['percentage'] < 20
Topic alias
-- Shorthand for: FROM topics WHERE topic_name = '/odom'
FROM odom LIMIT 5
Cross-signal correlation
Navigation failures during low battery
SELECT trace_id, span_name_col, service_name, duration, status_code, span_attributes
FROM traces
WHERE status = 'ERROR' AND action_name = '/navigate_to_pose'
DURING(
FROM topics WHERE topic_name = '/battery_state'
AND fields['percentage'] < 15
)
SINCE 6 hours ago
Errors during high CPU load
FROM traces WHERE status = 'ERROR'
DURING(
FROM metrics WHERE metric_name = 'system.cpu.total_usage_pct'
AND metric_value > 90
)
SINCE yesterday
Causality and message tracing
Trace full message causality chain
MESSAGE JOURNEY FOR TRACE 'a3f1c9d2e8b04f7a'
Returns all spans in the causal chain by walking parent_span_id → span_id recursively.
Find message paths for a topic
MESSAGE PATHS FOR TOPIC '/cmd_vel'
Shows which nodes published and subscribed to /cmd_vel.
All spans for a specific trace
TRACE 'trace-002'
Robot health and anomaly detection
Robot health assessment
HEALTH() FOR ROBOT 'robot_sim_001'
Fan-out across traces, logs, and metrics to produce an overall health assessment.
Detect statistical anomalies in span duration
ANOMALY(duration)
Uses z-score (AVG/STDDEV) to find outlier spans — spans whose duration deviates significantly from the mean.
Path deviation
PATH DEVIATION FOR ROBOT 'robot_sim_001'
Queries /odom trajectory data from topic_messages to detect if the robot deviated from its planned path.
MCAP recordings
SHOW RECORDING was never implementedSHOW RECORDING was reserved syntax in v0.3 but the compiler never supported it. Use FROM recordings (available in v0.4+) to query recording metadata.
Pipeline syntax
Pipeline syntax uses | to chain stages, making complex queries more readable:
Find slow error spans, grouped by robot
FROM traces
| WHERE duration > 500 ms
| WHERE status = 'ERROR'
| FACET robot_id
Navigation failures vs. last week
FROM traces
| WHERE action_name = '/navigate_to_pose'
| WHERE status = 'ERROR'
| FACET robot_id
| COMPARE TO last week
Log analysis with ordering
FROM logs
| WHERE severity IN ('ERROR', 'WARN')
| ORDER BY severity DESC
| LIMIT 20
Time-series and aggregations
Average span duration per robot
SELECT AVG(duration) FROM traces FACET robot_id
Error count by severity
SELECT COUNT(*) FROM logs WHERE severity = 'ERROR' FACET robot_id
Percentile latency for navigation
SELECT PERCENTILE(duration, 95) FROM traces WHERE action_name = '/navigate_to_pose'
Multiple aggregations
SELECT AVG(duration) AS avg_dur, MAX(duration) AS max_dur, COUNT(*) AS total FROM traces
See also
- Command Reference → — full syntax for every ROSQL statement
- Schema Reference → — table structure ROSQL expects
- Examples page → — killer demos with detailed explanations