feat(rtcstats): add rtcstats support (#2116)

* feat(rtcstats): add rtcstats support

* chore(rtcstats): update users.json to use placeholder password

* chore(rtcstats): update RTCSTATS_STORE_LOGS in env.example

* chore(rtcstats): add expose ports

* feat(rtcstats): add mongodb support

* docs(rtcstats): add readme for mongodb integration

* chore(rtcstats): fix readme

* feat(rtcstats): add grafana dashboard for prometheus metrics

* chore(rtcstats): update readme

* chore(rtcstats): fix readme

* chore(rtcstats): add troubleshooting to localstack readme

* fix(rtcstats): improve accuracy of dashboard graphs

* fix(rtcstats): fix typo in dashboard display name

* fix(rtcstats): simplify and clean up localstack configuration

* docs(rtcstats): improve localstack readme

---------

Co-authored-by: Andrei Gavrilescu <51706180+andrei-gavrilescu@users.noreply.github.com>
This commit is contained in:
Kota Nakagawa
2026-03-17 06:34:22 +09:00
committed by GitHub
parent e127e5d43c
commit 5e297f3879
16 changed files with 1048 additions and 0 deletions

View File

@@ -9,6 +9,10 @@
{{ $XMPP_DOMAIN := .Env.XMPP_DOMAIN | default "meet.jitsi" -}}
{{ $XMPP_BOSH_URL_BASE := .Env.XMPP_BOSH_URL_BASE | default "http://xmpp.meet.jitsi:5280" -}}
{{ $CORS_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN := .Env.CORS_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN | default "*" }}
{{ $RTCSTATS_ENABLED := .Env.RTCSTATS_ENABLED | default "false" | toBool -}}
{{ $RTCSTATS_URL_BASE := .Env.RTCSTATS_URL_BASE | default "http://rtcstats-server.meet.jitsi:3000" -}}
{{ $RTC_VISUALIZER_URL_BASE := .Env.RTC_VISUALIZER_URL_BASE | default "http://rtc-visualizer.meet.jitsi:8087" -}}
{{ $RTC_VISUALIZER_PATH := .Env.RTC_VISUALIZER_PATH | default "rtc-visualizer" -}}
server_name _;
@@ -139,6 +143,36 @@ location ^~ /etherpad/ {
}
{{ end }}
{{ if $RTCSTATS_ENABLED }}
# rtcstats websockets
location = /rtcstats-ws/ {
tcp_nodelay on;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass {{ $RTCSTATS_URL_BASE }}/;
}
# rtc-visualizer
location = /{{ $RTC_VISUALIZER_PATH }} {
return 301 $scheme://$http_host$request_uri/;
}
location ^~ /{{ $RTC_VISUALIZER_PATH }}/ {
tcp_nodelay on;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass {{ $RTC_VISUALIZER_URL_BASE }}/;
}
{{ end }}
{{ if .Env.WHITEBOARD_COLLAB_SERVER_URL_BASE }}
# whiteboard (excalidraw-backend)
location = /socket.io/ {

View File

@@ -33,6 +33,7 @@
{{ $ENABLE_JAAS_COMPONENTS := .Env.ENABLE_JAAS_COMPONENTS | default "0" | toBool }}
{{ $HIDE_PREJOIN_DISPLAY_NAME := .Env.HIDE_PREJOIN_DISPLAY_NAME | default "false" | toBool -}}
{{ $PUBLIC_URL := .Env.PUBLIC_URL | default "https://localhost:8443" -}}
{{ $PUBLIC_URL_DOMAIN := .Env.PUBLIC_URL | default "https://localhost:8443" | trimPrefix "https://" | trimSuffix "/" -}}
{{ $RESOLUTION := .Env.RESOLUTION | default "720" -}}
{{ $RESOLUTION_MIN := .Env.RESOLUTION_MIN | default "180" -}}
{{ $RESOLUTION_WIDTH := .Env.RESOLUTION_WIDTH | default "1280" -}}
@@ -67,6 +68,10 @@
{{ $CODEC_ORDER_JVB_MOBILE := .Env.CODEC_ORDER_JVB_MOBILE | default "[\"VP8\", \"VP9\", \"H264\", \"AV1\"]" -}}
{{ $CODEC_ORDER_P2P := .Env.CODEC_ORDER_JVB | default "[\"AV1\", \"VP9\", \"VP8\", \"H264\"]" -}}
{{ $CODEC_ORDER_P2P_MOBILE := .Env.CODEC_ORDER_JVB_MOBILE | default "[\"VP8\", \"VP9\", \"H264\", \"AV1\"]" -}}
{{ $RTCSTATS_ENABLED := .Env.RTCSTATS_ENABLED | default "false" | toBool -}}
{{ $RTCSTATS_STORE_LOGS := .Env.RTCSTATS_STORE_LOGS | default "false" | toBool -}}
{{ $RTCSTATS_POLL_INTERVAL := .Env.RTCSTATS_POLL_INTERVAL | default 10000 -}}
{{ $RTCSTATS_SEND_SDP := .Env.RTCSTATS_SEND_SDP | default "false" | toBool -}}
// Video configuration.
//
@@ -215,6 +220,15 @@ config.localRecording = {
config.analytics = {};
{{ if $RTCSTATS_ENABLED -}}
// RTCStats configuration.
config.analytics.rtcstatsEnabled = true;
config.analytics.rtcstatsStoreLogs = {{ $RTCSTATS_STORE_LOGS }};
config.analytics.rtcstatsEndpoint = 'wss://{{ $PUBLIC_URL_DOMAIN }}/rtcstats-ws';
config.analytics.rtcstatsPollInterval = {{ $RTCSTATS_POLL_INTERVAL }};
config.analytics.rtcstatsSendSdp = {{ $RTCSTATS_SEND_SDP }};
{{ end -}}
{{ if .Env.AMPLITUDE_ID -}}
// The Amplitude APP Key:
config.analytics.amplitudeAPPKey = '{{ .Env.AMPLITUDE_ID }}';