apiVersion: v1 kind: ConfigMap metadata: name: session-telemetry-dashboard labels: grafana_dashboard: "1" data: session-telemetry.json: | { "annotations": { "list": [] }, "editable": true, "gnetId": null, "graphTooltip": 0, "hideControls": false, "id": null, "iteration": 1583185057230, "links": [], "panels": [ { "datasource": "Prometheus", "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "red", "value": null }, { "color": "green", "value": 95 } ] }, "unit": "percent" }, "overrides": [] }, "gridPos": { "h": 4, "w": 6, "x": 0, "y": 0 }, "id": 1, "options": { "orientation": "auto", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, "showThresholdLabels": false, "showThresholdMarkers": true }, "pluginVersion": "8.0.0", "targets": [ { "expr": "sum(increase(session_peer_telemetry_total{video_seen="true", classifier=~"$classifier"}[$__range])) / sum(increase(session_peer_telemetry_total{classifier=~"$classifier"}[$__range])) * 100", "refId": "A" } ], "description": "Percentage of telemetry events where video was successfully seen by the participant.", "title": "Overall Video Success Rate", "type": "stat" }, { "datasource": "${logs}", "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] }, "unit": "none" }, "overrides": [] }, "gridPos": { "h": 4, "w": 6, "x": 6, "y": 0 }, "id": 13, "options": { "orientation": "auto", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, "showThresholdLabels": false, "showThresholdMarkers": true }, "pluginVersion": "8.0.0", "targets": [ { "expr": "sum(count_over_time({namespace=\"webrtc-be\", container=\"webrtc-be\"} |= \"type=join_telemetry\" |~ \"classifier=\\\"(${classifier:regex})\\\"\" [$__range]))", "refId": "A" } ], "description": "Total number of participants who joined a session in the selected time range.", "title": "Participants Joined", "type": "stat" }, { "datasource": "${logs}", "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "blue", "value": null } ] }, "unit": "none" }, "overrides": [] }, "gridPos": { "h": 4, "w": 6, "x": 12, "y": 0 }, "id": 14, "options": { "orientation": "auto", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, "showThresholdLabels": false, "showThresholdMarkers": true }, "pluginVersion": "8.0.0", "targets": [ { "expr": "count(sum by (room) (count_over_time({namespace=\"webrtc-be\", container=\"webrtc-be\"} |= \"type=join_telemetry\" |~ \"classifier=\\\"(${classifier:regex})\\\"\" | logfmt [$__range])))", "refId": "A" } ], "description": "Total number of unique rooms joined in the selected time range.", "title": "Unique Rooms Joined", "type": "stat" }, { "datasource": "${logs}", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisLabel": "Joins", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 10, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "smooth", "lineWidth": 2, "pointSize": 5, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] }, "unit": "none" }, "overrides": [] }, "gridPos": { "h": 4, "w": 6, "x": 18, "y": 0 }, "id": 15, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } }, "targets": [ { "expr": "sum(count_over_time({namespace=\"webrtc-be\", container=\"webrtc-be\"} |= \"type=join_telemetry\" |~ \"classifier=\\\"(${classifier:regex})\\\"\" [$__interval]))", "legendFormat": "Joins", "refId": "A" } ], "description": "Timeline of participant join events.", "title": "Join Events Over Time", "type": "timeseries" }, { "datasource": "Prometheus", "gridPos": { "h": 8, "w": 8, "x": 0, "y": 4 }, "id": 2, "options": { "legend": { "displayMode": "list", "placement": "right", "values": [ "value" ] }, "pieType": "pie", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false } }, "targets": [ { "expr": "sum(increase(session_peer_telemetry_total{classifier=~"$classifier"}[$__range])) by (p2p)", "legendFormat": "P2P: {{ "{{" }}p2p{{ "}}" }}", "refId": "A" } ], "description": "Breakdown of peer connections using direct P2P vs those relayed through a TURN server.", "title": "P2P vs non-P2P", "type": "piechart" }, { "datasource": "Prometheus", "gridPos": { "h": 8, "w": 8, "x": 8, "y": 4 }, "id": 12, "options": { "legend": { "displayMode": "list", "placement": "right", "values": [ "value" ] }, "pieType": "pie", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false } }, "targets": [ { "expr": "sum(increase(session_peer_telemetry_total{classifier=~"$classifier"}[$__range])) by (relay)", "legendFormat": "Relay: {{ "{{" }}relay{{ "}}" }}", "refId": "A" } ], "description": "Breakdown of peer connections using a TURN relay vs direct connections.", "title": "Turn vs No Turn", "type": "piechart" }, { "datasource": "Prometheus", "gridPos": { "h": 8, "w": 8, "x": 16, "y": 4 }, "id": 3, "options": { "legend": { "displayMode": "list", "placement": "right", "values": [ "value" ] }, "pieType": "pie", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false } }, "targets": [ { "expr": "sum(increase(session_peer_telemetry_total{classifier=~"$classifier"}[$__range])) by (protocol)", "legendFormat": "{{ "{{" }}protocol{{ "}}" }}", "refId": "A" } ], "description": "Comparison of transport protocols (UDP vs TCP) used by participants.", "title": "Protocol Breakdown (UDP/TCP)", "type": "piechart" }, { "datasource": "Prometheus", "gridPos": { "h": 8, "w": 8, "x": 0, "y": 12 }, "id": 4, "options": { "legend": { "displayMode": "list", "placement": "right", "values": [ "value" ] }, "pieType": "pie", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false } }, "targets": [ { "expr": "sum(increase(session_summary_telemetry_total{type=\"join\", classifier=~\"${classifier:regex}\"}[$__range])) by (how_many_seen)", "legendFormat": "{{ "{{" }}how_many_seen{{ "}}" }}", "refId": "A" } ], "description": "Summary of what participants saw upon joining (e.g., 'first' in the room vs 'all' others seen).", "title": "Join Summary", "type": "piechart" }, { "datasource": "Prometheus", "gridPos": { "h": 8, "w": 8, "x": 8, "y": 12 }, "id": 7, "options": { "legend": { "displayMode": "list", "placement": "right", "values": [ "value" ] }, "pieType": "pie", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false } }, "targets": [ { "expr": "sum(increase(session_summary_telemetry_total{type=\"leave\", classifier=~\"${classifier:regex}\"}[$__range])) by (how_many_seen)", "legendFormat": "{{ "{{" }}how_many_seen{{ "}}" }}", "refId": "A" } ], "description": "Summary of what participants had seen by the time they left the session.", "title": "Leave Summary", "type": "piechart" }, { "datasource": "Prometheus", "gridPos": { "h": 8, "w": 8, "x": 0, "y": 20 }, "id": 5, "options": { "calculate": false, "calculation": {}, "color": { "mode": "scheme", "scheme": "Oranges" }, "dataFormat": "tsbuckets", "hideZeroBuckets": true, "yAxis": { "axisPlacement": "auto", "axisUnit": "short" } }, "targets": [ { "expr": "sum(increase(session_join_telemetry_others_bucket{classifier=~\"${classifier:regex}\"}[$__range])) by (le)", "format": "heatmap", "refId": "A" } ], "description": "Heatmap showing the number of other participants already present in the room when a new user joins.", "title": "Participants on Join (Distribution)", "type": "heatmap" }, { "datasource": "Prometheus", "gridPos": { "h": 8, "w": 8, "x": 8, "y": 20 }, "id": 6, "options": { "calculate": false, "calculation": {}, "color": { "mode": "scheme", "scheme": "Blues" }, "dataFormat": "tsbuckets", "hideZeroBuckets": true, "yAxis": { "axisPlacement": "auto", "axisUnit": "s" } }, "targets": [ { "expr": "sum(increase(session_join_telemetry_age_bucket{classifier=~\"${classifier:regex}\"}[$__range])) by (le)", "format": "heatmap", "refId": "A" } ], "description": "Heatmap showing how long the session has been active when a new user joins.", "title": "Session Age on Join (Distribution)", "type": "heatmap" }, { "datasource": "${logs}", "fieldConfig": { "defaults": { "custom": { "align": "auto", "displayMode": "auto" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] } }, "overrides": [] }, "gridPos": { "h": 8, "w": 24, "x": 0, "y": 28 }, "id": 8, "options": { "showHeader": true }, "targets": [ { "expr": "{namespace=\"webrtc-be\", container=\"webrtc-be\"} |= \"type=peer_telemetry\" |~ \"classifier=\\\"(${classifier:regex})\\\"\" | logfmt", "maxLines": 500, "refId": "A" } ], "description": "Raw table of connection and media telemetry events per user/room.", "title": "Raw Peer Telemetry", "transformations": [ { "id": "extractFields", "options": { "format": "json", "source": "labels" } }, { "id": "organize", "options": { "excludeByName": { "app": true, "app_kubernetes_io_component": true, "app_kubernetes_io_name": true, "cluster": true, "container": true, "filename": true, "id": true, "job": true, "labels": true, "level": true, "Line": true, "namespace": true, "pod": true, "pod_template_hash": true, "stream": true, "tsNs": true, "type": true }, "indexByName": { "Time": 0, "room": 1, "user": 2, "p2p": 3, "protocol": 4, "relay": 5, "turn_server": 6, "video_seen": 7, "local_candidate_type": 8, "remote_candidate_type": 9, "remote_ip": 10, "ice_state": 11, "user_agent": 12, "local_url": 13, "local_port": 14, "local_rel_port": 15, "local_rel_addr": 16, "rtt": 17 }, "renameByName": { "ice_state": "ICE State", "local_candidate_type": "Local Candidate", "remote_candidate_type": "Remote Candidate", "remote_ip": "Remote IP", "user_agent": "User Agent", "local_url": "STUN/TURN URL", "local_port": "Ext Port", "local_rel_port": "Int Port", "local_rel_addr": "Int IP", "rtt": "RTT" } } } ], "type": "table" }, { "datasource": "${logs}", "fieldConfig": { "defaults": { "custom": { "align": "auto", "displayMode": "auto" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] } }, "overrides": [] }, "gridPos": { "h": 8, "w": 24, "x": 0, "y": 36 }, "id": 9, "options": { "showHeader": true }, "targets": [ { "expr": "{namespace=\"webrtc-be\", container=\"webrtc-be\"} |= \"type=join_telemetry\" |~ \"classifier=\\\"(${classifier:regex})\\\"\" | logfmt", "maxLines": 500, "refId": "A" } ], "description": "Raw table of events recorded exactly when a user joins a room.", "title": "Raw Join Telemetry", "transformations": [ { "id": "extractFields", "options": { "format": "json", "source": "labels" } }, { "id": "organize", "options": { "excludeByName": { "app": true, "app_kubernetes_io_component": true, "app_kubernetes_io_name": true, "cluster": true, "container": true, "filename": true, "id": true, "job": true, "labels": true, "level": true, "Line": true, "namespace": true, "pod": true, "pod_template_hash": true, "stream": true, "tsNs": true, "type": true }, "indexByName": { "Time": 0, "room": 1, "user": 2, "others_on_join": 3, "session_age_on_join": 4 }, "renameByName": {} } } ], "type": "table" }, { "datasource": "${logs}", "fieldConfig": { "defaults": { "custom": { "align": "auto", "displayMode": "auto" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] } }, "overrides": [] }, "gridPos": { "h": 8, "w": 24, "x": 0, "y": 44 }, "id": 10, "options": { "showHeader": true }, "targets": [ { "expr": "{namespace=\"webrtc-be\", container=\"webrtc-be\"} |= \"type=join_summary_telemetry\" |~ \"classifier=\\\"(${classifier:regex})\\\"\" | logfmt", "maxLines": 500, "refId": "A" } ], "description": "Detailed counts of participants seen by the user upon joining.", "title": "Raw Join Summary Telemetry", "transformations": [ { "id": "extractFields", "options": { "format": "json", "source": "labels" } }, { "id": "organize", "options": { "excludeByName": { "app": true, "app_kubernetes_io_component": true, "app_kubernetes_io_name": true, "cluster": true, "container": true, "filename": true, "id": true, "job": true, "labels": true, "level": true, "Line": true, "namespace": true, "pod": true, "pod_template_hash": true, "stream": true, "tsNs": true, "type": true }, "indexByName": { "Time": 0, "room": 1, "user": 2, "how_many_seen_on_join": 3 }, "renameByName": {} } } ], "type": "table" }, { "datasource": "${logs}", "fieldConfig": { "defaults": { "custom": { "align": "auto", "displayMode": "auto" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] } }, "overrides": [] }, "gridPos": { "h": 8, "w": 24, "x": 0, "y": 52 }, "id": 11, "options": { "showHeader": true }, "targets": [ { "expr": "{namespace=\"webrtc-be\", container=\"webrtc-be\"} |= \"type=leave_summary_telemetry\" |~ \"classifier=\\\"(${classifier:regex})\\\"\" | logfmt", "maxLines": 500, "refId": "A" } ], "description": "Detailed counts of participants seen by the user throughout their entire session once they leave.", "title": "Raw Leave Summary Telemetry", "transformations": [ { "id": "extractFields", "options": { "format": "json", "source": "labels" } }, { "id": "organize", "options": { "excludeByName": { "app": true, "app_kubernetes_io_component": true, "app_kubernetes_io_name": true, "cluster": true, "container": true, "filename": true, "id": true, "job": true, "labels": true, "level": true, "Line": true, "namespace": true, "pod": true, "pod_template_hash": true, "stream": true, "tsNs": true, "type": true }, "indexByName": { "Time": 0, "room": 1, "user": 2, "how_many_seen_on_leave": 3 }, "renameByName": {} } } ], "type": "table" }, { "datasource": "${logs}", "fieldConfig": { "defaults": { "custom": { "align": "auto", "displayMode": "auto" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] } }, "overrides": [] }, "gridPos": { "h": 8, "w": 24, "x": 0, "y": 60 }, "id": 16, "options": { "showHeader": true }, "targets": [ { "expr": "{namespace=\"webrtc-be\", container=\"webrtc-be\"} |= \"type=peer_telemetry\" |~ \"classifier=\\\"(${classifier:regex})\\\"\" |= \"protocol=unknown\" | logfmt", "maxLines": 500, "refId": "A" } ], "description": "Filtered view of telemetry where the protocol was reported as unknown.", "title": "Unknown Peers", "transformations": [ { "id": "extractFields", "options": { "format": "json", "source": "labels" } }, { "id": "organize", "options": { "excludeByName": { "app": true, "app_kubernetes_io_component": true, "app_kubernetes_io_name": true, "cluster": true, "container": true, "filename": true, "id": true, "job": true, "labels": true, "level": true, "Line": true, "namespace": true, "pod": true, "pod_template_hash": true, "stream": true, "tsNs": true, "type": true }, "indexByName": { "Time": 0, "room": 1, "user": 2, "p2p": 3, "protocol": 4, "relay": 5, "turn_server": 6, "video_seen": 7, "local_candidate_type": 8, "remote_candidate_type": 9, "remote_ip": 10, "ice_state": 11, "user_agent": 12, "local_url": 13, "local_port": 14, "local_rel_port": 15, "local_rel_addr": 16, "rtt": 17 }, "renameByName": { "ice_state": "ICE State", "local_candidate_type": "Local Candidate", "remote_candidate_type": "Remote Candidate", "remote_ip": "Remote IP", "user_agent": "User Agent", "local_url": "STUN/TURN URL", "local_port": "Ext Port", "local_rel_port": "Int Port", "local_rel_addr": "Int IP", "rtt": "RTT" } } } ], "type": "table" } ], "refresh": "30s", "schemaVersion": 30, "style": "dark", "tags": ["webrtc", "telemetry"], "templating": { "list": [ { "current": { "selected": false, "text": "Loki", "value": "Loki" }, "hide": 0, "includeAll": false, "label": "Logs Datasource", "multi": false, "name": "logs", "options": [], "query": "loki", "refresh": 1, "regex": "", "skipUrlSync": false, "type": "datasource" }, { "allValue": ".*", "current": { "selected": false, "text": "All", "value": "$__all" }, "hide": 0, "includeAll": true, "label": "Classifier", "multi": true, "name": "classifier", "options": [ { "selected": true, "text": "All", "value": "$__all" }, { "selected": false, "text": "Real", "value": "Real" }, { "selected": false, "text": "Test", "value": "Test" }, { "selected": false, "text": "Probe", "value": "Probe" } ], "query": "Real,Test,Probe", "queryValue": "", "skipUrlSync": false, "type": "custom" } ] }, "time": { "from": "now-1h", "to": "now" }, "timepicker": {}, "timezone": "", "title": "WebRTC Session Telemetry", "uid": "webrtc-session-telemetry" }