Create a dashboard JSON file containing panels for each resource type (CPU, memory, disk, network) each showing Utilization (usage / capacity), Saturation (queue depth or wait time), and Errors (error counter rate)
Place the JSON file in the Grafana provisioning directory at /etc/grafana/provisioning/dashboards/ and create a YAML sidecar file specifying folder, type: file, and path to the dashboard JSON directory
For CPU utilization use a PromQL expression such as 1 - avg(rate(node_cpu_seconds_total{mode='idle'}[5m])) by (instance); for saturation use node_load1 / count(node_cpu_seconds_total{mode='idle'}) by (instance)
Add threshold-based color coding in each panel's fieldConfig so the panel turns yellow at moderate saturation and red at critical levels
Restart Grafana (or send SIGHUP) to load the provisioned dashboard; verify it appears in the target folder with the expected UID
Version-control both the JSON and the provisioning YAML and deploy them as a ConfigMap in Kubernetes so dashboard updates are applied via GitOps
Known gotchas
Provisioned dashboards are marked as read-only in the Grafana UI; editors cannot save changes through the browser — all changes must go through the JSON file and a Grafana restart or reload
The dashboard UID in the JSON must be stable and unique across the Grafana instance; if two provisioned dashboards share a UID, the last one loaded wins silently
node_exporter metric names changed between major versions; expressions written for node_exporter v0.x may not work against v1.x collectors without updating metric names
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp