feat: add SigNoz dashboard JSON configs for agent and dashboard monitoring
Some checks failed
CI / Clippy (push) Successful in 4m46s
CI / Tests (push) Successful in 5m32s
CI / Deploy Agent (push) Has been cancelled
CI / Deploy Dashboard (push) Has been cancelled
CI / Deploy Docs (push) Has been cancelled
CI / Deploy MCP (push) Has been cancelled
CI / Detect Changes (push) Has been cancelled
CI / Format (push) Successful in 41s
CI / Security Audit (push) Successful in 1m55s

Two dashboards with ClickHouse queries matching our tracing instrumentation:
- compliance-agent: API handler latency/errors, scan pipeline stage durations,
  DAST/graph/chat API panels, and warn/error log tracking
- compliance-dashboard: server function performance, page load distribution,
  agent connectivity health, and error log monitoring

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Sharang Parnerkar
2026-03-11 09:29:48 +01:00
parent 99983c51e3
commit f84f69d1ea
2 changed files with 626 additions and 0 deletions

View File

@@ -0,0 +1,388 @@
{
"title": "Compliance Agent",
"description": "Monitoring dashboard for the compliance-agent service — API handlers, scan pipeline stages, and error tracking",
"tags": ["compliance", "agent", "api"],
"layout": [
{
"id": "row-overview",
"type": "row",
"title": "Overview",
"collapsed": false
},
{
"id": "panel-request-rate",
"type": "graph",
"title": "API Request Rate",
"description": "Requests per second across all compliance-agent endpoints",
"gridPos": { "x": 0, "y": 1, "w": 8, "h": 8 },
"query": {
"queryType": "builder",
"builder": {
"queryData": [
{
"dataSource": "traces",
"queryName": "A",
"aggregateOperator": "rate",
"aggregateAttribute": {
"key": "signoz_calls_total",
"dataType": "float64",
"type": "Sum",
"isMonotonic": true
},
"filters": {
"items": [
{
"key": { "key": "service.name", "dataType": "string", "type": "resource" },
"op": "=",
"value": "compliance-agent"
}
],
"op": "AND"
},
"groupBy": [],
"expression": "A",
"disabled": false
}
]
},
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT toStartOfInterval(timestamp, INTERVAL 1 MINUTE) AS ts, count() / 60 AS rps FROM signoz_traces.distributed_signoz_index_v3 WHERE serviceName = 'compliance-agent' AND timestamp >= now() - INTERVAL 1 HOUR GROUP BY ts ORDER BY ts"
}
]
},
"panelType": "time_series",
"unit": "ops/s"
},
{
"id": "panel-error-rate",
"type": "graph",
"title": "Error Rate",
"description": "Rate of errors (status_code >= 400 or hasError = true) per minute",
"gridPos": { "x": 8, "y": 1, "w": 8, "h": 8 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT toStartOfInterval(timestamp, INTERVAL 1 MINUTE) AS ts, countIf(hasError = true) AS errors, count() AS total, if(total > 0, errors * 100.0 / total, 0) AS error_pct FROM signoz_traces.distributed_signoz_index_v3 WHERE serviceName = 'compliance-agent' AND timestamp >= now() - INTERVAL 1 HOUR GROUP BY ts ORDER BY ts"
}
]
},
"panelType": "time_series",
"unit": "%"
},
{
"id": "panel-p99-latency",
"type": "graph",
"title": "API Latency (p50 / p95 / p99)",
"description": "Response time percentiles for compliance-agent API handlers",
"gridPos": { "x": 16, "y": 1, "w": 8, "h": 8 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT toStartOfInterval(timestamp, INTERVAL 1 MINUTE) AS ts, quantile(0.5)(durationNano) / 1e6 AS p50_ms, quantile(0.95)(durationNano) / 1e6 AS p95_ms, quantile(0.99)(durationNano) / 1e6 AS p99_ms FROM signoz_traces.distributed_signoz_index_v3 WHERE serviceName = 'compliance-agent' AND parentSpanID = '' AND timestamp >= now() - INTERVAL 1 HOUR GROUP BY ts ORDER BY ts"
}
]
},
"panelType": "time_series",
"unit": "ms"
},
{
"id": "row-api-handlers",
"type": "row",
"title": "API Handlers",
"collapsed": false
},
{
"id": "panel-handler-latency",
"type": "graph",
"title": "Handler Latency by Operation",
"description": "p95 latency per handler function name",
"gridPos": { "x": 0, "y": 10, "w": 12, "h": 10 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT toStartOfInterval(timestamp, INTERVAL 5 MINUTE) AS ts, name AS handler, quantile(0.95)(durationNano) / 1e6 AS p95_ms FROM signoz_traces.distributed_signoz_index_v3 WHERE serviceName = 'compliance-agent' AND name IN ('health', 'stats_overview', 'list_repositories', 'add_repository', 'trigger_scan', 'delete_repository', 'list_findings', 'get_finding', 'update_finding_status', 'bulk_update_finding_status', 'update_finding_feedback', 'list_sbom', 'sbom_filters', 'export_sbom', 'license_summary', 'sbom_diff', 'list_issues', 'list_scan_runs', 'get_ssh_public_key') AND timestamp >= now() - INTERVAL 3 HOUR GROUP BY ts, handler ORDER BY ts"
}
]
},
"panelType": "time_series",
"unit": "ms"
},
{
"id": "panel-handler-calls",
"type": "graph",
"title": "Handler Call Count by Operation",
"description": "Number of calls per handler over time",
"gridPos": { "x": 12, "y": 10, "w": 12, "h": 10 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT toStartOfInterval(timestamp, INTERVAL 5 MINUTE) AS ts, name AS handler, count() AS calls FROM signoz_traces.distributed_signoz_index_v3 WHERE serviceName = 'compliance-agent' AND name IN ('health', 'stats_overview', 'list_repositories', 'add_repository', 'trigger_scan', 'delete_repository', 'list_findings', 'get_finding', 'update_finding_status', 'list_sbom', 'sbom_filters', 'list_issues', 'list_scan_runs', 'get_ssh_public_key') AND timestamp >= now() - INTERVAL 3 HOUR GROUP BY ts, handler ORDER BY ts"
}
]
},
"panelType": "time_series",
"unit": ""
},
{
"id": "panel-handler-errors-table",
"type": "table",
"title": "Handler Errors (Last 24h)",
"description": "Handlers with the most errors in the last 24 hours",
"gridPos": { "x": 0, "y": 20, "w": 12, "h": 8 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT name AS handler, count() AS total_calls, countIf(hasError = true) AS errors, round(errors * 100.0 / total_calls, 2) AS error_pct, quantile(0.95)(durationNano) / 1e6 AS p95_ms FROM signoz_traces.distributed_signoz_index_v3 WHERE serviceName = 'compliance-agent' AND timestamp >= now() - INTERVAL 24 HOUR GROUP BY handler ORDER BY errors DESC LIMIT 20"
}
]
},
"panelType": "table"
},
{
"id": "panel-slow-requests",
"type": "table",
"title": "Slowest Requests (Last 1h)",
"description": "Top 20 slowest individual requests",
"gridPos": { "x": 12, "y": 20, "w": 12, "h": 8 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT name AS handler, traceID, durationNano / 1e6 AS duration_ms, toString(timestamp) AS time, hasError FROM signoz_traces.distributed_signoz_index_v3 WHERE serviceName = 'compliance-agent' AND parentSpanID = '' AND timestamp >= now() - INTERVAL 1 HOUR ORDER BY durationNano DESC LIMIT 20"
}
]
},
"panelType": "table"
},
{
"id": "row-scan-pipeline",
"type": "row",
"title": "Scan Pipeline",
"collapsed": false
},
{
"id": "panel-scan-pipeline-duration",
"type": "graph",
"title": "Scan Pipeline Stage Duration",
"description": "Time spent in each pipeline stage (SAST, SBOM, CVE, secrets, lint, graph, etc.)",
"gridPos": { "x": 0, "y": 29, "w": 16, "h": 10 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT toStartOfInterval(timestamp, INTERVAL 5 MINUTE) AS ts, name AS stage, quantile(0.95)(durationNano) / 1e9 AS p95_seconds FROM signoz_traces.distributed_signoz_index_v3 WHERE serviceName = 'compliance-agent' AND name IN ('run_pipeline', 'stage_sast', 'stage_sbom_generation', 'stage_cve_scanning', 'stage_pattern_scanning', 'stage_secret_detection', 'stage_lint_scanning', 'stage_code_review', 'stage_graph_building') AND timestamp >= now() - INTERVAL 6 HOUR GROUP BY ts, stage ORDER BY ts"
}
]
},
"panelType": "time_series",
"unit": "s"
},
{
"id": "panel-scan-count",
"type": "value",
"title": "Scans (24h)",
"description": "Total scan pipeline runs in the last 24 hours",
"gridPos": { "x": 16, "y": 29, "w": 4, "h": 5 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT count() AS scans FROM signoz_traces.distributed_signoz_index_v3 WHERE serviceName = 'compliance-agent' AND name = 'run' AND timestamp >= now() - INTERVAL 24 HOUR"
}
]
},
"panelType": "value"
},
{
"id": "panel-scan-errors",
"type": "value",
"title": "Failed Scans (24h)",
"description": "Scans that had errors",
"gridPos": { "x": 20, "y": 29, "w": 4, "h": 5 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT count() AS failed FROM signoz_traces.distributed_signoz_index_v3 WHERE serviceName = 'compliance-agent' AND name = 'run' AND hasError = true AND timestamp >= now() - INTERVAL 24 HOUR"
}
]
},
"panelType": "value"
},
{
"id": "panel-pipeline-runs-table",
"type": "table",
"title": "Recent Pipeline Runs",
"description": "Last 20 scan pipeline executions with duration and status",
"gridPos": { "x": 16, "y": 34, "w": 8, "h": 5 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT traceID, toString(timestamp) AS started, durationNano / 1e9 AS duration_sec, hasError, stringTagMap['repo_id'] AS repo_id, stringTagMap['trigger'] AS trigger FROM signoz_traces.distributed_signoz_index_v3 WHERE serviceName = 'compliance-agent' AND name = 'run' AND timestamp >= now() - INTERVAL 7 DAY ORDER BY timestamp DESC LIMIT 20"
}
]
},
"panelType": "table"
},
{
"id": "panel-stage-breakdown",
"type": "graph",
"title": "Pipeline Stage Error Rate",
"description": "Error rate per pipeline stage",
"gridPos": { "x": 0, "y": 39, "w": 12, "h": 8 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT name AS stage, count() AS total, countIf(hasError = true) AS errors, round(errors * 100.0 / total, 2) AS error_pct FROM signoz_traces.distributed_signoz_index_v3 WHERE serviceName = 'compliance-agent' AND name LIKE 'stage_%' AND timestamp >= now() - INTERVAL 24 HOUR GROUP BY stage ORDER BY error_pct DESC"
}
]
},
"panelType": "bar"
},
{
"id": "panel-stage-avg-duration",
"type": "graph",
"title": "Avg Stage Duration (Last 24h)",
"description": "Average time per pipeline stage",
"gridPos": { "x": 12, "y": 39, "w": 12, "h": 8 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT name AS stage, round(avg(durationNano) / 1e9, 2) AS avg_sec, round(quantile(0.95)(durationNano) / 1e9, 2) AS p95_sec, count() AS runs FROM signoz_traces.distributed_signoz_index_v3 WHERE serviceName = 'compliance-agent' AND name LIKE 'stage_%' AND timestamp >= now() - INTERVAL 24 HOUR GROUP BY stage ORDER BY avg_sec DESC"
}
]
},
"panelType": "bar"
},
{
"id": "row-graph-dast-chat",
"type": "row",
"title": "Graph / DAST / Chat APIs",
"collapsed": true
},
{
"id": "panel-graph-api",
"type": "graph",
"title": "Graph API Latency",
"description": "p95 latency for graph endpoints",
"gridPos": { "x": 0, "y": 48, "w": 8, "h": 8 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT toStartOfInterval(timestamp, INTERVAL 5 MINUTE) AS ts, name AS handler, quantile(0.95)(durationNano) / 1e6 AS p95_ms FROM signoz_traces.distributed_signoz_index_v3 WHERE serviceName = 'compliance-agent' AND name IN ('get_graph', 'get_nodes', 'get_communities', 'get_impact', 'search_symbols', 'get_file_content', 'trigger_build') AND timestamp >= now() - INTERVAL 3 HOUR GROUP BY ts, handler ORDER BY ts"
}
]
},
"panelType": "time_series",
"unit": "ms"
},
{
"id": "panel-dast-api",
"type": "graph",
"title": "DAST API Latency",
"description": "p95 latency for DAST endpoints",
"gridPos": { "x": 8, "y": 48, "w": 8, "h": 8 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT toStartOfInterval(timestamp, INTERVAL 5 MINUTE) AS ts, name AS handler, quantile(0.95)(durationNano) / 1e6 AS p95_ms FROM signoz_traces.distributed_signoz_index_v3 WHERE serviceName = 'compliance-agent' AND name IN ('list_targets', 'add_target', 'trigger_scan', 'list_scan_runs', 'list_findings', 'get_finding') AND stringTagMap['target_id'] != '' AND timestamp >= now() - INTERVAL 3 HOUR GROUP BY ts, handler ORDER BY ts"
}
]
},
"panelType": "time_series",
"unit": "ms"
},
{
"id": "panel-chat-api",
"type": "graph",
"title": "Chat / RAG API Latency",
"description": "p95 latency for chat and embedding endpoints",
"gridPos": { "x": 16, "y": 48, "w": 8, "h": 8 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT toStartOfInterval(timestamp, INTERVAL 5 MINUTE) AS ts, name AS handler, quantile(0.95)(durationNano) / 1e6 AS p95_ms FROM signoz_traces.distributed_signoz_index_v3 WHERE serviceName = 'compliance-agent' AND name IN ('chat', 'build_embeddings', 'embedding_status') AND timestamp >= now() - INTERVAL 3 HOUR GROUP BY ts, handler ORDER BY ts"
}
]
},
"panelType": "time_series",
"unit": "ms"
},
{
"id": "row-logs",
"type": "row",
"title": "Logs & Warnings",
"collapsed": false
},
{
"id": "panel-warn-errors-log",
"type": "graph",
"title": "Warn / Error Log Rate",
"description": "Rate of WARN and ERROR level logs over time",
"gridPos": { "x": 0, "y": 57, "w": 12, "h": 8 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT toStartOfInterval(timestamp, INTERVAL 5 MINUTE) AS ts, severity_text AS level, count() AS cnt FROM signoz_logs.distributed_logs_v2 WHERE resources_string['service.name'] = 'compliance-agent' AND severity_text IN ('WARN', 'ERROR') AND timestamp >= now() - INTERVAL 6 HOUR GROUP BY ts, level ORDER BY ts"
}
]
},
"panelType": "time_series",
"unit": ""
},
{
"id": "panel-recent-errors",
"type": "list",
"title": "Recent Error Logs",
"description": "Last 50 ERROR-level log entries",
"gridPos": { "x": 12, "y": 57, "w": 12, "h": 8 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT toString(timestamp) AS time, body AS message, trace_id FROM signoz_logs.distributed_logs_v2 WHERE resources_string['service.name'] = 'compliance-agent' AND severity_text = 'ERROR' AND timestamp >= now() - INTERVAL 24 HOUR ORDER BY timestamp DESC LIMIT 50"
}
]
},
"panelType": "list"
},
{
"id": "panel-warn-messages",
"type": "table",
"title": "Top Warning Messages (24h)",
"description": "Most frequent WARN messages — useful for spotting recurring DB or deserialization issues",
"gridPos": { "x": 0, "y": 65, "w": 24, "h": 8 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT body AS message, count() AS occurrences, max(toString(timestamp)) AS last_seen FROM signoz_logs.distributed_logs_v2 WHERE resources_string['service.name'] = 'compliance-agent' AND severity_text = 'WARN' AND timestamp >= now() - INTERVAL 24 HOUR GROUP BY message ORDER BY occurrences DESC LIMIT 30"
}
]
},
"panelType": "table"
}
],
"variables": {
"time_range": {
"type": "custom",
"label": "Time Range",
"default": "1h",
"options": ["15m", "30m", "1h", "3h", "6h", "12h", "24h", "7d"]
}
}
}

