incus-contrib/incusos/observability-dashboards/core/storage-filesystem.json

382 lines
16 KiB
JSON

{
"uid": "incus-storage-filesystem",
"title": "Storage & Filesystem",
"description": "Filesystem usage, available space trends, disk throughput, I/O latency, disk utilization, and inode usage per node.",
"tags": ["incus", "incusos", "storage", "node-exporter"],
"timezone": "browser",
"schemaVersion": 39,
"refresh": "30s",
"time": { "from": "now-1h", "to": "now" },
"fiscalYearStartMonth": 0,
"liveNow": false,
"editable": true,
"graphTooltip": 1,
"links": [
{
"asDropdown": true, "icon": "external link", "includeVars": true,
"keepTime": true, "tags": ["incus"], "targetBlank": false,
"title": "Incus Dashboards", "type": "dashboards"
}
],
"templating": {
"list": [
{
"current": {},
"datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" },
"definition": "label_values(node_filesystem_size_bytes, instance)",
"includeAll": false,
"multi": true,
"name": "node",
"query": "label_values(node_filesystem_size_bytes, instance)",
"refresh": 2,
"sort": 1,
"type": "query",
"label": "Node"
},
{
"current": {},
"datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" },
"definition": "label_values(node_filesystem_size_bytes{instance=~\"$node\"}, mountpoint)",
"includeAll": true,
"multi": true,
"name": "mountpoint",
"query": "label_values(node_filesystem_size_bytes{instance=~\"$node\"}, mountpoint)",
"refresh": 2,
"sort": 1,
"type": "query",
"label": "Mountpoint"
}
]
},
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": { "type": "grafana", "uid": "-- Grafana --" },
"enable": true, "hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts", "type": "dashboard"
}
]
},
"panels": [
{
"type": "row", "title": "Filesystem Overview",
"collapsed": false,
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 },
"id": 1, "panels": []
},
{
"type": "table",
"title": "Filesystem Usage Table",
"description": "Current filesystem size, available space, and usage percentage per node and mountpoint. High usage is highlighted with color thresholds.",
"gridPos": { "h": 8, "w": 24, "x": 0, "y": 1 },
"id": 2,
"datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" },
"targets": [
{
"expr": "node_filesystem_size_bytes{instance=~\"$node\", mountpoint=~\"$mountpoint\", fstype!~\"tmpfs|overlay\"}",
"legendFormat": "", "refId": "A", "format": "table", "instant": true
},
{
"expr": "node_filesystem_avail_bytes{instance=~\"$node\", mountpoint=~\"$mountpoint\", fstype!~\"tmpfs|overlay\"}",
"legendFormat": "", "refId": "B", "format": "table", "instant": true
},
{
"expr": "(1 - node_filesystem_avail_bytes{instance=~\"$node\", mountpoint=~\"$mountpoint\", fstype!~\"tmpfs|overlay\"} / node_filesystem_size_bytes{instance=~\"$node\", mountpoint=~\"$mountpoint\", fstype!~\"tmpfs|overlay\"}) * 100",
"legendFormat": "", "refId": "C", "format": "table", "instant": true
}
],
"fieldConfig": {
"defaults": {
"custom": { "align": "auto", "displayMode": "auto", "inspect": false, "filterable": true },
"color": { "mode": "thresholds" },
"thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }
},
"overrides": [
{ "matcher": { "id": "byName", "options": "instance" }, "properties": [{ "id": "displayName", "value": "Node" }] },
{ "matcher": { "id": "byName", "options": "mountpoint" }, "properties": [{ "id": "displayName", "value": "Mountpoint" }] },
{ "matcher": { "id": "byName", "options": "fstype" }, "properties": [{ "id": "displayName", "value": "FS Type" }] },
{ "matcher": { "id": "byName", "options": "Value #A" }, "properties": [{ "id": "displayName", "value": "Size" }, { "id": "unit", "value": "bytes" }] },
{ "matcher": { "id": "byName", "options": "Value #B" }, "properties": [{ "id": "displayName", "value": "Available" }, { "id": "unit", "value": "bytes" }] },
{
"matcher": { "id": "byName", "options": "Value #C" },
"properties": [
{ "id": "displayName", "value": "Used %" },
{ "id": "unit", "value": "percent" },
{ "id": "custom.displayMode", "value": "color-background" },
{ "id": "thresholds", "value": { "mode": "absolute", "steps": [{ "color": "green", "value": null }, { "color": "yellow", "value": 70 }, { "color": "orange", "value": 85 }, { "color": "red", "value": 95 }] } }
]
}
]
},
"options": { "showHeader": true, "sortBy": [], "footer": { "show": false, "reducer": ["sum"], "fields": "" } },
"transformations": [
{ "id": "merge", "options": {} },
{ "id": "organize", "options": { "excludeByName": { "Time": true, "__name__": true, "job": true, "device": true }, "renameByName": {} } }
]
},
{
"type": "row", "title": "Space Trends",
"collapsed": false,
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 9 },
"id": 3, "panels": []
},
{
"type": "timeseries",
"title": "Available Space Over Time",
"description": "Tracks available filesystem space over time per node and mountpoint. Use this to identify gradual space consumption trends before they become critical.",
"gridPos": { "h": 8, "w": 24, "x": 0, "y": 10 },
"id": 4,
"datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" },
"targets": [
{
"expr": "node_filesystem_avail_bytes{instance=~\"$node\", mountpoint=~\"$mountpoint\", fstype!~\"tmpfs|overlay\"}",
"legendFormat": "{{instance}} {{mountpoint}}",
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"custom": {
"drawStyle": "line", "lineInterpolation": "smooth", "lineWidth": 2,
"fillOpacity": 15, "gradientMode": "none", "spanNulls": false,
"showPoints": "never", "pointSize": 5,
"stacking": { "mode": "none", "group": "A" },
"axisPlacement": "auto", "scaleDistribution": { "type": "linear" },
"thresholdsStyle": { "mode": "off" }
},
"unit": "bytes",
"color": { "mode": "palette-classic" },
"thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }
},
"overrides": []
},
"options": {
"tooltip": { "mode": "multi", "sort": "desc" },
"legend": { "displayMode": "table", "placement": "right", "calcs": ["mean", "max", "lastNotNull"] }
}
},
{
"type": "row", "title": "Disk Throughput",
"collapsed": false,
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 18 },
"id": 5, "panels": []
},
{
"type": "timeseries",
"title": "Disk Read Throughput",
"description": "Disk read throughput in bytes per second, broken down by instance and device. Identifies which disks are handling the most read traffic.",
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 19 },
"id": 6,
"datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" },
"targets": [
{
"expr": "sum by (instance, device) (rate(node_disk_read_bytes_total{instance=~\"$node\"}[$__rate_interval]))",
"legendFormat": "{{instance}} {{device}}",
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"custom": {
"drawStyle": "line", "lineInterpolation": "smooth", "lineWidth": 1,
"fillOpacity": 15, "gradientMode": "none", "spanNulls": false,
"showPoints": "never", "pointSize": 5,
"stacking": { "mode": "none", "group": "A" },
"axisPlacement": "auto", "scaleDistribution": { "type": "linear" },
"thresholdsStyle": { "mode": "off" }
},
"unit": "Bps",
"color": { "mode": "palette-classic" },
"thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }
},
"overrides": []
},
"options": {
"tooltip": { "mode": "multi", "sort": "desc" },
"legend": { "displayMode": "table", "placement": "right", "calcs": ["mean", "max", "lastNotNull"] }
}
},
{
"type": "timeseries",
"title": "Disk Write Throughput",
"description": "Disk write throughput in bytes per second, broken down by instance and device. Identifies which disks are handling the most write traffic.",
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 19 },
"id": 7,
"datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" },
"targets": [
{
"expr": "sum by (instance, device) (rate(node_disk_written_bytes_total{instance=~\"$node\"}[$__rate_interval]))",
"legendFormat": "{{instance}} {{device}}",
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"custom": {
"drawStyle": "line", "lineInterpolation": "smooth", "lineWidth": 1,
"fillOpacity": 15, "gradientMode": "none", "spanNulls": false,
"showPoints": "never", "pointSize": 5,
"stacking": { "mode": "none", "group": "A" },
"axisPlacement": "auto", "scaleDistribution": { "type": "linear" },
"thresholdsStyle": { "mode": "off" }
},
"unit": "Bps",
"color": { "mode": "palette-classic" },
"thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }
},
"overrides": []
},
"options": {
"tooltip": { "mode": "multi", "sort": "desc" },
"legend": { "displayMode": "table", "placement": "right", "calcs": ["mean", "max", "lastNotNull"] }
}
},
{
"type": "row", "title": "I/O Performance",
"collapsed": false,
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 27 },
"id": 8, "panels": []
},
{
"type": "timeseries",
"title": "Average Read Latency",
"description": "Average time per completed read operation. Calculated as total read time divided by completed reads. High values indicate slow disk response.",
"gridPos": { "h": 8, "w": 8, "x": 0, "y": 28 },
"id": 9,
"datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" },
"targets": [
{
"expr": "rate(node_disk_read_time_seconds_total{instance=~\"$node\"}[$__rate_interval]) / rate(node_disk_reads_completed_total{instance=~\"$node\"}[$__rate_interval])",
"legendFormat": "{{instance}} {{device}}",
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"custom": {
"drawStyle": "line", "lineInterpolation": "smooth", "lineWidth": 1,
"fillOpacity": 15, "gradientMode": "none", "spanNulls": false,
"showPoints": "never", "pointSize": 5,
"stacking": { "mode": "none", "group": "A" },
"axisPlacement": "auto", "scaleDistribution": { "type": "linear" },
"thresholdsStyle": { "mode": "off" }
},
"unit": "s",
"color": { "mode": "palette-classic" },
"thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }
},
"overrides": []
},
"options": {
"tooltip": { "mode": "multi", "sort": "desc" },
"legend": { "displayMode": "table", "placement": "right", "calcs": ["mean", "max", "lastNotNull"] }
}
},
{
"type": "timeseries",
"title": "Average Write Latency",
"description": "Average time per completed write operation. Calculated as total write time divided by completed writes. High values indicate slow disk response or write saturation.",
"gridPos": { "h": 8, "w": 8, "x": 8, "y": 28 },
"id": 10,
"datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" },
"targets": [
{
"expr": "rate(node_disk_write_time_seconds_total{instance=~\"$node\"}[$__rate_interval]) / rate(node_disk_writes_completed_total{instance=~\"$node\"}[$__rate_interval])",
"legendFormat": "{{instance}} {{device}}",
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"custom": {
"drawStyle": "line", "lineInterpolation": "smooth", "lineWidth": 1,
"fillOpacity": 15, "gradientMode": "none", "spanNulls": false,
"showPoints": "never", "pointSize": 5,
"stacking": { "mode": "none", "group": "A" },
"axisPlacement": "auto", "scaleDistribution": { "type": "linear" },
"thresholdsStyle": { "mode": "off" }
},
"unit": "s",
"color": { "mode": "palette-classic" },
"thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }
},
"overrides": []
},
"options": {
"tooltip": { "mode": "multi", "sort": "desc" },
"legend": { "displayMode": "table", "placement": "right", "calcs": ["mean", "max", "lastNotNull"] }
}
},
{
"type": "timeseries",
"title": "Disk Utilization %",
"description": "Percentage of time the disk is busy processing I/O requests. Values near 100% indicate the disk is saturated and may be a bottleneck.",
"gridPos": { "h": 8, "w": 8, "x": 16, "y": 28 },
"id": 11,
"datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" },
"targets": [
{
"expr": "sum by (instance) (rate(node_disk_io_time_seconds_total{instance=~\"$node\"}[$__rate_interval])) * 100",
"legendFormat": "{{instance}}",
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"custom": {
"drawStyle": "line", "lineInterpolation": "smooth", "lineWidth": 2,
"fillOpacity": 25, "gradientMode": "scheme", "spanNulls": false,
"showPoints": "never", "pointSize": 5,
"stacking": { "mode": "none", "group": "A" },
"axisPlacement": "auto", "scaleDistribution": { "type": "linear" },
"thresholdsStyle": { "mode": "line" }
},
"unit": "percent", "min": 0, "max": 100,
"color": { "mode": "continuous-GrYlRd" },
"thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }, { "color": "yellow", "value": 50 }, { "color": "red", "value": 80 }] }
},
"overrides": []
},
"options": {
"tooltip": { "mode": "multi", "sort": "desc" },
"legend": { "displayMode": "table", "placement": "right", "calcs": ["mean", "max", "lastNotNull"] }
}
},
{
"type": "row", "title": "Inodes",
"collapsed": false,
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 36 },
"id": 12, "panels": []
},
{
"type": "bargauge",
"title": "Inode Usage %",
"description": "Percentage of used inodes per filesystem. Running out of inodes prevents creating new files even when disk space is available. Monitor for filesystems with many small files.",
"gridPos": { "h": 6, "w": 24, "x": 0, "y": 37 },
"id": 13,
"datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" },
"targets": [
{
"expr": "(1 - node_filesystem_files_free{instance=~\"$node\", mountpoint=~\"$mountpoint\", fstype!~\"tmpfs|overlay\"} / node_filesystem_files{instance=~\"$node\", mountpoint=~\"$mountpoint\", fstype!~\"tmpfs|overlay\"}) * 100",
"legendFormat": "{{instance}} {{mountpoint}}",
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }, { "color": "yellow", "value": 70 }, { "color": "red", "value": 90 }] },
"unit": "percent", "min": 0, "max": 100,
"color": { "mode": "thresholds" }
},
"overrides": []
},
"options": {
"reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false },
"orientation": "horizontal", "displayMode": "gradient", "showUnfilled": true,
"minVizWidth": 8, "minVizHeight": 16, "valueMode": "color"
}
}
]
}