From 592b87041f8bef503793714f240151c6c7d36dca Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Wed, 3 Sep 2025 13:25:24 +0200 Subject: [PATCH] Add bars for more device metrics --- .../dashboards/overview_of_devices.json | 522 +++++++++++++++++- 1 file changed, 512 insertions(+), 10 deletions(-) diff --git a/dashboard-deployments/system-monitoring-influxdb2-flux-grafana/provisioning/dashboards/overview_of_devices.json b/dashboard-deployments/system-monitoring-influxdb2-flux-grafana/provisioning/dashboards/overview_of_devices.json index e680cd6..694b222 100644 --- a/dashboard-deployments/system-monitoring-influxdb2-flux-grafana/provisioning/dashboards/overview_of_devices.json +++ b/dashboard-deployments/system-monitoring-influxdb2-flux-grafana/provisioning/dashboards/overview_of_devices.json @@ -546,7 +546,7 @@ }, "gridPos": { "h": 2, - "w": 3, + "w": 2, "x": 0, "y": 29 }, @@ -646,8 +646,8 @@ }, "gridPos": { "h": 2, - "w": 3, - "x": 3, + "w": 2, + "x": 2, "y": 29 }, "id": 1, @@ -729,8 +729,8 @@ }, "gridPos": { "h": 2, - "w": 3, - "x": 6, + "w": 2, + "x": 4, "y": 29 }, "id": 2, @@ -810,8 +810,8 @@ }, "gridPos": { "h": 2, - "w": 3, - "x": 9, + "w": 2, + "x": 6, "y": 29 }, "id": 6, @@ -893,8 +893,8 @@ }, "gridPos": { "h": 2, - "w": 3, - "x": 12, + "w": 2, + "x": 8, "y": 29 }, "id": 7, @@ -937,6 +937,508 @@ ], "title": "SD Card", "type": "bargauge" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${datasource}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "fieldMinMax": false, + "mappings": [], + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "orange", + "value": 0 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 10, + "y": 29 + }, + "id": 22, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "limit": 1, + "values": true + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "${datasource}" + }, + "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"${unique_identifier}\"] == \"${device}\")\n |> filter(fn: (r) => r[\"_measurement\"] == \"processes\")\n |> filter(fn: (r) => r[\"_field\"] == \"total\")\n // Group by device to merge multiple tagsets\n |> group(columns: [\"${unique_identifier}\"])\n // Get the last sample. Note that last() does not work after\n // group, so we use sort+limit instead.\n |> sort(columns: [\"_time\"], desc: true)\n |> limit(n: 1)", + "refId": "A" + } + ], + "title": "Processes", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${datasource}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "fieldMinMax": false, + "mappings": [], + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "orange", + "value": 0 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 12, + "y": 29 + }, + "id": 23, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "limit": 1, + "values": true + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "${datasource}" + }, + "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"${unique_identifier}\"] == \"${device}\")\n |> filter(fn: (r) => r[\"_measurement\"] == \"processes\")\n |> filter(fn: (r) => r[\"_field\"] == \"total_threads\")\n // Group by device to merge multiple tagsets\n |> group(columns: [\"${unique_identifier}\"])\n // Get the last sample. Note that last() does not work after\n // group, so we use sort+limit instead.\n |> sort(columns: [\"_time\"], desc: true)\n |> limit(n: 1)", + "refId": "A" + } + ], + "title": "Threads", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${datasource}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "fieldMinMax": false, + "mappings": [], + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "red", + "value": 0 + } + ] + }, + "unit": "Bps" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 14, + "y": 29 + }, + "id": 19, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "limit": 1, + "values": true + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "${datasource}" + }, + "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"${unique_identifier}\"] == \"${device}\")\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"interface\"] == \"eth0\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\")\n |> derivative(unit: 1s, nonNegative: true)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n // Group by device to merge multiple tagsets\n |> group(columns: [\"${unique_identifier}\"])\n // Get the last sample. Note that last() does not work after\n // group, so we use sort+limit instead.\n |> sort(columns: [\"_time\"], desc: true)\n |> limit(n: 1)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "NET-Recv", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${datasource}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "fieldMinMax": false, + "mappings": [], + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "red", + "value": 0 + } + ] + }, + "unit": "Bps" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 16, + "y": 29 + }, + "id": 20, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "limit": 1, + "values": true + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "${datasource}" + }, + "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"${unique_identifier}\"] == \"${device}\")\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"interface\"] == \"eth0\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_sent\")\n |> derivative(unit: 1s, nonNegative: true)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n // Group by device to merge multiple tagsets\n |> group(columns: [\"${unique_identifier}\"])\n // Get the last sample. Note that last() does not work after\n // group, so we use sort+limit instead.\n |> sort(columns: [\"_time\"], desc: true)\n |> limit(n: 1)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "NET-Sent", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "fieldMinMax": false, + "mappings": [], + "max": 1000, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "#EAB839", + "value": 500 + }, + { + "color": "red", + "value": 800 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 18, + "y": 29 + }, + "id": 24, + "options": { + "displayMode": "gradient", + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "maxVizHeight": 25, + "minVizHeight": 12, + "minVizWidth": 8, + "namePlacement": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "limit": 1, + "values": true + }, + "showUnfilled": true, + "sizing": "auto", + "text": { + "titleSize": 1 + }, + "valueMode": "color" + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "${datasource}" + }, + "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"${unique_identifier}\"] == \"${device}\")\n |> filter(fn: (r) => r[\"_measurement\"] == \"netstat\")\n |> filter(fn: (r) => r[\"_field\"] == \"tcp_established\")\n // Group by device to merge multiple tagsets\n |> group(columns: [\"${unique_identifier}\"])\n // Get the last sample. Note that last() does not work after\n // group, so we use sort+limit instead.\n |> sort(columns: [\"_time\"], desc: true)\n |> limit(n: 1)", + "refId": "A" + } + ], + "title": "TCP Est.", + "type": "bargauge" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "fieldMinMax": false, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "#EAB839", + "value": 10 + }, + { + "color": "red", + "value": 50 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 20, + "y": 29 + }, + "id": 25, + "options": { + "displayMode": "gradient", + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "maxVizHeight": 25, + "minVizHeight": 12, + "minVizWidth": 8, + "namePlacement": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "limit": 1, + "values": true + }, + "showUnfilled": true, + "sizing": "auto", + "text": { + "titleSize": 1 + }, + "valueMode": "color" + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "${datasource}" + }, + "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"${unique_identifier}\"] == \"${device}\")\n |> filter(fn: (r) => r[\"_measurement\"] == \"netstat\")\n |> filter(fn: (r) => r[\"_field\"] == \"tcp_close_wait\")\n // Group by device to merge multiple tagsets\n |> group(columns: [\"${unique_identifier}\"])\n // Get the last sample. Note that last() does not work after\n // group, so we use sort+limit instead.\n |> sort(columns: [\"_time\"], desc: true)\n |> limit(n: 1)", + "refId": "A" + } + ], + "title": "TCP Wait", + "type": "bargauge" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "fieldMinMax": false, + "mappings": [], + "max": 500, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "#EAB839", + "value": 200 + }, + { + "color": "red", + "value": 400 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 22, + "y": 29 + }, + "id": 26, + "options": { + "displayMode": "gradient", + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "maxVizHeight": 25, + "minVizHeight": 12, + "minVizWidth": 8, + "namePlacement": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "limit": 1, + "values": true + }, + "showUnfilled": true, + "sizing": "auto", + "text": { + "titleSize": 1 + }, + "valueMode": "color" + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "${datasource}" + }, + "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"${unique_identifier}\"] == \"${device}\")\n |> filter(fn: (r) => r[\"_measurement\"] == \"netstat\")\n |> filter(fn: (r) => r[\"_field\"] == \"udp_socket\")\n // Group by device to merge multiple tagsets\n |> group(columns: [\"${unique_identifier}\"])\n // Get the last sample. Note that last() does not work after\n // group, so we use sort+limit instead.\n |> sort(columns: [\"_time\"], desc: true)\n |> limit(n: 1)", + "refId": "A" + } + ], + "title": "UDP Est.", + "type": "bargauge" } ], "preload": false, @@ -1246,5 +1748,5 @@ "timezone": "browser", "title": "Overview of Devices", "uid": "ceh7yyrnarj7kd", - "version": 33 + "version": 34 }