View File

@@ -0,0 +1,238 @@
{
"title": "Compliance Dashboard (Frontend)",
"description": "Monitoring dashboard for the compliance-dashboard Dioxus SSR/WASM service — page loads, server functions, and error tracking",
"tags": ["compliance", "dashboard", "frontend"],
"layout": [
{
"id": "row-overview",
"type": "row",
"title": "Overview",
"collapsed": false
},
{
"id": "panel-request-rate",
"type": "graph",
"title": "Request Rate",
"description": "Requests per second to the compliance-dashboard service",
"gridPos": { "x": 0, "y": 1, "w": 8, "h": 8 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT toStartOfInterval(timestamp, INTERVAL 1 MINUTE) AS ts, count() / 60 AS rps FROM signoz_traces.distributed_signoz_index_v3 WHERE serviceName = 'compliance-dashboard' AND parentSpanID = '' AND timestamp >= now() - INTERVAL 1 HOUR GROUP BY ts ORDER BY ts"
}
]
},
"panelType": "time_series",
"unit": "ops/s"
},
{
"id": "panel-error-rate",
"type": "graph",
"title": "Error Rate",
"description": "Percentage of requests with errors",
"gridPos": { "x": 8, "y": 1, "w": 8, "h": 8 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT toStartOfInterval(timestamp, INTERVAL 1 MINUTE) AS ts, countIf(hasError = true) AS errors, count() AS total, if(total > 0, errors * 100.0 / total, 0) AS error_pct FROM signoz_traces.distributed_signoz_index_v3 WHERE serviceName = 'compliance-dashboard' AND timestamp >= now() - INTERVAL 1 HOUR GROUP BY ts ORDER BY ts"
}
]
},
"panelType": "time_series",
"unit": "%"
},
{
"id": "panel-latency",
"type": "graph",
"title": "Response Latency (p50 / p95 / p99)",
"description": "Response time percentiles for the dashboard service",
"gridPos": { "x": 16, "y": 1, "w": 8, "h": 8 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT toStartOfInterval(timestamp, INTERVAL 1 MINUTE) AS ts, quantile(0.5)(durationNano) / 1e6 AS p50_ms, quantile(0.95)(durationNano) / 1e6 AS p95_ms, quantile(0.99)(durationNano) / 1e6 AS p99_ms FROM signoz_traces.distributed_signoz_index_v3 WHERE serviceName = 'compliance-dashboard' AND parentSpanID = '' AND timestamp >= now() - INTERVAL 1 HOUR GROUP BY ts ORDER BY ts"
}
]
},
"panelType": "time_series",
"unit": "ms"
},
{
"id": "row-server-functions",
"type": "row",
"title": "Server Functions",
"collapsed": false
},
{
"id": "panel-server-fn-latency",
"type": "graph",
"title": "Server Function Latency by Name",
"description": "p95 latency for each Dioxus server function (fetch_repositories, fetch_findings, fetch_sbom, etc.)",
"gridPos": { "x": 0, "y": 10, "w": 12, "h": 10 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT toStartOfInterval(timestamp, INTERVAL 5 MINUTE) AS ts, name AS server_fn, quantile(0.95)(durationNano) / 1e6 AS p95_ms FROM signoz_traces.distributed_signoz_index_v3 WHERE serviceName = 'compliance-dashboard' AND timestamp >= now() - INTERVAL 3 HOUR GROUP BY ts, server_fn ORDER BY ts"
}
]
},
"panelType": "time_series",
"unit": "ms"
},
{
"id": "panel-server-fn-calls",
"type": "graph",
"title": "Server Function Call Volume",
"description": "Number of calls per server function over time",
"gridPos": { "x": 12, "y": 10, "w": 12, "h": 10 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT toStartOfInterval(timestamp, INTERVAL 5 MINUTE) AS ts, name AS server_fn, count() AS calls FROM signoz_traces.distributed_signoz_index_v3 WHERE serviceName = 'compliance-dashboard' AND timestamp >= now() - INTERVAL 3 HOUR GROUP BY ts, server_fn ORDER BY ts"
}
]
},
"panelType": "time_series",
"unit": ""
},
{
"id": "panel-server-fn-errors",
"type": "table",
"title": "Server Function Errors (Last 24h)",
"description": "Server functions with the most errors",
"gridPos": { "x": 0, "y": 20, "w": 12, "h": 8 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT name AS server_fn, count() AS total_calls, countIf(hasError = true) AS errors, round(errors * 100.0 / total_calls, 2) AS error_pct, quantile(0.95)(durationNano) / 1e6 AS p95_ms FROM signoz_traces.distributed_signoz_index_v3 WHERE serviceName = 'compliance-dashboard' AND timestamp >= now() - INTERVAL 24 HOUR GROUP BY server_fn HAVING total_calls > 0 ORDER BY errors DESC LIMIT 20"
}
]
},
"panelType": "table"
},
{
"id": "panel-slow-requests",
"type": "table",
"title": "Slowest Requests (Last 1h)",
"description": "Top 20 slowest individual requests",
"gridPos": { "x": 12, "y": 20, "w": 12, "h": 8 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT name AS operation, traceID, durationNano / 1e6 AS duration_ms, toString(timestamp) AS time, hasError FROM signoz_traces.distributed_signoz_index_v3 WHERE serviceName = 'compliance-dashboard' AND parentSpanID = '' AND timestamp >= now() - INTERVAL 1 HOUR ORDER BY durationNano DESC LIMIT 20"
}
]
},
"panelType": "table"
},
{
"id": "row-page-navigation",
"type": "row",
"title": "Page Navigation Patterns",
"collapsed": true
},
{
"id": "panel-page-hits",
"type": "graph",
"title": "Page Load Distribution",
"description": "Which dashboard pages are hit most frequently (by server function patterns)",
"gridPos": { "x": 0, "y": 29, "w": 12, "h": 8 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT CASE WHEN name LIKE '%repositor%' THEN 'Repositories' WHEN name LIKE '%finding%' THEN 'Findings' WHEN name LIKE '%sbom%' THEN 'SBOM' WHEN name LIKE '%dast%' THEN 'DAST' WHEN name LIKE '%graph%' THEN 'Graph' WHEN name LIKE '%chat%' THEN 'Chat' WHEN name LIKE '%scan%' THEN 'Scan Runs' WHEN name LIKE '%overview%' OR name LIKE '%stats%' THEN 'Overview' ELSE 'Other' END AS page, count() AS hits FROM signoz_traces.distributed_signoz_index_v3 WHERE serviceName = 'compliance-dashboard' AND timestamp >= now() - INTERVAL 24 HOUR GROUP BY page ORDER BY hits DESC"
}
]
},
"panelType": "bar"
},
{
"id": "panel-agent-connectivity",
"type": "graph",
"title": "Agent API Connectivity",
"description": "Success vs failure rate of dashboard→agent API calls",
"gridPos": { "x": 12, "y": 29, "w": 12, "h": 8 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT toStartOfInterval(timestamp, INTERVAL 5 MINUTE) AS ts, countIf(hasError = false) AS success, countIf(hasError = true) AS failed FROM signoz_traces.distributed_signoz_index_v3 WHERE serviceName = 'compliance-dashboard' AND timestamp >= now() - INTERVAL 6 HOUR GROUP BY ts ORDER BY ts"
}
]
},
"panelType": "time_series",
"unit": ""
},
{
"id": "row-logs",
"type": "row",
"title": "Logs",
"collapsed": false
},
{
"id": "panel-log-rate",
"type": "graph",
"title": "Log Volume by Severity",
"description": "Log entries per severity level over time",
"gridPos": { "x": 0, "y": 38, "w": 12, "h": 8 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT toStartOfInterval(timestamp, INTERVAL 5 MINUTE) AS ts, severity_text AS level, count() AS cnt FROM signoz_logs.distributed_logs_v2 WHERE resources_string['service.name'] = 'compliance-dashboard' AND timestamp >= now() - INTERVAL 6 HOUR GROUP BY ts, level ORDER BY ts"
}
]
},
"panelType": "time_series",
"unit": ""
},
{
"id": "panel-recent-errors",
"type": "list",
"title": "Recent Error Logs",
"description": "Last 50 ERROR-level log entries from the dashboard service",
"gridPos": { "x": 12, "y": 38, "w": 12, "h": 8 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT toString(timestamp) AS time, body AS message, trace_id FROM signoz_logs.distributed_logs_v2 WHERE resources_string['service.name'] = 'compliance-dashboard' AND severity_text = 'ERROR' AND timestamp >= now() - INTERVAL 24 HOUR ORDER BY timestamp DESC LIMIT 50"
}
]
},
"panelType": "list"
},
{
"id": "panel-warn-messages",
"type": "table",
"title": "Top Warning Messages (24h)",
"description": "Most frequent WARN messages — catches connectivity issues, deserialization failures, etc.",
"gridPos": { "x": 0, "y": 46, "w": 24, "h": 8 },
"query": {
"clickhouse_sql": [
{
"name": "A",
"query": "SELECT body AS message, count() AS occurrences, max(toString(timestamp)) AS last_seen FROM signoz_logs.distributed_logs_v2 WHERE resources_string['service.name'] = 'compliance-dashboard' AND severity_text = 'WARN' AND timestamp >= now() - INTERVAL 24 HOUR GROUP BY message ORDER BY occurrences DESC LIMIT 30"
}
]
},
"panelType": "table"
}
],
"variables": {
"time_range": {
"type": "custom",
"label": "Time Range",
"default": "1h",
"options": ["15m", "30m", "1h", "3h", "6h", "12h", "24h", "7d"]
}
}
}