From 1ad460cee61a2a5724f20d8ca834107f4bf4f6f3 Mon Sep 17 00:00:00 2001 From: Joachim Bauch Date: Thu, 13 Nov 2025 14:39:57 +0100 Subject: [PATCH] Add metrics for media RTT / jitter. --- docs/prometheus-metrics.md | 2 ++ mcu_janus_events_handler.go | 9 +++++++++ mcu_stats_prometheus.go | 16 ++++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/docs/prometheus-metrics.md b/docs/prometheus-metrics.md index 6784592..ac4a3c2 100644 --- a/docs/prometheus-metrics.md +++ b/docs/prometheus-metrics.md @@ -66,3 +66,5 @@ The following metrics are available: | `signaling_mcu_ice_state_total` | Counter | 2.0.5 | Total number of ICE connection states | `state` | | `signaling_mcu_dtls_state_total` | Counter | 2.0.5 | Total number of DTLS connection states | `state` | | `signaling_mcu_slow_link_total` | Counter | 2.0.5 | Total number of slow link events | `media`, `direction` | +| `signaling_mcu_media_rtt` | Histogram | 2.0.5 | The roundtrip time of WebRTC media in milliseconds | `media` | +| `signaling_mcu_media_jitter` | Histogram | 2.0.5 | The jitter of WebRTC media in milliseconds | `media`, `origin` | diff --git a/mcu_janus_events_handler.go b/mcu_janus_events_handler.go index b1bae25..3467102 100644 --- a/mcu_janus_events_handler.go +++ b/mcu_janus_events_handler.go @@ -757,6 +757,15 @@ func (h *JanusEventsHandler) processEvent(event JanusEvent) { } statsJanusSlowLinkTotal.WithLabelValues(evt.Media, direction).Inc() case *JanusEventMediaStats: + if rtt := evt.RTT; rtt > 0 { + statsJanusMediaRTT.WithLabelValues(evt.Media).Observe(float64(rtt)) + } + if jitter := evt.JitterLocal; jitter > 0 { + statsJanusMediaJitter.WithLabelValues(evt.Media, "local").Observe(float64(jitter)) + } + if jitter := evt.JitterRemote; jitter > 0 { + statsJanusMediaJitter.WithLabelValues(evt.Media, "remote").Observe(float64(jitter)) + } h.mcu.UpdateBandwidth(event.HandleId, evt.Media, api.BandwidthFromBytes(uint64(evt.BytesSentLastSec)), api.BandwidthFromBytes(uint64(evt.BytesReceivedLastSec))) } } diff --git a/mcu_stats_prometheus.go b/mcu_stats_prometheus.go index 239249a..a13ef1b 100644 --- a/mcu_stats_prometheus.go +++ b/mcu_stats_prometheus.go @@ -128,6 +128,20 @@ var ( Name: "slow_link_total", Help: "Total number of slow link events", }, []string{"media", "direction"}) + statsJanusMediaRTT = prometheus.NewHistogramVec(prometheus.HistogramOpts{ + Namespace: "signaling", + Subsystem: "mcu", + Name: "media_rtt", + Help: "The roundtrip time of WebRTC media in milliseconds", + Buckets: prometheus.ExponentialBucketsRange(1, 10000, 25), + }, []string{"media"}) + statsJanusMediaJitter = prometheus.NewHistogramVec(prometheus.HistogramOpts{ + Namespace: "signaling", + Subsystem: "mcu", + Name: "media_jitter", + Help: "The jitter of WebRTC media in milliseconds", + Buckets: prometheus.ExponentialBucketsRange(1, 2000, 20), + }, []string{"media", "origin"}) janusMcuStats = []prometheus.Collector{ statsJanusBandwidthCurrent, @@ -137,6 +151,8 @@ var ( statsJanusICEStateTotal, statsJanusDTLSStateTotal, statsJanusSlowLinkTotal, + statsJanusMediaRTT, + statsJanusMediaJitter, } statsConnectedProxyBackendsCurrent = prometheus.NewGaugeVec(prometheus.GaugeOpts{