From 596bf46863478a5a415fb62db4f152849ba49eb2 Mon Sep 17 00:00:00 2001 From: Brad Stein Date: Fri, 12 Dec 2025 18:51:43 -0300 Subject: [PATCH] atlas dashboards: sort pod counts and add pod row to overview --- scripts/dashboards_render_atlas.py | 29 +++- .../monitoring/dashboards/atlas-overview.json | 141 +++++++++++++++++- .../monitoring/dashboards/atlas-pods.json | 13 +- .../grafana-dashboard-overview.yaml | 141 +++++++++++++++++- .../monitoring/grafana-dashboard-pods.yaml | 13 +- 5 files changed, 329 insertions(+), 8 deletions(-) diff --git a/scripts/dashboards_render_atlas.py b/scripts/dashboards_render_atlas.py index 7047f41..d1db123 100644 --- a/scripts/dashboards_render_atlas.py +++ b/scripts/dashboards_render_atlas.py @@ -596,6 +596,13 @@ def bargauge_panel(panel_id, title, expr, grid, *, unit="none", links=None): } if links: panel["links"] = links + # Keep bars ordered by value descending for readability. + panel["transformations"] = [ + { + "id": "sortBy", + "options": {"fields": ["Value"], "order": "desc"}, + } + ] return panel @@ -868,6 +875,24 @@ def build_overview(): ) ) + panels.append( + pie_panel( + 28, + "Pods by Node", + 'sum(kube_pod_info{pod!=""}) by (node)', + {"h": 10, "w": 12, "x": 0, "y": 54}, + ) + ) + panels.append( + bargauge_panel( + 29, + "Top Nodes by Pod Count", + 'topk(12, sum(kube_pod_info{pod!=""}) by (node))', + {"h": 10, "w": 12, "x": 12, "y": 54}, + unit="none", + ) + ) + panels.append( timeseries_panel( 18, @@ -913,7 +938,7 @@ def build_overview(): 21, "Root Filesystem Usage", root_usage_expr(), - {"h": 16, "w": 12, "x": 0, "y": 54}, + {"h": 16, "w": 12, "x": 0, "y": 64}, unit="percent", legend="{{node}}", legend_calcs=["last"], @@ -928,7 +953,7 @@ def build_overview(): 22, "Nodes Closest to Full Root Disks", f"topk(12, {root_usage_expr()})", - {"h": 16, "w": 12, "x": 12, "y": 54}, + {"h": 16, "w": 12, "x": 12, "y": 64}, unit="percent", links=link_to("atlas-storage"), ) diff --git a/services/monitoring/dashboards/atlas-overview.json b/services/monitoring/dashboards/atlas-overview.json index 8e77ad4..36fdf70 100644 --- a/services/monitoring/dashboards/atlas-overview.json +++ b/services/monitoring/dashboards/atlas-overview.json @@ -1377,6 +1377,132 @@ } } }, + { + "id": 28, + "type": "piechart", + "title": "Pods by Node", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 54 + }, + "targets": [ + { + "expr": "sum(kube_pod_info{pod!=\"\"}) by (node)", + "refId": "A", + "legendFormat": "{{namespace}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "percent", + "color": { + "mode": "palette-classic" + } + }, + "overrides": [] + }, + "options": { + "legend": { + "displayMode": "list", + "placement": "right" + }, + "pieType": "pie", + "displayLabels": [ + "percent" + ], + "tooltip": { + "mode": "single" + }, + "colorScheme": "interpolateSpectral", + "colorBy": "value", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + } + } + }, + { + "id": 29, + "type": "bargauge", + "title": "Top Nodes by Pod Count", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 54 + }, + "targets": [ + { + "expr": "topk(12, sum(kube_pod_info{pod!=\"\"}) by (node))", + "refId": "A", + "legendFormat": "{{node}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "none", + "min": 0, + "max": null, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "yellow", + "value": 50 + }, + { + "color": "orange", + "value": 70 + }, + { + "color": "red", + "value": 85 + } + ] + } + }, + "overrides": [] + }, + "options": { + "displayMode": "gradient", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + } + }, + "transformations": [ + { + "id": "sortBy", + "options": { + "fields": [ + "Value" + ], + "order": "desc" + } + } + ] + }, { "id": 18, "type": "timeseries", @@ -1521,7 +1647,7 @@ "h": 16, "w": 12, "x": 0, - "y": 54 + "y": 64 }, "targets": [ { @@ -1569,7 +1695,7 @@ "h": 16, "w": 12, "x": 12, - "y": 54 + "y": 64 }, "targets": [ { @@ -1624,6 +1750,17 @@ "url": "/d/atlas-storage", "targetBlank": true } + ], + "transformations": [ + { + "id": "sortBy", + "options": { + "fields": [ + "Value" + ], + "order": "desc" + } + } ] } ], diff --git a/services/monitoring/dashboards/atlas-pods.json b/services/monitoring/dashboards/atlas-pods.json index 4f7426e..a7ed651 100644 --- a/services/monitoring/dashboards/atlas-pods.json +++ b/services/monitoring/dashboards/atlas-pods.json @@ -473,7 +473,18 @@ "fields": "", "values": false } - } + }, + "transformations": [ + { + "id": "sortBy", + "options": { + "fields": [ + "Value" + ], + "order": "desc" + } + } + ] } ], "time": { diff --git a/services/monitoring/grafana-dashboard-overview.yaml b/services/monitoring/grafana-dashboard-overview.yaml index 18a8158..e1cbf4e 100644 --- a/services/monitoring/grafana-dashboard-overview.yaml +++ b/services/monitoring/grafana-dashboard-overview.yaml @@ -1386,6 +1386,132 @@ data: } } }, + { + "id": 28, + "type": "piechart", + "title": "Pods by Node", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 54 + }, + "targets": [ + { + "expr": "sum(kube_pod_info{pod!=\"\"}) by (node)", + "refId": "A", + "legendFormat": "{{namespace}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "percent", + "color": { + "mode": "palette-classic" + } + }, + "overrides": [] + }, + "options": { + "legend": { + "displayMode": "list", + "placement": "right" + }, + "pieType": "pie", + "displayLabels": [ + "percent" + ], + "tooltip": { + "mode": "single" + }, + "colorScheme": "interpolateSpectral", + "colorBy": "value", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + } + } + }, + { + "id": 29, + "type": "bargauge", + "title": "Top Nodes by Pod Count", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 54 + }, + "targets": [ + { + "expr": "topk(12, sum(kube_pod_info{pod!=\"\"}) by (node))", + "refId": "A", + "legendFormat": "{{node}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "none", + "min": 0, + "max": null, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "yellow", + "value": 50 + }, + { + "color": "orange", + "value": 70 + }, + { + "color": "red", + "value": 85 + } + ] + } + }, + "overrides": [] + }, + "options": { + "displayMode": "gradient", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + } + }, + "transformations": [ + { + "id": "sortBy", + "options": { + "fields": [ + "Value" + ], + "order": "desc" + } + } + ] + }, { "id": 18, "type": "timeseries", @@ -1530,7 +1656,7 @@ data: "h": 16, "w": 12, "x": 0, - "y": 54 + "y": 64 }, "targets": [ { @@ -1578,7 +1704,7 @@ data: "h": 16, "w": 12, "x": 12, - "y": 54 + "y": 64 }, "targets": [ { @@ -1633,6 +1759,17 @@ data: "url": "/d/atlas-storage", "targetBlank": true } + ], + "transformations": [ + { + "id": "sortBy", + "options": { + "fields": [ + "Value" + ], + "order": "desc" + } + } ] } ], diff --git a/services/monitoring/grafana-dashboard-pods.yaml b/services/monitoring/grafana-dashboard-pods.yaml index 90cf35d..2bab93d 100644 --- a/services/monitoring/grafana-dashboard-pods.yaml +++ b/services/monitoring/grafana-dashboard-pods.yaml @@ -482,7 +482,18 @@ data: "fields": "", "values": false } - } + }, + "transformations": [ + { + "id": "sortBy", + "options": { + "fields": [ + "Value" + ], + "order": "desc" + } + } + ] } ], "time": {