openclaw-grafana-lens
Version:
OpenClaw plugin that gives AI agents full Grafana access — 18 composable tools for PromQL/LogQL/TraceQL queries, dashboard creation, alerting, SRE investigation, security monitoring, data collection pipeline management via Grafana Alloy (29 recipes), and
1,158 lines (1,157 loc) • 72 kB
JSON
{
"title": "Session Explorer",
"description": "Per-session deep-dive — select a session to see its full trace hierarchy, every LLM call, tool call, conversation flow, and cost breakdown. The killer feature for debugging AI agent behavior.",
"tags": ["openclaw", "grafana-lens", "session-explorer"],
"timezone": "browser",
"editable": true,
"schemaVersion": 39,
"time": { "from": "now-24h", "to": "now" },
"refresh": "",
"links": [
{
"title": "LLM Command Center",
"tags": ["openclaw", "grafana-lens", "command-center"],
"type": "dashboards",
"asDropdown": false,
"icon": "external link"
},
{
"title": "Cost Intelligence",
"tags": ["openclaw", "grafana-lens", "cost-intelligence"],
"type": "dashboards",
"asDropdown": false,
"icon": "external link"
},
{
"title": "SRE Operations",
"tags": ["openclaw", "grafana-lens", "sre-operations"],
"type": "dashboards",
"asDropdown": false,
"icon": "external link"
},
{
"title": "GenAI Observability",
"tags": ["openclaw", "grafana-lens", "genai-observability"],
"type": "dashboards",
"asDropdown": false,
"icon": "external link"
},
{
"title": "OpenClaw Dashboards",
"tags": ["openclaw", "grafana-lens"],
"type": "dashboards",
"asDropdown": true,
"icon": "external link"
}
],
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": { "type": "grafana", "uid": "-- Grafana --" },
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
}
]
},
"templating": {
"list": [
{
"name": "prometheus",
"label": "Prometheus",
"type": "datasource",
"query": "prometheus",
"current": {},
"hide": 0
},
{
"name": "loki",
"label": "Loki",
"type": "datasource",
"query": "loki",
"current": {},
"hide": 0
},
{
"name": "tempo",
"label": "Tempo",
"type": "datasource",
"query": "tempo",
"current": {},
"hide": 0
},
{
"name": "session",
"label": "Session ID",
"type": "textbox",
"current": { "text": "", "value": "" },
"hide": 0,
"description": "Click a session in the Recent Sessions table below, or paste a session ID here."
},
{
"name": "trace_id",
"type": "textbox",
"current": { "text": "", "value": "" },
"hide": 2
}
]
},
"panels": [
{
"id": 1,
"title": "Session Picker",
"type": "row",
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 },
"collapsed": false,
"panels": []
},
{
"id": 2,
"title": "Recent Sessions",
"description": "Click a session row to drill down. The Session ID column is clickable — it sets the $session variable automatically.",
"type": "table",
"gridPos": { "h": 6, "w": 24, "x": 0, "y": 1 },
"datasource": { "type": "loki", "uid": "$loki" },
"targets": [
{
"expr": "{service_name=\"openclaw\"} | event_name=\"usage.session_summary\" | openclaw_summary_type=\"final\" | openclaw_session_id!=\"\" | line_format \"{{.openclaw_session_id}}\"",
"refId": "A"
}
],
"transformations": [
{
"id": "extractFields",
"options": {
"source": "labels",
"format": "auto"
}
},
{
"id": "organize",
"options": {
"excludeByName": {
"Line": true,
"id": true,
"tsNs": true,
"labels": true,
"event_domain": true,
"event_name": true,
"component": true,
"span_id": true,
"service_name": true,
"detected_level": true,
"severity_number": true,
"severity_text": true,
"openclaw_summary_type": true,
"openclaw_session_key": true,
"openclaw_agent_id": true,
"openclaw_cache_hit_ratio": true,
"openclaw_cache_savings_usd": true,
"openclaw_cost_cache_read": true,
"openclaw_cost_cache_write": true,
"openclaw_cost_input": true,
"openclaw_cost_output": true,
"openclaw_latency_avg_ms": true,
"openclaw_latency_min_ms": true,
"openclaw_latency_max_ms": true,
"openclaw_latency_p95_ms": true,
"openclaw_messages_errors": true,
"openclaw_messages_tool_calls": true,
"openclaw_messages_tool_results": true,
"openclaw_tokens_cache_read": true,
"openclaw_tokens_cache_write": true,
"openclaw_tokens_input": true,
"openclaw_tokens_output": true,
"labelTypes": true,
"flags": true
},
"indexByName": {
"Time": 0,
"openclaw_session_id": 1,
"openclaw_is_subagent": 2,
"openclaw_parent_session_id": 3,
"gen_ai_request_model": 4,
"openclaw_messages_total": 5,
"openclaw_tools_total_calls": 6,
"openclaw_active_duration_ms": 7,
"openclaw_duration_ms": 8,
"openclaw_tokens_total": 9,
"openclaw_cost_total": 10,
"openclaw_latency_count": 11,
"openclaw_tools_unique_count": 12,
"openclaw_tools_top": 13,
"openclaw_messages_user": 14,
"openclaw_messages_assistant": 15,
"gen_ai_provider_name": 16,
"openclaw_child_count": 17,
"trace_id": 18
}
}
}
],
"fieldConfig": {
"defaults": {},
"overrides": [
{
"matcher": { "id": "byName", "options": "openclaw_session_id" },
"properties": [
{ "id": "displayName", "value": "Session ID" },
{
"id": "links",
"value": [
{
"title": "Select this session",
"url": "/d/${__dashboard.uid}?var-session=${__value.text}&var-trace_id=${__data.fields.trace_id}&${__url_time_range}"
}
]
}
]
},
{
"matcher": { "id": "byName", "options": "trace_id" },
"properties": [
{ "id": "custom.hidden", "value": true }
]
},
{
"matcher": { "id": "byName", "options": "openclaw_active_duration_ms" },
"properties": [
{ "id": "displayName", "value": "Active Time" },
{ "id": "unit", "value": "ms" }
]
},
{
"matcher": { "id": "byName", "options": "openclaw_duration_ms" },
"properties": [
{ "id": "displayName", "value": "Wall Clock" },
{ "id": "unit", "value": "ms" }
]
},
{
"matcher": { "id": "byName", "options": "openclaw_cost_total" },
"properties": [
{ "id": "displayName", "value": "Cost" },
{ "id": "unit", "value": "currencyUSD" }
]
},
{
"matcher": { "id": "byName", "options": "openclaw_tokens_total" },
"properties": [
{ "id": "displayName", "value": "Tokens" },
{ "id": "unit", "value": "short" }
]
},
{
"matcher": { "id": "byName", "options": "gen_ai_request_model" },
"properties": [{ "id": "displayName", "value": "Model" }]
},
{
"matcher": { "id": "byName", "options": "openclaw_messages_total" },
"properties": [
{ "id": "displayName", "value": "Messages" },
{ "id": "unit", "value": "short" }
]
},
{
"matcher": { "id": "byName", "options": "openclaw_tools_total_calls" },
"properties": [
{ "id": "displayName", "value": "Tool Calls" },
{ "id": "unit", "value": "short" }
]
},
{
"matcher": { "id": "byName", "options": "openclaw_latency_count" },
"properties": [
{ "id": "displayName", "value": "LLM Calls" },
{ "id": "unit", "value": "short" }
]
},
{
"matcher": { "id": "byName", "options": "openclaw_tools_unique_count" },
"properties": [
{ "id": "displayName", "value": "Unique Tools" },
{ "id": "unit", "value": "short" }
]
},
{
"matcher": { "id": "byName", "options": "openclaw_tools_top" },
"properties": [{ "id": "displayName", "value": "Top Tools" }]
},
{
"matcher": { "id": "byName", "options": "openclaw_messages_user" },
"properties": [
{ "id": "displayName", "value": "User Msgs" },
{ "id": "unit", "value": "short" }
]
},
{
"matcher": { "id": "byName", "options": "openclaw_messages_assistant" },
"properties": [
{ "id": "displayName", "value": "Assistant Msgs" },
{ "id": "unit", "value": "short" }
]
},
{
"matcher": { "id": "byName", "options": "gen_ai_provider_name" },
"properties": [{ "id": "displayName", "value": "Provider" }]
},
{
"matcher": { "id": "byName", "options": "openclaw_is_subagent" },
"properties": [
{ "id": "displayName", "value": "Type" },
{
"id": "mappings",
"value": [
{ "type": "value", "options": { "true": { "text": "Subagent", "color": "blue" } } },
{ "type": "special", "options": { "match": "null+nan", "result": { "text": "Root", "color": "green" } } }
]
},
{ "id": "custom.width", "value": 100 }
]
},
{
"matcher": { "id": "byName", "options": "openclaw_parent_session_id" },
"properties": [
{ "id": "displayName", "value": "Parent" },
{
"id": "links",
"value": [
{
"title": "Go to parent session",
"url": "/d/${__dashboard.uid}?var-session=${__value.text}&${__url_time_range}"
}
]
},
{ "id": "custom.width", "value": 120 }
]
},
{
"matcher": { "id": "byName", "options": "openclaw_child_count" },
"properties": [
{ "id": "displayName", "value": "Children" },
{ "id": "unit", "value": "short" },
{ "id": "custom.width", "value": 80 }
]
}
]
},
"options": {
"showHeader": true,
"sortBy": [{ "displayName": "Time", "desc": true }]
}
},
{
"id": 3,
"title": "Session Summary",
"type": "row",
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 7 },
"collapsed": false,
"panels": []
},
{
"id": 4,
"title": "Active Time",
"description": "Active processing time (LLM + tool calls), excluding idle time between user messages.",
"type": "stat",
"gridPos": { "h": 4, "w": 4, "x": 0, "y": 8 },
"datasource": { "type": "loki", "uid": "$loki" },
"targets": [
{
"expr": "max(last_over_time({service_name=\"openclaw\"} | event_name=\"usage.session_summary\" | openclaw_summary_type=\"final\" | openclaw_session_id=\"$session\" | openclaw_session_id!=\"\" | unwrap openclaw_active_duration_ms [$__range]))",
"legendFormat": "active time",
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "ms",
"decimals": 0,
"noValue": "Select a session"
}
},
"options": {
"graphMode": "none",
"reduceOptions": { "calcs": ["lastNotNull"] }
}
},
{
"id": 5,
"title": "Total Cost",
"description": "Session total cost in USD.",
"type": "stat",
"gridPos": { "h": 4, "w": 4, "x": 4, "y": 8 },
"datasource": { "type": "loki", "uid": "$loki" },
"targets": [
{
"expr": "max(last_over_time({service_name=\"openclaw\"} | event_name=\"usage.session_summary\" | openclaw_summary_type=\"final\" | openclaw_session_id=\"$session\" | openclaw_session_id!=\"\" | unwrap openclaw_cost_total [$__range]))",
"legendFormat": "cost",
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "currencyUSD",
"decimals": 4,
"noValue": "Select a session"
}
},
"options": {
"graphMode": "none",
"reduceOptions": { "calcs": ["lastNotNull"] }
}
},
{
"id": 6,
"title": "Total Tokens",
"description": "Total tokens consumed by this session.",
"type": "stat",
"gridPos": { "h": 4, "w": 4, "x": 8, "y": 8 },
"datasource": { "type": "loki", "uid": "$loki" },
"targets": [
{
"expr": "max(last_over_time({service_name=\"openclaw\"} | event_name=\"usage.session_summary\" | openclaw_summary_type=\"final\" | openclaw_session_id=\"$session\" | openclaw_session_id!=\"\" | unwrap openclaw_tokens_total [$__range]))",
"legendFormat": "tokens",
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "short",
"decimals": 0,
"noValue": "Select a session"
}
},
"options": {
"graphMode": "none",
"reduceOptions": { "calcs": ["lastNotNull"] }
}
},
{
"id": 7,
"title": "LLM Calls",
"description": "Number of LLM calls in this session.",
"type": "stat",
"gridPos": { "h": 4, "w": 4, "x": 12, "y": 8 },
"datasource": { "type": "loki", "uid": "$loki" },
"targets": [
{
"expr": "max(last_over_time({service_name=\"openclaw\"} | event_name=\"usage.session_summary\" | openclaw_summary_type=\"final\" | openclaw_session_id=\"$session\" | openclaw_session_id!=\"\" | unwrap openclaw_latency_count [$__range]))",
"legendFormat": "llm calls",
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "short",
"decimals": 0,
"noValue": "Select a session"
}
},
"options": {
"graphMode": "none",
"reduceOptions": { "calcs": ["lastNotNull"] }
}
},
{
"id": 8,
"title": "Tool Calls",
"description": "Total tool calls in this session.",
"type": "stat",
"gridPos": { "h": 4, "w": 4, "x": 16, "y": 8 },
"datasource": { "type": "loki", "uid": "$loki" },
"targets": [
{
"expr": "max(last_over_time({service_name=\"openclaw\"} | event_name=\"usage.session_summary\" | openclaw_summary_type=\"final\" | openclaw_session_id=\"$session\" | openclaw_session_id!=\"\" | unwrap openclaw_tools_total_calls [$__range]))",
"legendFormat": "tool calls",
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "short",
"decimals": 0,
"noValue": "Select a session"
}
},
"options": {
"graphMode": "none",
"reduceOptions": { "calcs": ["lastNotNull"] }
}
},
{
"id": 9,
"title": "Cache Hit %",
"description": "Token cache hit ratio for this session.",
"type": "stat",
"gridPos": { "h": 4, "w": 4, "x": 20, "y": 8 },
"datasource": { "type": "loki", "uid": "$loki" },
"targets": [
{
"expr": "max(last_over_time({service_name=\"openclaw\"} | event_name=\"usage.session_summary\" | openclaw_summary_type=\"final\" | openclaw_session_id=\"$session\" | openclaw_session_id!=\"\" | unwrap openclaw_cache_hit_ratio [$__range]))",
"legendFormat": "cache %",
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "percentunit",
"decimals": 0,
"noValue": "Select a session"
}
},
"options": {
"graphMode": "none",
"reduceOptions": { "calcs": ["lastNotNull"] }
}
},
{
"id": 10,
"title": "Session Trace",
"type": "row",
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 12 },
"collapsed": false,
"panels": []
},
{
"id": 11,
"title": "Session Trace Hierarchy",
"description": "Full invoke_agent → chat → execute_tool span hierarchy for this session. Requires a configured Tempo datasource — if empty, all session data is available in the panels below. Click spans to see attributes (token counts, model, cost, duration).",
"type": "traces",
"gridPos": { "h": 14, "w": 24, "x": 0, "y": 13 },
"datasource": { "type": "tempo", "uid": "$tempo" },
"targets": [
{
"queryType": "traceql",
"query": "${trace_id}",
"refId": "A"
}
]
},
{
"id": 12,
"title": "LLM Calls",
"type": "row",
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 27 },
"collapsed": false,
"panels": []
},
{
"id": 13,
"title": "LLM Call Log",
"description": "LLM input/output events for this session. Click for trace correlation.",
"type": "logs",
"gridPos": { "h": 10, "w": 12, "x": 0, "y": 28 },
"datasource": { "type": "loki", "uid": "$loki" },
"targets": [
{
"expr": "{service_name=\"openclaw\"} | event_name=~\"llm\\\\.(input|output)\" | openclaw_session_id=\"$session\" | openclaw_session_id!=\"\"",
"refId": "A"
}
],
"options": {
"showTime": true,
"showLabels": false,
"showCommonLabels": false,
"wrapLogMessage": true,
"prettifyLogMessage": false,
"enableLogDetails": true,
"sortOrder": "Ascending",
"dedupStrategy": "none"
},
"fieldConfig": {
"defaults": {
"links": [
{
"title": "View trace in Tempo",
"url": "",
"internal": {
"datasourceUid": "${tempo}",
"datasourceName": "Tempo",
"query": { "queryType": "traceql", "query": "${__data.fields.trace_id}" }
}
}
]
}
}
},
{
"id": 14,
"title": "Token Breakdown",
"description": "Per-LLM-call token breakdown: model, input/output/cache tokens, cost, and duration — sorted by cost descending.",
"type": "table",
"gridPos": { "h": 10, "w": 12, "x": 12, "y": 28 },
"datasource": { "type": "loki", "uid": "$loki" },
"targets": [
{
"expr": "{service_name=\"openclaw\"} | event_name=\"llm.output\" | openclaw_session_id=\"$session\" | openclaw_session_id!=\"\"",
"refId": "A"
}
],
"transformations": [
{
"id": "extractFields",
"options": {
"source": "labels",
"format": "auto"
}
},
{
"id": "organize",
"options": {
"excludeByName": {
"Line": true,
"id": true,
"tsNs": true,
"labels": true,
"event_domain": true,
"event_name": true,
"component": true,
"trace_id": true,
"span_id": true,
"service_name": true,
"detected_level": true,
"severity_number": true,
"severity_text": true,
"openclaw_session_id": true,
"openclaw_session_key": true,
"openclaw_run_id": true,
"openclaw_provider": true,
"openclaw_orphaned": true,
"gen_ai_operation_name": true,
"gen_ai_completion": true,
"openclaw_tokens_cache_write": true
},
"indexByName": {
"Time": 0,
"openclaw_model": 1,
"openclaw_tokens_input": 2,
"openclaw_tokens_output": 3,
"openclaw_tokens_cache_read": 4,
"openclaw_duration_s": 5
}
}
}
],
"fieldConfig": {
"defaults": {},
"overrides": [
{
"matcher": { "id": "byName", "options": "openclaw_model" },
"properties": [{ "id": "displayName", "value": "Model" }]
},
{
"matcher": { "id": "byName", "options": "openclaw_tokens_input" },
"properties": [
{ "id": "displayName", "value": "Input Tokens" },
{ "id": "unit", "value": "short" }
]
},
{
"matcher": { "id": "byName", "options": "openclaw_tokens_output" },
"properties": [
{ "id": "displayName", "value": "Output Tokens" },
{ "id": "unit", "value": "short" }
]
},
{
"matcher": { "id": "byName", "options": "openclaw_tokens_cache_read" },
"properties": [
{ "id": "displayName", "value": "Cache Read" },
{ "id": "unit", "value": "short" }
]
},
{
"matcher": { "id": "byName", "options": "openclaw_duration_s" },
"properties": [
{ "id": "displayName", "value": "Duration" },
{ "id": "unit", "value": "s" }
]
}
]
},
"options": {
"showHeader": true,
"sortBy": [{ "displayName": "Duration", "desc": true }]
}
},
{
"id": 15,
"title": "Tool Calls",
"type": "row",
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 38 },
"collapsed": false,
"panels": []
},
{
"id": 16,
"title": "Tool Call Log",
"description": "All tool call events for this session. Click for trace correlation.",
"type": "logs",
"gridPos": { "h": 10, "w": 12, "x": 0, "y": 39 },
"datasource": { "type": "loki", "uid": "$loki" },
"targets": [
{
"expr": "{service_name=\"openclaw\"} | event_name=\"tool.call\" | openclaw_session_id=\"$session\" | openclaw_session_id!=\"\"",
"refId": "A"
}
],
"options": {
"showTime": true,
"showLabels": false,
"showCommonLabels": false,
"wrapLogMessage": true,
"prettifyLogMessage": false,
"enableLogDetails": true,
"sortOrder": "Ascending",
"dedupStrategy": "none"
},
"fieldConfig": {
"defaults": {
"links": [
{
"title": "View trace in Tempo",
"url": "",
"internal": {
"datasourceUid": "${tempo}",
"datasourceName": "Tempo",
"query": { "queryType": "traceql", "query": "${__data.fields.trace_id}" }
}
}
]
}
}
},
{
"id": 17,
"title": "Tool Duration & Status",
"description": "Per-tool-call duration and status for this session.",
"type": "table",
"gridPos": { "h": 10, "w": 12, "x": 12, "y": 39 },
"datasource": { "type": "loki", "uid": "$loki" },
"targets": [
{
"expr": "{service_name=\"openclaw\"} | event_name=\"tool.call\" | openclaw_session_id=\"$session\" | openclaw_session_id!=\"\"",
"refId": "A"
}
],
"transformations": [
{
"id": "extractFields",
"options": {
"source": "labels",
"format": "auto"
}
},
{
"id": "organize",
"options": {
"excludeByName": {
"Line": true,
"id": true,
"tsNs": true,
"labels": true,
"event_domain": true,
"event_name": true,
"component": true,
"trace_id": true,
"span_id": true,
"service_name": true,
"detected_level": true,
"severity_number": true,
"severity_text": true,
"openclaw_session_id": true,
"openclaw_session_key": true,
"gen_ai_operation_name": true
},
"indexByName": {
"Time": 0,
"gen_ai_tool_name": 1,
"tool_duration_ms": 2,
"tool_param_keys": 3,
"tool_error": 4
}
}
}
],
"fieldConfig": {
"defaults": {},
"overrides": [
{
"matcher": { "id": "byName", "options": "gen_ai_tool_name" },
"properties": [{ "id": "displayName", "value": "Tool" }]
},
{
"matcher": { "id": "byName", "options": "tool_duration_ms" },
"properties": [
{ "id": "displayName", "value": "Duration" },
{ "id": "unit", "value": "ms" }
]
},
{
"matcher": { "id": "byName", "options": "tool_error" },
"properties": [{ "id": "displayName", "value": "Error" }]
},
{
"matcher": { "id": "byName", "options": "tool_param_keys" },
"properties": [{ "id": "displayName", "value": "Params" }]
}
]
},
"options": {
"showHeader": true,
"sortBy": [{ "displayName": "Time", "desc": false }]
}
},
{
"id": 18,
"title": "Conversation Flow",
"type": "row",
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 49 },
"collapsed": false,
"panels": []
},
{
"id": 19,
"title": "Full Conversation Narrative",
"description": "Complete conversation flow: user messages → LLM calls → tool calls → responses, in chronological order. Shows actual message content when otlp.captureContent is enabled (default). Click any line for trace correlation.",
"type": "logs",
"gridPos": { "h": 12, "w": 24, "x": 0, "y": 50 },
"datasource": { "type": "loki", "uid": "$loki" },
"targets": [
{
"expr": "{service_name=\"openclaw\"} | openclaw_session_id=\"$session\" | openclaw_session_id!=\"\" | event_name=~\"message\\\\.(received|sent)|llm\\\\.(input|output)|tool\\\\.call\" | line_format \"{{ if eq .event_name \\\"message.received\\\" }}[USER] {{ if .openclaw_content }}{{ .openclaw_content }}{{ else }}(message from {{ .openclaw_from }}){{ end }}{{ else if eq .event_name \\\"llm.input\\\" }}[LLM →] {{ .openclaw_model }} | history={{ .openclaw_history_length }}{{ if .gen_ai_prompt }} | {{ .gen_ai_prompt }}{{ end }}{{ else if eq .event_name \\\"llm.output\\\" }}[LLM ←] {{ .openclaw_model }} {{ .openclaw_duration_s }}s | {{ .openclaw_tokens_input }}in+{{ .openclaw_tokens_output }}out{{ if .gen_ai_completion }} | {{ .gen_ai_completion }}{{ end }}{{ else if eq .event_name \\\"tool.call\\\" }}[TOOL] {{ .gen_ai_tool_name }} {{ .tool_duration_ms }}ms{{ if .tool_error }} ERROR: {{ .tool_error }}{{ else }} | params: {{ .tool_param_keys }}{{ end }}{{ else if eq .event_name \\\"message.sent\\\" }}[ASSISTANT] {{ if .openclaw_content }}{{ .openclaw_content }}{{ else }}(sent to {{ .openclaw_to }}){{ end }}{{ else }}(event){{ end }}\"",
"refId": "A"
}
],
"options": {
"showTime": true,
"showLabels": false,
"showCommonLabels": false,
"wrapLogMessage": true,
"prettifyLogMessage": false,
"enableLogDetails": true,
"sortOrder": "Ascending",
"dedupStrategy": "none"
},
"fieldConfig": {
"defaults": {
"links": [
{
"title": "View trace in Tempo",
"url": "",
"internal": {
"datasourceUid": "${tempo}",
"datasourceName": "Tempo",
"query": { "queryType": "traceql", "query": "${__data.fields.trace_id}" }
}
}
]
}
}
},
{
"id": 30,
"title": "Trace & Latency Deep-Dive",
"type": "row",
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 62 },
"collapsed": false,
"panels": []
},
{
"id": 31,
"title": "Session Lifecycle Events",
"description": "Chronological lifecycle events for this session — session_start, llm.input, llm.output, tool.call, subagent.spawn, session_summary. Click trace IDs to open Tempo waterfall.",
"type": "logs",
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 63 },
"datasource": { "type": "loki", "uid": "$loki" },
"targets": [
{
"expr": "{service_name=\"openclaw\"} | component=\"lifecycle\" | openclaw_session_id=\"$session\" | openclaw_session_id!=\"\" | line_format \"[{{ .event_name }}] {{ __line__ }}\"",
"legendFormat": "",
"refId": "A"
}
],
"options": {
"showTime": true,
"showLabels": false,
"showCommonLabels": false,
"wrapLogMessage": true,
"prettifyLogMessage": false,
"enableLogDetails": true,
"sortOrder": "Ascending",
"dedupStrategy": "none"
}
},
{
"id": 32,
"title": "Tool Execution Timeline",
"description": "All tool calls for this session with tool name, duration, params, and errors. Click trace IDs to open Tempo waterfall.",
"type": "table",
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 63 },
"datasource": { "type": "loki", "uid": "$loki" },
"targets": [
{
"expr": "{service_name=\"openclaw\"} | event_name=\"tool.call\" | openclaw_session_id=\"$session\" | openclaw_session_id!=\"\"",
"legendFormat": "",
"refId": "A"
}
],
"transformations": [
{
"id": "extractFields",
"options": {
"source": "labels",
"format": "auto"
}
},
{
"id": "organize",
"options": {
"excludeByName": {
"id": true,
"tsNs": true,
"event_name": true,
"component": true,
"service_name": true,
"service_namespace": true,
"openclaw_session_id": true,
"openclaw_summary_type": true,
"detected_level": true,
"Line": true,
"labels": true
},
"indexByName": {
"Time": 0,
"gen_ai_tool_name": 1,
"tool_duration_ms": 2,
"tool_param_keys": 3,
"tool_error": 4,
"trace_id": 5
},
"renameByName": {
"gen_ai_tool_name": "Tool",
"tool_duration_ms": "Duration (ms)",
"tool_param_keys": "Params",
"tool_error": "Error",
"trace_id": "Trace"
}
}
}
],
"fieldConfig": {
"defaults": {},
"overrides": [
{
"matcher": { "id": "byName", "options": "Duration (ms)" },
"properties": [
{ "id": "unit", "value": "ms" },
{ "id": "decimals", "value": 0 }
]
},
{
"matcher": { "id": "byName", "options": "Error" },
"properties": [
{
"id": "custom.displayMode",
"value": "color-text"
},
{
"id": "color",
"value": { "mode": "fixed", "fixedColor": "red" }
}
]
}
]
},
"options": {
"showHeader": true,
"sortBy": [{ "displayName": "Time", "desc": false }]
}
},
{
"id": 33,
"title": "P50 Latency",
"description": "Median LLM call latency for this session.",
"type": "stat",
"gridPos": { "h": 4, "w": 8, "x": 0, "y": 71 },
"datasource": { "type": "loki", "uid": "$loki" },
"targets": [
{
"expr": "max(last_over_time({service_name=\"openclaw\"} | event_name=\"usage.session_summary\" | openclaw_summary_type=\"final\" | openclaw_session_id=\"$session\" | openclaw_session_id!=\"\" | unwrap openclaw_latency_avg_ms [$__range]))",
"legendFormat": "avg",
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "ms",
"decimals": 0,
"noValue": "Select a session"
}
},
"options": {
"graphMode": "none",
"reduceOptions": { "calcs": ["lastNotNull"] }
}
},
{
"id": 34,
"title": "P95 Latency",
"description": "95th percentile LLM call latency for this session.",
"type": "stat",
"gridPos": { "h": 4, "w": 8, "x": 8, "y": 71 },
"datasource": { "type": "loki", "uid": "$loki" },
"targets": [
{
"expr": "max(last_over_time({service_name=\"openclaw\"} | event_name=\"usage.session_summary\" | openclaw_summary_type=\"final\" | openclaw_session_id=\"$session\" | openclaw_session_id!=\"\" | unwrap openclaw_latency_p95_ms [$__range]))",
"legendFormat": "p95",
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "ms",
"decimals": 0,
"thresholds": {
"mode": "absolute",
"steps": [
{ "color": "green", "value": null },
{ "color": "yellow", "value": 5000 },
{ "color": "red", "value": 15000 }
]
},
"noValue": "Select a session"
}
},
"options": {
"graphMode": "none",
"colorMode": "background",
"reduceOptions": { "calcs": ["lastNotNull"] }
}
},
{
"id": 35,
"title": "Max Latency",
"description": "Maximum LLM call latency in this session.",
"type": "stat",
"gridPos": { "h": 4, "w": 8, "x": 16, "y": 71 },
"datasource": { "type": "loki", "uid": "$loki" },
"targets": [
{
"expr": "max(last_over_time({service_name=\"openclaw\"} | event_name=\"usage.session_summary\" | openclaw_summary_type=\"final\" | openclaw_session_id=\"$session\" | openclaw_session_id!=\"\" | unwrap openclaw_latency_max_ms [$__range]))",
"legendFormat": "max",
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "ms",
"decimals": 0,
"thresholds": {
"mode": "absolute",
"steps": [
{ "color": "green", "value": null },
{ "color": "yellow", "value": 10000 },
{ "color": "red", "value": 30000 }
]
},
"noValue": "Select a session"
}
},
"options": {
"graphMode": "none",
"colorMode": "background",
"reduceOptions": { "calcs": ["lastNotNull"] }
}
},
{
"id": 29,
"title": "Subagent Sessions",
"type": "row",
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 75 },
"collapsed": true,
"panels": [
{
"id": 27,
"title": "Parent Navigation",
"description": "If this session is a subagent, click to navigate to its parent session. Shows 'Not a subagent' when the selected session has no parent.",
"type": "table",
"gridPos": { "h": 4, "w": 24, "x": 0, "y": 63 },
"datasource": { "type": "loki", "uid": "$loki" },
"targets": [
{
"expr": "{service_name=\"openclaw\"} | event_name=\"usage.session_summary\" | openclaw_summary_type=\"final\" | openclaw_session_id=\"$session\" | openclaw_session_id!=\"\" | openclaw_is_subagent=\"true\"",
"refId": "A"
}
],
"transformations": [
{
"id": "extractFields",
"options": {
"source": "labels",
"format": "auto"
}
},
{
"id": "filterFieldsByName",
"options": {
"include": {
"pattern": "^openclaw_parent_session_id$"
}
}
}
],
"fieldConfig": {
"defaults": {
"noValue": "Not a subagent"
},
"overrides": [
{
"matcher": { "id": "byName", "options": "openclaw_parent_session_id" },
"properties": [
{ "id": "displayName", "value": "Parent Session ID" },
{
"id": "links",
"value": [
{
"title": "Go to parent session",
"url": "/d/${__dashboard.uid}?var-session=${__value.text}&${__url_time_range}"
}
]
}
]
}
]
},
"options": {
"showHeader": true
}
},
{
"id": 25,
"title": "Subagent Count",
"description": "Number of subagents spawned by this session.",
"type": "stat",
"gridPos": { "h": 4, "w": 8, "x": 0, "y": 66 },
"datasource": { "type": "loki", "uid": "$loki" },
"targets": [
{
"expr": "sum(count_over_time({service_name=\"openclaw\"} | event_name=\"subagent.linked\" | openclaw_parent_session_id=\"$session\" | openclaw_parent_session_id!=\"\" [$__range]))",
"legendFormat": "subagents",
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "short",
"decimals": 0,
"noValue": "No subagents"
}
},
"options": {
"graphMode": "none",
"reduceOptions": { "calcs": ["lastNotNull"] }
}