Jitsi-Metriken – mit Telegraf, InfluxDB und Grafana

Diesen Beitrag schrieb ich 1 Jahr und 4 Monate zuvor; die nachfolgenden Ausführungen müssen heute weder genau so nach wie vor funktionieren, noch meiner heutigen Meinung entsprechen. Behalte das beim Lesen (und vor allem: beim Nachmachen!) bitte stets im Hinterkopf.

Eigentlich genügt es zu wissen, dass es die JVB-Metriken gibt und wie man an sie herankommt.

Geschätzte Lesezeit: 2 Minuten

Für den Betrieb von #tabsvongesternnacht ist es relevant, auf regelmäßiger Basis Zahlen zu sammeln. Doch: wie?

In meinem ursprünglichen Jitsi-Setup, hier ausführlich dokumentiert, nutzte ich einen Prometheus-Exporter. Der funktionierte gut, wurde jedoch nicht weiterentwickelt. Und irgendwann liefen Exporter und Jitsi so weit auseinander, dass ich diese Kombination nicht mehr zum Funktionieren bewegen konnte.

JVB stellt Metriken bereit

jitsi/jvb stellt so einiges an Information zur Verfügung. Nach wie vor betreibe ich die Maschinerie innerhalb von Docker-Containern. Im .env meines Docker-Setups habe ich COLIBRI_REST_ENABLED=True definiert.

Mein JVB-Container heißt wa-jitsi-jvb. Mit einem Bein steht er im Netzwerk workadventure, mit dem anderen im Netzwerk meetup. Deshalb würde die übliche Abfrage beide IP-Adressen zutage fördern.


$ docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' wa-jitsi-jvb
172.19.0.6172.18.0.6

Um meine Statistiken zu erhalten, muss ich allerdings nur genau eine IP-Adresse des Containers wissen. (Welche hat sich in meinem Fall als zweitrangig erwiesen – die Metriken lassen sich unter beiden abrufen.) Ich entscheide mich einfach mal für die Adresse des Netzwerks workadventure.


$ docker inspect -f '{{.NetworkSettings.Networks.workadventure.IPAddress}}' wa-jitsi-jvb
172.18.0.6

Mit curl lässt sich das gut prüfen.

$ curl http://172.18.0.6:8080/colibri/stats | jq
{
  "inactive_endpoints": 0,
  "inactive_conferences": 0,
  "total_ice_succeeded_relayed": 0,
  "colibri2": true,
  "total_loss_degraded_participant_seconds": 0,
  "bit_rate_download": 0,
  "local_active_endpoints": 0,
  "muc_clients_connected": 1,
  "total_participants": 0,
  "total_packets_received": 0,
  "rtt_aggregate": 0,
  "packet_rate_upload": 0,
  "p2p_conferences": 0,
  ...
}

Konfig für Telegraf

## File: "/etc/telegraf/telegraf.d/jitsi.conf"
[[inputs.http]]
  name_override = "jitsi_stats"
  urls = ["http://172.18.0.6::8080/colibri/stats"]
  data_format = "json"

Damit die Daten in InfluxDB landen ist es erforderlich, in Telegraf entsprechend outputs.influxdb zu definieren.

## File: "/etc/telegraf/telegraf.conf"
...
[[outputs.influxdb]]
  urls = ["http://127.0.0.1:8086"]
  database = "telegraf"
  username = "telegraf"
  password = "9gpKcETrQN4MUg7LWl0P0VOF"
...

Nach einem Restart von telegraf.service greift sich dieses die Metriken auf konfigurierter regelmäßiger Basis ab und steckt sie in InfluxDB. (Ich setze hierbei eine betriebsbereite InfluxDB auf 127.0.0.1:8086 voraus; diese soll nicht Bestandteil dieses kurzen Artikels sein.)

Abfragen für Grafana

server habe ich als Dashboard-Variable in Grafana erfasst:

SHOW TAG VALUES FROM system WITH KEY=host

Darauf aufbauend lassen sich nun diverse Abfragen formulieren und, beispielsweise als Stats-Panel, in Grafana einbauen.

SELECT last("conferences")
FROM "jitsi_stats"
WHERE ("host" =~ /^$server$/) AND $timeFilter
GROUP BY time($interval)

Zuletzt erfasste Anzahl laufender Konferenzen

SELECT last("participants")
FROM "jitsi_stats"
WHERE ("host" =~ /^$server$/) AND $timeFilter
GROUP BY time($interval)

Zuletzt erfasste Anzahl an Teilnehmern in allen laufenden Konferenzen

Exemplarische Darstellung im Grafana-Dashboard

Exemplarische Darstellung im Grafana-Dashboard

Wenn die IP des Containers sich ständig ändert

Nun läuft mein Jitsi nicht permanent, sondern nur bei Bedarf. Läuft es nicht, müllt Telegraf mir das syslog voll, weil es den Endpoint nicht erreichen kann. Und läuft es dann wieder an ist nicht gesagt, dass die Container mit den gleichen IP-Adressen wie zuvor hochkommen.

Deshalb hat es sich bewährt, innerhalb des Cron-Jobs zum Herunterfahren von Jitsi auch die Telegraf-Konfig zu verwerfen.

sudo rm /etc/telegraf/telegraf.d/jitsi.conf
sudo systemctl restart telegraf.service

Analog dazu erstellt der Cron-Job, der das Ganze anstartet, eine passende Telegraf-Konfig und gibt auch dem Dienst einen Tritt.


sudo bash -c 'JVB_IP_ADDRESS=$( docker inspect -f '{{.NetworkSettings.Networks.workadventure.IPAddr
ess}}' wa-jitsi-jvb ) && cat <<EOF > /etc/telegraf/telegraf.d/jitsi.conf
[[inputs.http]]
  name_override = "jitsi_stats"
  urls = ["http://$JVB_IP_ADDRESS:8080/colibri/stats"]
  data_format = "json"
EOF'

sudo systemctl restart telegraf.service

Fazit

Der Ansatz ist nicht fancy; dafür tut er aber, was er soll – ist recht niederschwellig und solide. Eigentlich genügt es zu wissen, dass es die JVB-Metriken gibt und wie man an herankommt; was man dann damit anstellt, ist dann schon wieder eine ganz andere Sache.

Alle Bilder dieser Seite: © Marianne Spiller – Alle Rechte vorbehalten
Hintergrundbild: Bild genauer anschauen – © Marianne Spiller – Alle Rechte vorbehalten

Du nutzt etwas ähnliches, aber besser, magst die von mir eingesetzte Software nicht, findest das alles gänzlich überflüssig und würdest es sowieso ganz anders machen? Das ist wunderbar – du solltest unbedingt einen eigenen Artikel in deinem Blog dazu schreiben!

Habe ich jedoch etwas missverständlich formuliert, gar ganz ausgelassen oder mich vertippt?
Artikel in diesem Bereich kannst du überarbeiten und ergänzen!
→ Hier geht es zum öffentlichen Repository... ←

Eure Gedanken zu „Jitsi-Metriken – mit Telegraf, InfluxDB und Grafana“

Ich freue mich über jeden Kommentar, es sei denn, er ist blöd. Deshalb behalte ich mir auch vor, die richtig blöden kurzerhand wieder zu löschen. Die Kommentarfunktion ist über GitHub realisiert, weshalb ihr euch zunächst dort einloggen und „utterances“ bestätigen müsst. Die Kommentare selbst werden im Issue-Tracker und mit dem Label „✨💬✨ comment“ erfasst – jeder Blogartikel ist ein eigenes Issue. Über GitHub könnt ihr eure Kommentare somit jederzeit bearbeiten oder löschen.