From 20649ba33d69d63b2b78feeb05516a1aed9bdca7 Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Sun, 10 May 2026 17:32:06 -0500 Subject: [PATCH] grafana: add T-Mobile Home Internet dashboard 15 panels covering gateway up/uptime, 4G/5G bars, and per-band RSRP/RSRQ/SNR/RSSI time series. Sources metrics from the new tmobile-exporter (job=tmobile_gateway). --- .../dashboards/tmobile-home-internet.json | 365 ++++++++++++++++++ 1 file changed, 365 insertions(+) create mode 100644 ansible/roles/grafana/files/dashboards/tmobile-home-internet.json diff --git a/ansible/roles/grafana/files/dashboards/tmobile-home-internet.json b/ansible/roles/grafana/files/dashboards/tmobile-home-internet.json new file mode 100644 index 0000000..ee2c03b --- /dev/null +++ b/ansible/roles/grafana/files/dashboards/tmobile-home-internet.json @@ -0,0 +1,365 @@ +{ + "uid": "tmobile-home-internet", + "title": "T-Mobile Home Internet", + "tags": ["network", "tmobile", "5g"], + "schemaVersion": 38, + "version": 1, + "timezone": "", + "refresh": "30s", + "time": {"from": "now-6h", "to": "now"}, + "editable": true, + "graphTooltip": 1, + "templating": { + "list": [ + { + "name": "datasource", + "label": "Datasource", + "type": "datasource", + "query": "prometheus", + "current": {"text": "Prometheus", "value": "Prometheus", "selected": false}, + "hide": 0, + "includeAll": false, + "multi": false, + "refresh": 1, + "skipUrlSync": false + }, + { + "name": "band_5g", + "label": "5G band", + "type": "query", + "datasource": "$datasource", + "query": {"query": "label_values(tmobile_gateway_rsrp{type=\"5g\"}, band)", "refId": "StandardVariableQuery"}, + "definition": "label_values(tmobile_gateway_rsrp{type=\"5g\"}, band)", + "hide": 0, + "includeAll": true, + "multi": true, + "refresh": 2, + "regex": "", + "sort": 1, + "skipUrlSync": false + }, + { + "name": "band_4g", + "label": "4G band", + "type": "query", + "datasource": "$datasource", + "query": {"query": "label_values(tmobile_gateway_rsrp{type=\"4g\"}, band)", "refId": "StandardVariableQuery"}, + "definition": "label_values(tmobile_gateway_rsrp{type=\"4g\"}, band)", + "hide": 0, + "includeAll": true, + "multi": true, + "refresh": 2, + "regex": "", + "sort": 1, + "skipUrlSync": false + } + ] + }, + "panels": [ + { + "type": "row", + "id": 100, + "title": "Overview", + "collapsed": false, + "gridPos": {"h": 1, "w": 24, "x": 0, "y": 0} + }, + { + "type": "stat", + "id": 1, + "title": "Gateway up", + "datasource": "$datasource", + "gridPos": {"h": 4, "w": 6, "x": 0, "y": 1}, + "fieldConfig": { + "defaults": { + "color": {"mode": "thresholds"}, + "mappings": [ + {"type": "value", "options": {"0": {"text": "DOWN", "color": "red"}, "1": {"text": "UP", "color": "green"}}} + ], + "thresholds": {"mode": "absolute", "steps": [ + {"color": "red", "value": null}, + {"color": "green", "value": 1} + ]} + } + }, + "options": { + "reduceOptions": {"calcs": ["lastNotNull"], "fields": "", "values": false}, + "graphMode": "none", + "colorMode": "background", + "textMode": "value" + }, + "targets": [ + {"expr": "tmobile_gateway_gateway_up", "refId": "A", "datasource": "$datasource"} + ] + }, + { + "type": "stat", + "id": 2, + "title": "Uptime", + "datasource": "$datasource", + "gridPos": {"h": 4, "w": 6, "x": 6, "y": 1}, + "fieldConfig": { + "defaults": { + "unit": "s", + "color": {"mode": "thresholds"}, + "thresholds": {"mode": "absolute", "steps": [ + {"color": "red", "value": null}, + {"color": "green", "value": 300} + ]} + } + }, + "options": { + "reduceOptions": {"calcs": ["lastNotNull"], "fields": "", "values": false}, + "graphMode": "area", + "colorMode": "value" + }, + "targets": [ + {"expr": "max(tmobile_gateway_uptime_seconds)", "refId": "A", "datasource": "$datasource"} + ] + }, + { + "type": "stat", + "id": 3, + "title": "5G bars", + "datasource": "$datasource", + "gridPos": {"h": 4, "w": 6, "x": 12, "y": 1}, + "fieldConfig": { + "defaults": { + "min": 0, + "max": 5, + "color": {"mode": "thresholds"}, + "thresholds": {"mode": "absolute", "steps": [ + {"color": "red", "value": null}, + {"color": "orange", "value": 2}, + {"color": "yellow", "value": 3}, + {"color": "green", "value": 4} + ]} + } + }, + "options": { + "reduceOptions": {"calcs": ["lastNotNull"], "fields": "", "values": false}, + "graphMode": "area", + "colorMode": "value" + }, + "targets": [ + {"expr": "max(tmobile_gateway_bars{type=\"5g\"})", "refId": "A", "datasource": "$datasource"} + ] + }, + { + "type": "stat", + "id": 4, + "title": "4G bars", + "datasource": "$datasource", + "gridPos": {"h": 4, "w": 6, "x": 18, "y": 1}, + "fieldConfig": { + "defaults": { + "min": 0, + "max": 5, + "color": {"mode": "thresholds"}, + "thresholds": {"mode": "absolute", "steps": [ + {"color": "red", "value": null}, + {"color": "orange", "value": 2}, + {"color": "yellow", "value": 3}, + {"color": "green", "value": 4} + ]} + } + }, + "options": { + "reduceOptions": {"calcs": ["lastNotNull"], "fields": "", "values": false}, + "graphMode": "area", + "colorMode": "value" + }, + "targets": [ + {"expr": "max(tmobile_gateway_bars{type=\"4g\"})", "refId": "A", "datasource": "$datasource"} + ] + }, + { + "type": "row", + "id": 101, + "title": "5G signal", + "collapsed": false, + "gridPos": {"h": 1, "w": 24, "x": 0, "y": 5} + }, + { + "type": "timeseries", + "id": 10, + "title": "RSRP 5G (dBm)", + "datasource": "$datasource", + "description": "Reference Signal Received Power. Better closer to 0; -80 to -90 is excellent, below -110 is poor.", + "gridPos": {"h": 8, "w": 12, "x": 0, "y": 6}, + "fieldConfig": { + "defaults": { + "unit": "dBm", + "custom": {"lineWidth": 1, "fillOpacity": 10, "showPoints": "never"}, + "thresholds": {"mode": "absolute", "steps": [ + {"color": "red", "value": null}, + {"color": "orange", "value": -110}, + {"color": "yellow", "value": -100}, + {"color": "green", "value": -90} + ]} + } + }, + "options": {"legend": {"showLegend": true, "displayMode": "list", "placement": "bottom"}, "tooltip": {"mode": "multi"}}, + "targets": [ + {"expr": "tmobile_gateway_rsrp{type=\"5g\", band=~\"$band_5g\"}", "legendFormat": "{{band}}", "refId": "A", "datasource": "$datasource"} + ] + }, + { + "type": "timeseries", + "id": 11, + "title": "RSRQ 5G (dB)", + "datasource": "$datasource", + "description": "Reference Signal Received Quality. Better closer to 0; -10 or higher is excellent, below -20 is poor.", + "gridPos": {"h": 8, "w": 12, "x": 12, "y": 6}, + "fieldConfig": { + "defaults": { + "unit": "dB", + "custom": {"lineWidth": 1, "fillOpacity": 10, "showPoints": "never"}, + "thresholds": {"mode": "absolute", "steps": [ + {"color": "red", "value": null}, + {"color": "orange", "value": -20}, + {"color": "yellow", "value": -15}, + {"color": "green", "value": -10} + ]} + } + }, + "options": {"legend": {"showLegend": true, "displayMode": "list", "placement": "bottom"}, "tooltip": {"mode": "multi"}}, + "targets": [ + {"expr": "tmobile_gateway_rsrq{type=\"5g\", band=~\"$band_5g\"}", "legendFormat": "{{band}}", "refId": "A", "datasource": "$datasource"} + ] + }, + { + "type": "timeseries", + "id": 12, + "title": "SNR 5G (dB)", + "datasource": "$datasource", + "description": "Signal to noise. Higher is better; >20 dB is excellent, <5 dB is poor.", + "gridPos": {"h": 8, "w": 12, "x": 0, "y": 14}, + "fieldConfig": { + "defaults": { + "unit": "dB", + "custom": {"lineWidth": 1, "fillOpacity": 10, "showPoints": "never"}, + "thresholds": {"mode": "absolute", "steps": [ + {"color": "red", "value": null}, + {"color": "orange", "value": 5}, + {"color": "yellow", "value": 13}, + {"color": "green", "value": 20} + ]} + } + }, + "options": {"legend": {"showLegend": true, "displayMode": "list", "placement": "bottom"}, "tooltip": {"mode": "multi"}}, + "targets": [ + {"expr": "tmobile_gateway_snr{type=\"5g\", band=~\"$band_5g\"}", "legendFormat": "{{band}}", "refId": "A", "datasource": "$datasource"} + ] + }, + { + "type": "timeseries", + "id": 13, + "title": "RSSI 5G (dBm)", + "datasource": "$datasource", + "gridPos": {"h": 8, "w": 12, "x": 12, "y": 14}, + "fieldConfig": { + "defaults": { + "unit": "dBm", + "custom": {"lineWidth": 1, "fillOpacity": 10, "showPoints": "never"} + } + }, + "options": {"legend": {"showLegend": true, "displayMode": "list", "placement": "bottom"}, "tooltip": {"mode": "multi"}}, + "targets": [ + {"expr": "tmobile_gateway_rssi{type=\"5g\", band=~\"$band_5g\"}", "legendFormat": "{{band}}", "refId": "A", "datasource": "$datasource"} + ] + }, + { + "type": "row", + "id": 102, + "title": "4G signal", + "collapsed": false, + "gridPos": {"h": 1, "w": 24, "x": 0, "y": 22} + }, + { + "type": "timeseries", + "id": 20, + "title": "RSRP 4G (dBm)", + "datasource": "$datasource", + "gridPos": {"h": 8, "w": 12, "x": 0, "y": 23}, + "fieldConfig": { + "defaults": { + "unit": "dBm", + "custom": {"lineWidth": 1, "fillOpacity": 10, "showPoints": "never"}, + "thresholds": {"mode": "absolute", "steps": [ + {"color": "red", "value": null}, + {"color": "orange", "value": -110}, + {"color": "yellow", "value": -100}, + {"color": "green", "value": -90} + ]} + } + }, + "options": {"legend": {"showLegend": true, "displayMode": "list", "placement": "bottom"}, "tooltip": {"mode": "multi"}}, + "targets": [ + {"expr": "tmobile_gateway_rsrp{type=\"4g\", band=~\"$band_4g\"}", "legendFormat": "{{band}}", "refId": "A", "datasource": "$datasource"} + ] + }, + { + "type": "timeseries", + "id": 21, + "title": "RSRQ 4G (dB)", + "datasource": "$datasource", + "gridPos": {"h": 8, "w": 12, "x": 12, "y": 23}, + "fieldConfig": { + "defaults": { + "unit": "dB", + "custom": {"lineWidth": 1, "fillOpacity": 10, "showPoints": "never"}, + "thresholds": {"mode": "absolute", "steps": [ + {"color": "red", "value": null}, + {"color": "orange", "value": -20}, + {"color": "yellow", "value": -15}, + {"color": "green", "value": -10} + ]} + } + }, + "options": {"legend": {"showLegend": true, "displayMode": "list", "placement": "bottom"}, "tooltip": {"mode": "multi"}}, + "targets": [ + {"expr": "tmobile_gateway_rsrq{type=\"4g\", band=~\"$band_4g\"}", "legendFormat": "{{band}}", "refId": "A", "datasource": "$datasource"} + ] + }, + { + "type": "timeseries", + "id": 22, + "title": "SNR 4G (dB)", + "datasource": "$datasource", + "gridPos": {"h": 8, "w": 12, "x": 0, "y": 31}, + "fieldConfig": { + "defaults": { + "unit": "dB", + "custom": {"lineWidth": 1, "fillOpacity": 10, "showPoints": "never"}, + "thresholds": {"mode": "absolute", "steps": [ + {"color": "red", "value": null}, + {"color": "orange", "value": 5}, + {"color": "yellow", "value": 13}, + {"color": "green", "value": 20} + ]} + } + }, + "options": {"legend": {"showLegend": true, "displayMode": "list", "placement": "bottom"}, "tooltip": {"mode": "multi"}}, + "targets": [ + {"expr": "tmobile_gateway_snr{type=\"4g\", band=~\"$band_4g\"}", "legendFormat": "{{band}}", "refId": "A", "datasource": "$datasource"} + ] + }, + { + "type": "timeseries", + "id": 23, + "title": "RSSI 4G (dBm)", + "datasource": "$datasource", + "gridPos": {"h": 8, "w": 12, "x": 12, "y": 31}, + "fieldConfig": { + "defaults": { + "unit": "dBm", + "custom": {"lineWidth": 1, "fillOpacity": 10, "showPoints": "never"} + } + }, + "options": {"legend": {"showLegend": true, "displayMode": "list", "placement": "bottom"}, "tooltip": {"mode": "multi"}}, + "targets": [ + {"expr": "tmobile_gateway_rssi{type=\"4g\", band=~\"$band_4g\"}", "legendFormat": "{{band}}", "refId": "A", "datasource": "$datasource"} + ] + } + ] +}