perf: bound lake scans and add platform Grafana dashboard
Explorer and exporter were scanning the full Parquet lake every 1–5s (~2000 files, 200MB+), driving ~2.2 CPU cores. Limit metrics to the last N flights, cache DuckDB views and the partition tree, slow live polls to 2s, and keep drones alive after seal to stop restart churn. Add node-exporter, scan-duration metrics, and a Swarm Platform Grafana dashboard for node CPU/memory and scan health.
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"uid": "swarm-platform",
|
||||
"title": "Swarm Platform — CPU & scan health",
|
||||
"tags": ["swarm", "platform"],
|
||||
"timezone": "utc",
|
||||
"schemaVersion": 39,
|
||||
"version": 1,
|
||||
"refresh": "10s",
|
||||
"time": { "from": "now-30m", "to": "now" },
|
||||
"panels": [
|
||||
{
|
||||
"id": 1, "type": "timeseries", "title": "Node CPU %",
|
||||
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 0 },
|
||||
"datasource": { "type": "prometheus", "uid": "swarm-prom" },
|
||||
"targets": [{
|
||||
"expr": "100 - (avg by (instance) (rate(node_cpu_seconds_total{mode=\"idle\"}[1m])) * 100)",
|
||||
"legendFormat": "{{instance}}", "refId": "A"
|
||||
}],
|
||||
"fieldConfig": { "defaults": { "unit": "percent", "min": 0, "max": 100 }, "overrides": [] }
|
||||
},
|
||||
{
|
||||
"id": 2, "type": "timeseries", "title": "Node memory used %",
|
||||
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 0 },
|
||||
"datasource": { "type": "prometheus", "uid": "swarm-prom" },
|
||||
"targets": [{
|
||||
"expr": "(1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100",
|
||||
"legendFormat": "used", "refId": "A"
|
||||
}],
|
||||
"fieldConfig": { "defaults": { "unit": "percent", "min": 0, "max": 100 }, "overrides": [] }
|
||||
},
|
||||
{
|
||||
"id": 3, "type": "timeseries", "title": "Exporter scan duration",
|
||||
"gridPos": { "h": 7, "w": 8, "x": 0, "y": 8 },
|
||||
"datasource": { "type": "prometheus", "uid": "swarm-prom" },
|
||||
"targets": [{
|
||||
"expr": "swarm_exporter_scan_duration_seconds",
|
||||
"legendFormat": "scan seconds", "refId": "A"
|
||||
}],
|
||||
"fieldConfig": { "defaults": { "unit": "s" }, "overrides": [] }
|
||||
},
|
||||
{
|
||||
"id": 4, "type": "timeseries", "title": "Explorer query duration",
|
||||
"gridPos": { "h": 7, "w": 8, "x": 8, "y": 8 },
|
||||
"datasource": { "type": "prometheus", "uid": "swarm-prom" },
|
||||
"targets": [{
|
||||
"expr": "swarm_explorer_query_duration_seconds",
|
||||
"legendFormat": "last query", "refId": "A"
|
||||
}],
|
||||
"fieldConfig": { "defaults": { "unit": "s" }, "overrides": [] }
|
||||
},
|
||||
{
|
||||
"id": 5, "type": "timeseries", "title": "Explorer tree build duration",
|
||||
"gridPos": { "h": 7, "w": 8, "x": 16, "y": 8 },
|
||||
"datasource": { "type": "prometheus", "uid": "swarm-prom" },
|
||||
"targets": [{
|
||||
"expr": "swarm_explorer_tree_duration_seconds",
|
||||
"legendFormat": "tree seconds", "refId": "A"
|
||||
}],
|
||||
"fieldConfig": { "defaults": { "unit": "s" }, "overrides": [] }
|
||||
},
|
||||
{
|
||||
"id": 6, "type": "stat", "title": "Parquet files scanned",
|
||||
"gridPos": { "h": 5, "w": 6, "x": 0, "y": 15 },
|
||||
"datasource": { "type": "prometheus", "uid": "swarm-prom" },
|
||||
"targets": [{ "expr": "swarm_parquet_files", "instant": true, "refId": "A" }],
|
||||
"options": { "reduceOptions": { "calcs": ["lastNotNull"] } }
|
||||
},
|
||||
{
|
||||
"id": 7, "type": "stat", "title": "Flight window",
|
||||
"gridPos": { "h": 5, "w": 6, "x": 6, "y": 15 },
|
||||
"datasource": { "type": "prometheus", "uid": "swarm-prom" },
|
||||
"targets": [{ "expr": "swarm_metric_flight_window", "instant": true, "refId": "A" }],
|
||||
"options": { "reduceOptions": { "calcs": ["lastNotNull"] } }
|
||||
},
|
||||
{
|
||||
"id": 8, "type": "stat", "title": "Telemetry rows (window)",
|
||||
"gridPos": { "h": 5, "w": 6, "x": 12, "y": 15 },
|
||||
"datasource": { "type": "prometheus", "uid": "swarm-prom" },
|
||||
"targets": [{ "expr": "sum(swarm_rows_total)", "instant": true, "refId": "A" }],
|
||||
"options": { "reduceOptions": { "calcs": ["lastNotNull"] } }
|
||||
},
|
||||
{
|
||||
"id": 9, "type": "stat", "title": "Min fleet battery %",
|
||||
"gridPos": { "h": 5, "w": 6, "x": 18, "y": 15 },
|
||||
"datasource": { "type": "prometheus", "uid": "swarm-prom" },
|
||||
"targets": [{ "expr": "min(swarm_battery_pct)", "instant": true, "refId": "A" }],
|
||||
"fieldConfig": { "defaults": { "unit": "percent", "min": 0, "max": 100 }, "overrides": [] }
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user