From fdaf6a9c7581029d0dde750f6096cb02fd7b5e14 Mon Sep 17 00:00:00 2001 From: Till-JS <101404291+Till-JS@users.noreply.github.com> Date: Sun, 1 Feb 2026 12:50:42 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20fix(dashboards):=20fix=20broken?= =?UTF-8?q?=20panels=20and=20metrics?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Backends: Remove Docker container section (cAdvisor not deployed) - Backends: Add Auth Service Runtime section with correct auth_ prefixed metrics - Backends: Rename to "Backends Overview" - Application Details: Fix Node.js Runtime to use auth_ prefixed metrics - Application Details: Rename section to "Auth Service Runtime" Co-Authored-By: Claude Opus 4.5 --- docker-compose.macmini.yml | 4 +- .../dashboards/application-details.json | 41 +- docker/grafana/dashboards/backends.json | 464 ++++++++++++------ 3 files changed, 345 insertions(+), 164 deletions(-) diff --git a/docker-compose.macmini.yml b/docker-compose.macmini.yml index f9869b8e8..7a5fd0419 100644 --- a/docker-compose.macmini.yml +++ b/docker-compose.macmini.yml @@ -59,7 +59,7 @@ services: MINIO_ROOT_USER: ${MINIO_ACCESS_KEY:-minioadmin} MINIO_ROOT_PASSWORD: ${MINIO_SECRET_KEY:-minioadmin} volumes: - - minio-ssd-data:/data + - /Volumes/TillJakob-S04/ManaData/minio:/data ports: - "9000:9000" - "9001:9001" @@ -1288,8 +1288,6 @@ volumes: name: mana-postgres-data redis_data: name: mana-redis-data - minio-ssd-data: - external: true # Bound to /Volumes/TillJakob-S04/ManaData/minio victoriametrics_data: name: mana-victoria-data grafana_data: diff --git a/docker/grafana/dashboards/application-details.json b/docker/grafana/dashboards/application-details.json index ed3772d41..6f1ff4b5d 100644 --- a/docker/grafana/dashboards/application-details.json +++ b/docker/grafana/dashboards/application-details.json @@ -389,11 +389,12 @@ "gridPos": { "h": 1, "w": 24, "x": 0, "y": 22 }, "id": 9, "panels": [], - "title": "Node.js Runtime", + "title": "Auth Service Runtime (Node.js)", "type": "row" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "description": "Note: Only mana-core-auth exposes Node.js runtime metrics", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, @@ -441,14 +442,14 @@ "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, - "expr": "nodejs_heap_size_used_bytes{job=~\"$service\"}", - "legendFormat": "{{job}} used", + "expr": "auth_nodejs_heap_size_used_bytes", + "legendFormat": "Used", "refId": "A" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, - "expr": "nodejs_heap_size_total_bytes{job=~\"$service\"}", - "legendFormat": "{{job}} total", + "expr": "auth_nodejs_heap_size_total_bytes", + "legendFormat": "Total", "refId": "B" } ], @@ -504,9 +505,15 @@ "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, - "expr": "nodejs_eventloop_lag_seconds{job=~\"$service\"}", - "legendFormat": "{{job}}", + "expr": "auth_nodejs_eventloop_lag_mean_seconds", + "legendFormat": "Mean", "refId": "A" + }, + { + "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "expr": "auth_nodejs_eventloop_lag_p99_seconds", + "legendFormat": "p99", + "refId": "B" } ], "title": "Event Loop Lag", @@ -561,14 +568,14 @@ "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, - "expr": "nodejs_active_handles_total{job=~\"$service\"}", - "legendFormat": "{{job}} handles", + "expr": "auth_nodejs_active_handles_total", + "legendFormat": "Handles", "refId": "A" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, - "expr": "nodejs_active_requests_total{job=~\"$service\"}", - "legendFormat": "{{job}} requests", + "expr": "auth_nodejs_active_requests_total", + "legendFormat": "Requests", "refId": "B" } ], @@ -624,8 +631,8 @@ "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, - "expr": "rate(nodejs_gc_duration_seconds_sum{job=~\"$service\"}[5m])", - "legendFormat": "{{job}} {{kind}}", + "expr": "rate(auth_nodejs_gc_duration_seconds_sum[5m])", + "legendFormat": "{{kind}}", "refId": "A" } ], @@ -681,14 +688,14 @@ "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, - "expr": "rate(process_cpu_user_seconds_total{job=~\"$service\"}[5m]) * 100", - "legendFormat": "{{job}} user", + "expr": "rate(auth_process_cpu_user_seconds_total[5m]) * 100", + "legendFormat": "User", "refId": "A" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, - "expr": "rate(process_cpu_system_seconds_total{job=~\"$service\"}[5m]) * 100", - "legendFormat": "{{job}} system", + "expr": "rate(auth_process_cpu_system_seconds_total[5m]) * 100", + "legendFormat": "System", "refId": "B" } ], diff --git a/docker/grafana/dashboards/backends.json b/docker/grafana/dashboards/backends.json index 4411630f3..eeb5a6348 100644 --- a/docker/grafana/dashboards/backends.json +++ b/docker/grafana/dashboards/backends.json @@ -13,121 +13,65 @@ "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, "id": 1, "panels": [], - "title": "Docker Containers", + "title": "Service Health", "type": "row" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "fieldConfig": { "defaults": { - "color": { "mode": "palette-classic" }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { "legend": false, "tooltip": false, "viz": false }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { "type": "linear" }, - "showPoints": "never", - "spanNulls": false, - "stacking": { "group": "A", "mode": "none" }, - "thresholdsStyle": { "mode": "off" } - }, - "mappings": [], + "color": { "mode": "thresholds" }, + "mappings": [ + { + "options": { + "0": { "color": "red", "index": 1, "text": "DOWN" }, + "1": { "color": "green", "index": 0, "text": "UP" } + }, + "type": "value" + } + ], "thresholds": { "mode": "absolute", - "steps": [{ "color": "green", "value": null }] - }, - "unit": "percent" + "steps": [ + { "color": "red", "value": null }, + { "color": "green", "value": 1 } + ] + } }, "overrides": [] }, - "gridPos": { "h": 8, "w": 12, "x": 0, "y": 1 }, - "id": 2, + "gridPos": { "h": 4, "w": 24, "x": 0, "y": 1 }, + "id": 8, "options": { - "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true }, - "tooltip": { "mode": "single", "sort": "none" } + "colorMode": "background", + "graphMode": "none", + "justifyMode": "center", + "orientation": "horizontal", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "textMode": "auto" }, "pluginVersion": "10.0.0", "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, - "expr": "sum(rate(container_cpu_usage_seconds_total{id=~\"/docker/.+\"}[5m])) by (id) * 100", - "legendFormat": "{{id}}", + "expr": "up{job=~\"mana-core-auth|chat-backend|todo-backend|calendar-backend|clock-backend|contacts-backend\"}", + "legendFormat": "{{job}}", "refId": "A" } ], - "title": "Container CPU Usage", - "type": "timeseries" - }, - { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, - "fieldConfig": { - "defaults": { - "color": { "mode": "palette-classic" }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { "legend": false, "tooltip": false, "viz": false }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { "type": "linear" }, - "showPoints": "never", - "spanNulls": false, - "stacking": { "group": "A", "mode": "none" }, - "thresholdsStyle": { "mode": "off" } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [{ "color": "green", "value": null }] - }, - "unit": "decbytes" - }, - "overrides": [] - }, - "gridPos": { "h": 8, "w": 12, "x": 12, "y": 1 }, - "id": 3, - "options": { - "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true }, - "tooltip": { "mode": "single", "sort": "none" } - }, - "pluginVersion": "10.0.0", - "targets": [ - { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, - "expr": "container_memory_usage_bytes{id=~\"/docker/.+\"}", - "legendFormat": "{{id}}", - "refId": "A" - } - ], - "title": "Container Memory Usage", - "type": "timeseries" + "title": "All Backend Services", + "type": "stat" }, { "collapsed": false, - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 9 }, + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 5 }, "id": 4, "panels": [], - "title": "Backend API Metrics", + "title": "HTTP Traffic", "type": "row" }, { @@ -143,12 +87,12 @@ "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", + "fillOpacity": 20, + "gradientMode": "opacity", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, + "lineInterpolation": "smooth", + "lineWidth": 2, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "never", @@ -165,11 +109,16 @@ }, "overrides": [] }, - "gridPos": { "h": 8, "w": 12, "x": 0, "y": 10 }, + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 6 }, "id": 5, "options": { - "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true }, - "tooltip": { "mode": "single", "sort": "none" } + "legend": { + "calcs": ["mean", "max"], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "mode": "multi", "sort": "desc" } }, "pluginVersion": "10.0.0", "targets": [ @@ -196,12 +145,12 @@ "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", + "fillOpacity": 20, + "gradientMode": "opacity", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, + "lineInterpolation": "smooth", + "lineWidth": 2, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "never", @@ -218,11 +167,16 @@ }, "overrides": [] }, - "gridPos": { "h": 8, "w": 12, "x": 12, "y": 10 }, + "gridPos": { "h": 8, "w": 12, "x": 12, "y": 6 }, "id": 6, "options": { - "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true }, - "tooltip": { "mode": "single", "sort": "none" } + "legend": { + "calcs": ["mean", "max"], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "mode": "multi", "sort": "desc" } }, "pluginVersion": "10.0.0", "targets": [ @@ -255,12 +209,12 @@ "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", + "fillOpacity": 20, + "gradientMode": "opacity", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, + "lineInterpolation": "smooth", + "lineWidth": 2, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "never", @@ -277,11 +231,16 @@ }, "overrides": [] }, - "gridPos": { "h": 8, "w": 12, "x": 0, "y": 18 }, + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 14 }, "id": 7, "options": { - "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true }, - "tooltip": { "mode": "single", "sort": "none" } + "legend": { + "calcs": ["mean", "max"], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "mode": "multi", "sort": "desc" } }, "pluginVersion": "10.0.0", "targets": [ @@ -299,57 +258,274 @@ "datasource": { "type": "prometheus", "uid": "${datasource}" }, "fieldConfig": { "defaults": { - "color": { "mode": "thresholds" }, - "mappings": [ - { - "options": { - "0": { "color": "red", "index": 1, "text": "Down" }, - "1": { "color": "green", "index": 0, "text": "Up" } - }, - "type": "value" - } - ], + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "opacity", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "never", + "spanNulls": false, + "stacking": { "group": "A", "mode": "normal" }, + "thresholdsStyle": { "mode": "off" } + }, + "mappings": [], "thresholds": { "mode": "absolute", - "steps": [ - { "color": "red", "value": null }, - { "color": "green", "value": 1 } - ] + "steps": [{ "color": "green", "value": null }] }, - "unit": "short" + "unit": "reqps" }, - "overrides": [] + "overrides": [ + { + "matcher": { "id": "byRegexp", "options": ".*2[0-9]{2}.*" }, + "properties": [{ "id": "color", "value": { "fixedColor": "green", "mode": "fixed" } }] + }, + { + "matcher": { "id": "byRegexp", "options": ".*4[0-9]{2}.*" }, + "properties": [{ "id": "color", "value": { "fixedColor": "yellow", "mode": "fixed" } }] + }, + { + "matcher": { "id": "byRegexp", "options": ".*5[0-9]{2}.*" }, + "properties": [{ "id": "color", "value": { "fixedColor": "red", "mode": "fixed" } }] + } + ] }, - "gridPos": { "h": 8, "w": 12, "x": 12, "y": 18 }, - "id": 8, + "gridPos": { "h": 8, "w": 12, "x": 12, "y": 14 }, + "id": 9, "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": ["lastNotNull"], - "fields": "", - "values": false + "legend": { + "calcs": ["mean"], + "displayMode": "table", + "placement": "bottom", + "showLegend": true }, - "textMode": "auto" + "tooltip": { "mode": "multi", "sort": "desc" } }, "pluginVersion": "10.0.0", "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, - "expr": "up{job=~\"mana-core-auth|chat-backend|todo-backend|calendar-backend|clock-backend|contacts-backend\"}", - "legendFormat": "{{job}}", + "expr": "sum(rate(http_requests_total[5m])) by (status)", + "legendFormat": "{{status}}", "refId": "A" } ], - "title": "Service Health", - "type": "stat" + "title": "Requests by Status Code", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 22 }, + "id": 10, + "panels": [], + "title": "Auth Service Runtime (Node.js)", + "type": "row" + }, + { + "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "opacity", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "never", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [{ "color": "green", "value": null }] + }, + "unit": "decbytes" + }, + "overrides": [] + }, + "gridPos": { "h": 7, "w": 8, "x": 0, "y": 23 }, + "id": 11, + "options": { + "legend": { + "calcs": ["mean", "max"], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "mode": "multi", "sort": "desc" } + }, + "targets": [ + { + "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "expr": "auth_nodejs_heap_size_used_bytes", + "legendFormat": "Used", + "refId": "A" + }, + { + "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "expr": "auth_nodejs_heap_size_total_bytes", + "legendFormat": "Total", + "refId": "B" + } + ], + "title": "Heap Memory", + "type": "timeseries" + }, + { + "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "opacity", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "never", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [{ "color": "green", "value": null }] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { "h": 7, "w": 8, "x": 8, "y": 23 }, + "id": 12, + "options": { + "legend": { + "calcs": ["mean", "max"], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "mode": "multi", "sort": "desc" } + }, + "targets": [ + { + "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "expr": "auth_nodejs_eventloop_lag_mean_seconds", + "legendFormat": "Mean", + "refId": "A" + }, + { + "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "expr": "auth_nodejs_eventloop_lag_p99_seconds", + "legendFormat": "p99", + "refId": "B" + } + ], + "title": "Event Loop Lag", + "type": "timeseries" + }, + { + "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "opacity", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "never", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [{ "color": "green", "value": null }] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { "h": 7, "w": 8, "x": 16, "y": 23 }, + "id": 13, + "options": { + "legend": { + "calcs": ["mean", "max"], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "mode": "multi", "sort": "desc" } + }, + "targets": [ + { + "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "expr": "rate(auth_process_cpu_user_seconds_total[5m]) * 100", + "legendFormat": "User", + "refId": "A" + }, + { + "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "expr": "rate(auth_process_cpu_system_seconds_total[5m]) * 100", + "legendFormat": "System", + "refId": "B" + } + ], + "title": "CPU Usage", + "type": "timeseries" } ], "refresh": "30s", "schemaVersion": 38, - "tags": ["manacore", "backends", "docker"], + "tags": ["manacore", "backends"], "templating": { "list": [ { @@ -370,7 +546,7 @@ "time": { "from": "now-1h", "to": "now" }, "timepicker": {}, "timezone": "browser", - "title": "Backends & Docker", + "title": "Backends Overview", "uid": "backends-docker", "version": 1, "weekStart": ""