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
589 lines (588 loc) • 21.9 kB
JSON
{
"title": "Tool Performance",
"description": "Tier 3b Tool Analytics — tool reliability ranking, latency analysis, error rates, bar gauge leaderboards, per-tool performance over time, and tool traces with Tempo correlation.",
"tags": ["openclaw", "grafana-lens", "tool-performance"],
"timezone": "browser",
"editable": true,
"schemaVersion": 39,
"time": { "from": "now-24h", "to": "now" },
"refresh": "30s",
"links": [
{
"title": "LLM Command Center",
"tags": ["openclaw", "grafana-lens", "command-center"],
"type": "dashboards",
"asDropdown": false,
"icon": "external link"
},
{
"title": "Session Explorer",
"tags": ["openclaw", "grafana-lens", "session-explorer"],
"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": "tool",
"label": "Tool",
"type": "query",
"datasource": { "type": "prometheus", "uid": "$prometheus" },
"query": "label_values(openclaw_lens_tool_calls_total, tool)",
"includeAll": true,
"allValue": ".*",
"current": { "text": "All", "value": "$__all" },
"refresh": 2,
"multi": true,
"hide": 0
}
]
},
"panels": [
{
"id": 1,
"title": "Tool Overview",
"type": "row",
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 },
"collapsed": false,
"panels": []
},
{
"id": 2,
"title": "Total Tool Calls",
"description": "Total tool calls over the selected range.",
"type": "stat",
"gridPos": { "h": 4, "w": 6, "x": 0, "y": 1 },
"datasource": { "type": "prometheus", "uid": "$prometheus" },
"targets": [
{
"expr": "sum(increase(openclaw_lens_tool_calls_total{tool=~\"$tool\"}[$__range])) or vector(0)",
"legendFormat": "total",
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "short",
"decimals": 0,
"noValue": "0"
}
},
"options": {
"graphMode": "area"
}
},
{
"id": 3,
"title": "Error Rate %",
"description": "Tool error rate as a percentage over the selected range.",
"type": "stat",
"gridPos": { "h": 4, "w": 6, "x": 6, "y": 1 },
"datasource": { "type": "prometheus", "uid": "$prometheus" },
"targets": [
{
"expr": "sum(increase(openclaw_lens_tool_calls_total{status=\"error\", tool=~\"$tool\"}[$__range])) / sum(increase(openclaw_lens_tool_calls_total{tool=~\"$tool\"}[$__range])) * 100",
"legendFormat": "error %",
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "percent",
"decimals": 1,
"thresholds": {
"mode": "absolute",
"steps": [
{ "color": "green", "value": null },
{ "color": "yellow", "value": 1 },
{ "color": "red", "value": 5 }
]
},
"noValue": "0%"
}
},
"options": {
"graphMode": "area",
"colorMode": "background"
}
},
{
"id": 4,
"title": "P95 Tool Latency",
"description": "95th percentile tool call duration.",
"type": "stat",
"gridPos": { "h": 4, "w": 6, "x": 12, "y": 1 },
"datasource": { "type": "prometheus", "uid": "$prometheus" },
"targets": [
{
"expr": "histogram_quantile(0.95, sum(rate(openclaw_lens_tool_duration_ms_bucket{tool=~\"$tool\"}[5m])) by (le))",
"legendFormat": "p95",
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "ms",
"decimals": 0,
"thresholds": {
"mode": "absolute",
"steps": [
{ "color": "green", "value": null },
{ "color": "yellow", "value": 1000 },
{ "color": "red", "value": 5000 }
]
},
"noValue": "No tool calls yet"
}
},
"options": {
"graphMode": "area",
"colorMode": "background"
}
},
{
"id": 5,
"title": "Active Tool Loops",
"description": "Currently active tool loop detections (warning + critical level).",
"type": "stat",
"gridPos": { "h": 4, "w": 6, "x": 18, "y": 1 },
"datasource": { "type": "prometheus", "uid": "$prometheus" },
"targets": [
{
"expr": "sum(openclaw_lens_tool_loops_active) or vector(0)",
"legendFormat": "loops",
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "short",
"decimals": 0,
"thresholds": {
"mode": "absolute",
"steps": [
{ "color": "green", "value": null },
{ "color": "red", "value": 1 }
]
},
"noValue": "0"
}
},
"options": {
"graphMode": "none",
"colorMode": "background"
}
},
{
"id": 6,
"title": "Tool Leaderboard",
"type": "row",
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 5 },
"collapsed": false,
"panels": []
},
{
"id": 7,
"title": "Most Used Tools",
"description": "Top 15 tools by call count over the selected range.",
"type": "bargauge",
"gridPos": { "h": 10, "w": 12, "x": 0, "y": 6 },
"datasource": { "type": "prometheus", "uid": "$prometheus" },
"targets": [
{
"expr": "topk(15, sum by (tool) (increase(openclaw_lens_tool_calls_total[$__range])))",
"legendFormat": "{{tool}}",
"refId": "A",
"instant": true
}
],
"fieldConfig": {
"defaults": {
"unit": "short",
"decimals": 0,
"thresholds": {
"mode": "absolute",
"steps": [
{ "color": "blue", "value": null }
]
}
}
},
"options": {
"orientation": "horizontal",
"displayMode": "gradient",
"showUnfilled": false,
"reduceOptions": { "calcs": ["lastNotNull"] }
}
},
{
"id": 8,
"title": "Slowest Tools (P95)",
"description": "Top 10 tools by P95 latency. Identifies performance bottlenecks.",
"type": "bargauge",
"gridPos": { "h": 10, "w": 12, "x": 12, "y": 6 },
"datasource": { "type": "prometheus", "uid": "$prometheus" },
"targets": [
{
"expr": "topk(10, histogram_quantile(0.95, sum by (le, tool) (rate(openclaw_lens_tool_duration_ms_bucket[5m]))))",
"legendFormat": "{{tool}}",
"refId": "A",
"instant": true
}
],
"fieldConfig": {
"defaults": {
"unit": "ms",
"decimals": 0,
"thresholds": {
"mode": "absolute",
"steps": [
{ "color": "green", "value": null },
{ "color": "yellow", "value": 1000 },
{ "color": "red", "value": 5000 }
]
}
}
},
"options": {
"orientation": "horizontal",
"displayMode": "gradient",
"showUnfilled": false,
"reduceOptions": { "calcs": ["lastNotNull"] }
}
},
{
"id": 9,
"title": "Performance Over Time",
"type": "row",
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 16 },
"collapsed": false,
"panels": []
},
{
"id": 10,
"title": "Tool Latency by Tool (P95)",
"description": "P95 latency per tool over time, filtered by the $tool variable.",
"type": "timeseries",
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 17 },
"datasource": { "type": "prometheus", "uid": "$prometheus" },
"targets": [
{
"expr": "histogram_quantile(0.95, sum(rate(openclaw_lens_tool_duration_ms_bucket{tool=~\"$tool\"}[5m])) by (le, tool))",
"legendFormat": "{{tool}}",
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "ms",
"custom": {
"drawStyle": "line",
"fillOpacity": 10,
"spanNulls": true
}
}
},
"options": {
"legend": {
"displayMode": "table",
"placement": "bottom",
"calcs": ["lastNotNull", "mean", "max"]
}
}
},
{
"id": 11,
"title": "Tool Error Rate by Tool",
"description": "Per-tool error rate over time. Red threshold at 0.01/s.",
"type": "timeseries",
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 17 },
"datasource": { "type": "prometheus", "uid": "$prometheus" },
"targets": [
{
"expr": "sum(rate(openclaw_lens_tool_calls_total{status=\"error\", tool=~\"$tool\"}[5m])) by (tool)",
"legendFormat": "{{tool}}",
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "cps",
"custom": {
"drawStyle": "line",
"fillOpacity": 10,
"spanNulls": true
},
"thresholds": {
"mode": "absolute",
"steps": [
{ "color": "green", "value": null },
{ "color": "red", "value": 0.01 }
]
}
}
},
"options": {
"legend": {
"displayMode": "table",
"placement": "bottom",
"calcs": ["lastNotNull", "mean", "max"]
}
}
},
{
"id": 12,
"title": "Tool Traces & Logs",
"type": "row",
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 25 },
"collapsed": false,
"panels": []
},
{
"id": 13,
"title": "Recent Tool Calls",
"description": "Tool call log events with trace correlation. Click a log line to view the full trace in Tempo.",
"type": "logs",
"gridPos": { "h": 10, "w": 12, "x": 0, "y": 26 },
"datasource": { "type": "loki", "uid": "$loki" },
"targets": [
{
"expr": "{service_name=\"openclaw\"} | event_name=\"tool.call\"",
"refId": "A"
}
],
"options": {
"showTime": true,
"showLabels": false,
"showCommonLabels": false,
"wrapLogMessage": true,
"prettifyLogMessage": false,
"enableLogDetails": true,
"sortOrder": "Descending",
"dedupStrategy": "none"
},
"fieldConfig": {
"defaults": {
"links": [
{
"title": "View trace in Tempo",
"url": "",
"internal": {
"datasourceUid": "${tempo}",
"datasourceName": "Tempo",
"query": { "queryType": "traceql", "query": "${__data.fields.trace_id}" }
}
},
{
"title": "Explore session in Session Explorer",
"url": "/dashboards?tag=session-explorer&var-session=${__data.fields.openclaw_session_id}",
"targetBlank": true
}
]
}
}
},
{
"id": 14,
"title": "Tool Traces",
"description": "execute_tool spans from Tempo. Click to drill into full trace hierarchy showing parent LLM call and session context.\n\nRequires Tempo search. If empty, check Tempo config or click trace_id links in log panels.",
"type": "table",
"gridPos": { "h": 10, "w": 12, "x": 12, "y": 26 },
"datasource": { "type": "tempo", "uid": "$tempo" },
"targets": [
{
"queryType": "traceql",
"query": "{resource.service.name=\"openclaw\" && resource.service.namespace=\"grafana-lens\" && name=~\"execute_tool.*\"}",
"limit": 20,
"tableType": "traces",
"refId": "A"
}
]
},
{
"id": 15,
"title": "GenAI Tool Analytics",
"type": "row",
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 36 },
"collapsed": false,
"panels": []
},
{
"id": 16,
"title": "Tool Calls by Model",
"description": "Which models trigger which tools. Extracted from Loki tool.call events with model context from the parent LLM call.",
"type": "table",
"gridPos": { "h": 8, "w": 8, "x": 0, "y": 37 },
"datasource": { "type": "loki", "uid": "$loki" },
"targets": [
{
"expr": "{service_name=\"openclaw\"} | event_name=\"tool.call\"",
"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,
"tool_param_keys": true,
"tool_error": true,
"tool_duration_ms": true,
"labelTypes": true,
"flags": true
},
"indexByName": {
"Time": 0,
"gen_ai_tool_name": 1,
"gen_ai_request_model": 2
}
}
}
],
"fieldConfig": {
"defaults": {},
"overrides": [
{
"matcher": { "id": "byName", "options": "gen_ai_tool_name" },
"properties": [{ "id": "displayName", "value": "Tool" }]
},
{
"matcher": { "id": "byName", "options": "gen_ai_request_model" },
"properties": [{ "id": "displayName", "value": "Model" }]
}
]
},
"options": {
"showHeader": true,
"sortBy": [{ "displayName": "Time", "desc": true }]
}
},
{
"id": 17,
"title": "Tool Error Traces",
"description": "Failed tool executions from Tempo. Click to see error details and trace context.\n\nRequires Tempo search. If empty, check Tempo config or click trace_id links in log panels.",
"type": "table",
"gridPos": { "h": 8, "w": 8, "x": 8, "y": 37 },
"datasource": { "type": "tempo", "uid": "$tempo" },
"targets": [
{
"queryType": "traceql",
"query": "{resource.service.name=\"openclaw\" && resource.service.namespace=\"grafana-lens\" && name=~\"execute_tool.*\" && status = error}",
"limit": 20,
"tableType": "traces",
"refId": "A"
}
]
},
{
"id": 18,
"title": "Tool Duration Heatmap",
"description": "Distribution of tool call durations over time. Darker = more tool calls at that latency.",
"type": "heatmap",
"gridPos": { "h": 8, "w": 8, "x": 16, "y": 37 },
"datasource": { "type": "prometheus", "uid": "$prometheus" },
"targets": [
{
"expr": "sum(increase(openclaw_lens_tool_duration_ms_bucket{tool=~\"$tool\"}[$__rate_interval])) by (le)",
"legendFormat": "{{le}}",
"refId": "A",
"format": "heatmap"
}
],
"options": {
"calculate": false,
"yAxis": {
"unit": "ms"
},
"color": {
"scheme": "Oranges",
"mode": "scheme"
},
"cellGap": 1
}
}
]
}