Add the files that land in the image, organised as layered rootfs trees (base first, then the edition layer wins on conflict). - base: hardened kernel cmdline + sysctl, default-deny nftables, key-only ssh, persistent journald, module blacklist, no core dumps, snapshot timer units, motd. - server: Prometheus + auto-provisioned Grafana + Loki + promtail. - workstation: dev profile and desktop sysctl relaxations (perf, rootless containers). - cloud: cloud-init provisioning config.
95 lines
2.5 KiB
JSON
95 lines
2.5 KiB
JSON
{
|
|
"uid": "arcline-node-overview",
|
|
"title": "Arcline Node Overview",
|
|
"tags": ["arcline", "node"],
|
|
"timezone": "browser",
|
|
"schemaVersion": 39,
|
|
"version": 1,
|
|
"refresh": "30s",
|
|
"time": { "from": "now-1h", "to": "now" },
|
|
"panels": [
|
|
{
|
|
"id": 1,
|
|
"title": "System load",
|
|
"type": "timeseries",
|
|
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 0 },
|
|
"datasource": { "type": "prometheus", "uid": "Prometheus" },
|
|
"targets": [
|
|
{
|
|
"expr": "node_load1",
|
|
"legendFormat": "load1",
|
|
"refId": "A"
|
|
},
|
|
{
|
|
"expr": "node_load5",
|
|
"legendFormat": "load5",
|
|
"refId": "B"
|
|
}
|
|
],
|
|
"fieldConfig": {
|
|
"defaults": { "unit": "short" },
|
|
"overrides": []
|
|
}
|
|
},
|
|
{
|
|
"id": 2,
|
|
"title": "Memory used",
|
|
"type": "timeseries",
|
|
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 0 },
|
|
"datasource": { "type": "prometheus", "uid": "Prometheus" },
|
|
"targets": [
|
|
{
|
|
"expr": "(1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100",
|
|
"legendFormat": "% used",
|
|
"refId": "A"
|
|
}
|
|
],
|
|
"fieldConfig": {
|
|
"defaults": { "unit": "percent", "max": 100, "min": 0 },
|
|
"overrides": []
|
|
}
|
|
},
|
|
{
|
|
"id": 3,
|
|
"title": "Disk usage",
|
|
"type": "gauge",
|
|
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 8 },
|
|
"datasource": { "type": "prometheus", "uid": "Prometheus" },
|
|
"targets": [
|
|
{
|
|
"expr": "(1 - node_filesystem_avail_bytes{mountpoint=\"/\"} / node_filesystem_size_bytes{mountpoint=\"/\"}) * 100",
|
|
"legendFormat": "/",
|
|
"refId": "A"
|
|
}
|
|
],
|
|
"fieldConfig": {
|
|
"defaults": { "unit": "percent", "max": 100, "min": 0 },
|
|
"overrides": []
|
|
}
|
|
},
|
|
{
|
|
"id": 4,
|
|
"title": "Network traffic",
|
|
"type": "timeseries",
|
|
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 8 },
|
|
"datasource": { "type": "prometheus", "uid": "Prometheus" },
|
|
"targets": [
|
|
{
|
|
"expr": "rate(node_network_receive_bytes_total[5m])",
|
|
"legendFormat": "rx {{ $labels.device }}",
|
|
"refId": "A"
|
|
},
|
|
{
|
|
"expr": "rate(node_network_transmit_bytes_total[5m])",
|
|
"legendFormat": "tx {{ $labels.device }}",
|
|
"refId": "B"
|
|
}
|
|
],
|
|
"fieldConfig": {
|
|
"defaults": { "unit": "Bps" },
|
|
"overrides": []
|
|
}
|
|
}
|
|
]
|
|
}
|