Installation service BBB Colibris
Plan d'action
Prendre un serveur Hetzner dédié pour BBBMigrer le mattermost
Utiliser le serveur libéré pour installer Debian11, y créer des VM
Installation BBB
https://pad.colibris-outilslibres.org/p/migrations_serveursServeur
Checklist
- Choix d'un serveur :
- Core i7 - 64Mb - 2x500Gb SSD - NIC 1 Gb à 34.29€ TTC / mois
- Installation d'un Ubuntu 18.04.5 -> OK
- configuration clés SSH
- Flo -> OK
- Jeey -> OK
- Install BBB via le script
Configuration
- DNS : mise à jour du DNS des entrées A (88.99.95.38) et AAAA (2a01:4f8:10a:1f65::2) sur cloudflare pour visio.colibris-lemouvement.org -> OK
- DNS : Création d'un CNAME coturn.colibris-lemouvement.org
Install
- apt upgrade -y # mise a jour systeme
- hostnamectl set-hostname visio.colibris-lemouvement.org
- vi /etc/hosts # changer a la mano pour visio.colibris-lemouvement.org
- apt install htop vim # necessaire de survie
- vi /root/.ssh/authorized_keys # mettre les clés de jeey et mrflos
- reboot
- wget -qO- https://ubuntu.bigbluebutton.org/bbb-install.sh | bash -s -- -w -v bionic-23 -s visio.colibris-lemouvement.org -e contact@colibris-outilslibres.org -g -c coturn.colibris-lemouvement.org:monmotdepasse
Post-install
passé l'install, un soucis avec coturn qui ne semble pas accessible (TODO plus tard)
On ouvre les ports ufw
ufw allow 3478
ufw allow 5349
ufw allow 32769:65535/udp
ufw allow 4000 #pour BBB-recorder
sudo systemctl restart coturn
- Administration Greenlight
- On crée un admin par défaut
- cd /root/greenlight
- docker exec greenlight-v2 bundle exec rake admin:create
- on se connecte au compte admin à partir de https://visio.colibris-lemouvement.org/b
- changement du mot de passe par défaut
- Paramètrage de l'organisation
- paramètre du site :
- couleurs
- base :
- plus clair :
- plus sombre :
- Paramètres du site :
- méthode d'inscription : Invitation
- TODO configuration serveur mail
- Nombre de salles par utilisateur : 5
config nginx
stream {
- upstream web {
- server coturn.colibris-lemouvement.org;
- }
- upstream turn {
- server 2a01:4f8:10a:1f65::2:5349;
- }
- map $ssl_preread_alpn_protocols $upstream {
- ~\bh2\b web;
- ~\bhttp/1. web;
- default turn;
- }
- server {
- listen 80;
- listen [::]:80;
- proxy_pass coturn.colibris-lemouvement.org:80;
- }
- server {
- listen 443;
- listen [::]:443;
- ssl_preread on;
- proxy_pass $upstream;
- }
vi /etc/default/coturn (decommenter la ligne TURNSERVER_ENABLED=1)
vi /etc/turnserver.conf
listening-port=3478
tls-listening-port=5349
listening-ip=88.99.95.38
listening-ip=2a01:4f8:10a:1f65::2
relay-ip=88.99.95.38
relay-ip=2a01:4f8:10a:1f65::2
If the server is behind NAT, you need to specify the external IP address.
If there is only one external address, specify it like this:
#external-ip=172.17.19.120
If you have multiple external addresses, you have to specify which
internal address each corresponds to, like this. The first address is the
external ip, and the second address is the corresponding internal IP.
#external-ip=172.17.19.131/10.0.0.11 #external-ip=172.17.18.132/10.0.0.12min-port=32769
max-port=65535
verbose
#no-tcp-relay
fingerprint
lt-cred-mech
use-auth-secret
static-auth-secret=sK^Z86y^KdBZE,D6
realm=colibris-lemouvement.org
cert=/etc/turnserver/fullchain.pem
pkey=/etc/turnserver/privkey.pem
From https://ssl-config.mozilla.org/ Intermediate, openssl 1.1.0g, 2020-01
cipher-list="ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384"
dh-file=/etc/turnserver/dhp.pem
keep-address-family
no-cli
no-tlsv1
no-tlsv1_1
Block connections to IP ranges which shouldn't be reachable
no-loopback-peers
no-multicast-peers
CVE-2020-26262
If running coturn version older than 4.5.2, uncomment these rules and ensure
that you have listening-ip set to ipv4 addresses only.
#denied-peer-ip=0.0.0.0-0.255.255.255
#denied-peer-ip=127.0.0.0-127.255.255.255
#denied-peer-ip=::1
Private (LAN) addresses
If you are running BigBlueButton within a LAN, you might need to add an "allow" rule for your address range.
IPv4 Private-Use
denied-peer-ip=10.0.0.0-10.255.255.255 denied-peer-ip=172.16.0.0-172.31.255.255denied-peer-ip=192.168.0.0-192.168.255.255
Other IPv4 Special-Purpose addresses
denied-peer-ip=100.64.0.0-100.127.255.255
denied-peer-ip=169.254.0.0-169.254.255.255
denied-peer-ip=192.0.0.0-192.0.0.255
denied-peer-ip=192.0.2.0-192.0.2.255
denied-peer-ip=198.18.0.0-198.19.255.255
denied-peer-ip=198.51.100.0-198.51.100.255
denied-peer-ip=203.0.113.0-203.0.113.255
IPv6 Unique-Local
denied-peer-ip=fc00::-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
IPv6 Link-Local Unicast denied-peer-ip=fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffffOther IPv6 Special-Purpose assignments
denied-peer-ip=::ffff:0:0-::ffff:ffff:ffff denied-peer-ip=64:ff9b::-64:ff9b::ffff:ffffdenied-peer-ip=64:ff9b:1::-64:ff9b:1:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=2001::-2001:1ff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=2001:db8::-2001:db8:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=2002::-2002:ffff:ffff:ffff:ffff:ffff:ffff:ffff
Personnalisation BBB
Image de fonds de vidéo
https://docs.bigbluebutton.org/admin/customize.html#use-custom-images-for-virtual-backgroundTexte/Présentation par défaut
Modifier le fichie de configuration pour mettre à jour le nom du fichier par défaut :vi /etc/bigbluebutton/bbb-web.properties
Texte de présentation
rechercher clédefaultWelcomeMessage
et
defaultWelcomeMessageFooter
Présentation par défaut
- Rechercher cette ligne :
beans.presentationService.defaultUploadedPresentation=${bigbluebutton.web.serverURL}/default.pdf
- changer le nom de la présentation par défaut
- Enregistrer et quitter
- Télécharger le nouveau fichier de présentation par défaut dans
/var/www/bigbluebutton-default/
- Redémarrer le serveur BBB
bbb-conf --restart
Disable 'You are now muted' audio message
https://docs.bigbluebutton.org/admin/customize.html#turn-off-you-are-now-muted- Éditer fichier
vi /opt/freeswitch/etc/freeswitch/autoload_configs/conference.conf.xml
- mettre en commentaire pour chaque profil les paramètres
<param name="muted-sound" <param name="unmuted-sound"
- Redémarrer le serveur BBB
bbb-conf --restart
A priori, cela ne fonctionne pas -> tentative de commentairage de ces lignes dans les autres profils ...
Disable audio echo test
et accueil directement en mode "Micro + audio"- Éditer le fichier
vi /etc/bigbluebutton/bbb-html5.yml
- Passer le paramètre "ListenOnlyMode" en false
- Passer le paramètre "skipCheck" en true
- Redémarrer le serveur BBB
bbb-conf --restart
Changement du message "you're the only person in this conference"
- copier le fichier .wav dans les dossiers ad-hoc (suivant la qualité) dans
opt/freeswitch/share/freeswitch/sounds/en/us/callie/conference/
- éditer le fichier de configuration
vim /opt/freeswitch/etc/freeswitch/autoload_configs/conference.conf.xml
- et mettre à jour le paramètre dans chaque profil avec le nom du fichier .wav choisi
<param name="alone-sound" value="conference/###NOM###.wav"/>
- Redémarrer le serveur BBB
bbb-conf --restart
Changer le titre de la fenêtre BigBlueButton
- To change the title,
edit /usr/share/meteor/bundle/programs/server/assets/app/config/settings.yml
- change the entry for clientTitle
Baisser la qualité des webcams
vi /etc/bigbluebutton/bbb-conf/apply-config.sh
Ajouter
echo " - Setting camera defaults" yq w -i $HTML5_CONFIG 'public.kurento.cameraProfiles.(id""<span id="TOC_5_1" class="yeswiki-title-anchor"></span>""==low).bitrate' 50 yq w -i $HTML5_CONFIG 'public.kurento.cameraProfiles.(id==medium).bitrate' 100 yq w -i $HTML5_CONFIG 'public.kurento.cameraProfiles.(id""<span id="TOC_5_5" class="yeswiki-title-anchor"></span>""==high).bitrate' 200 yq w -i $HTML5_CONFIG 'public.kurento.cameraProfiles.(id==hd).bitrate' 300 yq w -i $HTML5_CONFIG 'public.kurento.cameraProfiles.(id""<span id="TOC_5_9" class="yeswiki-title-anchor"></span>""==low).default' true yq w -i $HTML5_CONFIG 'public.kurento.cameraProfiles.(id==medium).default' false yq w -i $HTML5_CONFIG 'public.kurento.cameraProfiles.(id""<span id="TOC_5_13" class="yeswiki-title-anchor"></span>""==high).default' false yq w -i $HTML5_CONFIG 'public.kurento.cameraProfiles.(id==hd).default' false chown meteor:meteor $HTML5_CONFIG
Monitoring Grafana/Prometheus
basée sur https://bigbluebutton-exporter.greenstatic.dev/installation/all_in_one_monitoring_stack/
Update de Docker vers une version plus moderne
sudo apt-get remove docker docker-engine docker.io containerd runc
Pas de paquet debian pour docker d'installé, fausse alerte ?
mkdir /opt/bbb-monitoring cd /opt/ git clone https://github.com/greenstatic/bigbluebutton-exporter.git cp -R bigbluebutton-exporter/extras/all-in-on-monitoring/* bbb-monitoring
Changer les url en https://example.com pour l'adresse de notre serveur BBB : https://visio.colibris-lemouvement.org (dans les fichiers du dossier
- + icon -> import
- 100) / count(count(node_cpu_seconds_total{job=\"$job_node_exporter\", instance=~\"$instance\"}) by (cpu))",
- "interval": , "legendFormat": "CPU Utlization", "refId": "A" }, { "expr": "bbb_meetings_participants{job=\"$job\", instance=\"$instance\"}", "interval": ,
- "legendFormat": "Participants",
- "refId": "B"
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "CPU Utilization vs. Participants",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "format": "percent",
- "label": "CPU Utlization [%]",
- "logBase": 1,
- "max": "100",
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "label": "Participants",
- "logBase": 1,
- "max": null,
- "min": "0",
- "show": true
- }
- {
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- },
- {
- "aliasColors": {
- "Participants": "blue"
- },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- "defaults": {
- },
- "fill": 1,
- "fillGradient": 0,
- "gridPos": {
- "h": 8,
- "w": 9,
- "x": 15,
- "y": 11
- },
- "hiddenSeries": false,
- "id": 32,
- "legend": {
- "alignAsTable": true,
- "avg": true,
- "current": true,
- "max": true,
- "min": true,
- "show": true,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 1,
- "nullPointMode": "null",
- "percentage": false,
- "pluginVersion": "7.1.1",
- "pointradius": 2,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [
- {
- "$$hashKey": "object:3017",
- "alias": "Participants",
- "yaxis": 2
- },
- {
- "$$hashKey": "object:3018",
- "alias": "CPU total utilization",
- "yaxis": 2
- }
- {
- ],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "irate(node_network_receive_bytes_total{job=\"$job_node_exporter\", instance=\"$instance\", device=\"$interface\"}[1m])*8",
- "hide": false,
- "interval": , "intervalFactor": 1, "legendFormat": "Bandwidth {{device}} (receive)", "refId": "A" }, { "expr": "irate(node_network_transmit_bytes_total{job=\"$job_node_exporter\", instance=\"$instance\", device=\"$interface\"}[1m])*8", "interval": ,
- "intervalFactor": 1,
- "legendFormat": "Bandiwidth Action device : N'existe pas(transmit)",
- "refId": "C"
- },
- {
- "expr": "bbb_meetings_participants{job=\"$job\", instance=\"$instance\"}",
- "format": "time_series",
- "instant": false,
- "interval": , "intervalFactor": 1, "legendFormat": "Participants", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Bandwidth vs. Participants", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "bps", "label": "Bandwidth", "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": "Participants", "logBase": 1, "max": null, "min": "0", "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "datasource": "$datasource", "fieldConfig": { "defaults": { "custom": {}, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] } }, "overrides": [] }, "gridPos": { "h": 5, "w": 4, "x": 0, "y": 14 }, "id": 30, "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "auto", "orientation": "horizontal", "reduceOptions": { "calcs": [ "max" ], "fields": ,
- "values": false
- },
- "textMode": "auto"
- {
- },
- "pluginVersion": "7.1.1",
- "targets": [
- {
- "expr": "bbb_meetings_participants{job=\"$job\", instance=\"$instance\"}",
- "interval": , "legendFormat": "Selected timeframe", "refId": "A" }, { "expr": "max_over_time(bbb_meetings_participants{job=\"$job\", instance=\"$instance\"}[1w])", "interval": ,
- "legendFormat": "Since 1 week",
- "refId": "C"
- },
- {
- "expr": "max_over_time(bbb_meetings_participants{job=\"$job\", instance=\"$instance\"}[100y])",
- "interval": , "legendFormat": "All time", "refId": "B" } ], "timeFrom": null, "timeShift": null, "title": "Max Participants", "type": "stat" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "description": ,
- {
- "fieldConfig": {
- "defaults": {
- "custom": {
- "align": null
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- {
- ]
- },
- "unit": "short"
- "custom": {
- },
- "overrides": []
- "defaults": {
- },
- "fill": 1,
- "fillGradient": 0,
- "gridPos": {
- "h": 8,
- "w": 6,
- "x": 0,
- "y": 19
- },
- "hiddenSeries": false,
- "id": 59,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "nullPointMode": "null",
- "percentage": false,
- "pluginVersion": "7.1.1",
- "pointradius": 2,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "bbb_meetings_participants_origin{job=\"$job\", instance=\"$instance\"}",
- "interval": , "legendFormat": "{{name}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Participants Origin", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:633", "format": "short", "label": "Participants", "logBase": 1, "max": null, "min": null, "show": true }, { "$$hashKey": "object:634", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "$datasource", "fieldConfig": { "defaults": { "custom": {} }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 6, "x": 6, "y": 19 }, "hiddenSeries": false, "id": 53, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": false, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "percentage": false, "pluginVersion": "7.1.1", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "bbb_room_participants_gcount{job=\"$job\", instance=\"$instance\"}", "interval": ,
- "legendFormat": "Rooms",
- "refId": "A"
- }
- {
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "Number of Rooms",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "decimals": null,
- "format": "short",
- "label": "Rooms",
- "logBase": 1,
- "max": null,
- "min": "0",
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- {
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- "aliasColors": {
- },
- {
- "aliasColors": {
- "Voice participants": "orange"
- },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- "defaults": {
- },
- "fill": 1,
- "fillGradient": 0,
- "gridPos": {
- "h": 8,
- "w": 6,
- "x": 12,
- "y": 19
- },
- "hiddenSeries": false,
- "id": 6,
- "legend": {
- "alignAsTable": true,
- "avg": true,
- "current": true,
- "max": true,
- "min": true,
- "rightSide": false,
- "show": false,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 1,
- "nullPointMode": "null",
- "percentage": false,
- "pluginVersion": "7.1.1",
- "pointradius": 2,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "bbb_meetings_voice_participants{job=\"$job\", instance=\"$instance\"}",
- "interval": , "legendFormat": "Voice participants", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Voice Participants", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": "Participants", "logBase": 1, "max": null, "min": "0", "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": { "Voice participants": "orange" }, "bars": false, "dashLength": 10, "dashes": false, "datasource": "$datasource", "fieldConfig": { "defaults": { "custom": {} }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 6, "x": 18, "y": 19 }, "hiddenSeries": false, "id": 8, "legend": { "alignAsTable": true, "avg": true, "current": true, "max": true, "min": true, "show": false, "total": false, "values": true }, "lines": true, "linewidth": 1, "nullPointMode": "null", "percentage": false, "pluginVersion": "7.1.1", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "bbb_meetings_video_participants{job=\"$job\", instance=\"$instance\"}", "interval": ,
- "legendFormat": "Video participants",
- "refId": "A"
- }
- {
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "Video Participants",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "$$hashKey": "object:608",
- "format": "short",
- "label": "Video Participants",
- "logBase": 1,
- "max": null,
- "min": "0",
- "show": true
- },
- {
- "$$hashKey": "object:609",
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- {
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- "aliasColors": {
- },
- {
- "datasource": "$datasource",
- "fieldConfig": {
- "defaults": {
- "custom": {},
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- {
- ]
- }
- },
- "overrides": []
- "defaults": {
- },
- "gridPos": {
- "h": 4,
- "w": 9,
- "x": 0,
- "y": 27
- },
- "id": 16,
- "options": {
- "colorMode": "value",
- "graphMode": "none",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "last"
- ],
- "fields": , "values": false }, "textMode": "auto" }, "pluginVersion": "7.1.1", "targets": [ { "expr": "bbb_recordings_processing{job=\"$job\", instance=\"$instance\"}", "instant": true, "interval": ,
- "legendFormat": "Processing",
- "refId": "B"
- "calcs": [
- },
- {
- "expr": "bbb_recordings_unprocessed{job=\"$job\", instance=\"$instance\"}",
- "instant": true,
- "interval": , "legendFormat": "Unprocessed", "refId": "F" }, { "expr": "bbb_recordings_published{job=\"$job\", instance=\"$instance\"}", "instant": true, "interval": ,
- "legendFormat": "Published",
- "refId": "E"
- },
- {
- "expr": "bbb_recordings_unpublished{job=\"$job\", instance=\"$instance\"}",
- "instant": true,
- "interval": , "legendFormat": "Unpublished", "refId": "C" }, { "expr": "bbb_recordings_deleted{job=\"$job\", instance=\"$instance\"}", "instant": true, "interval": ,
- "legendFormat": "Deleted",
- "refId": "D"
- }
- ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Recordings",
- "type": "stat"
- },
- {
- "datasource": "$datasource",
- "fieldConfig": {
- "defaults": {
- "custom": {},
- "decimals": 1,
- "mappings": [],
- "thresholds": {
- "mode": "percentage",
- "steps": [
- {
- "color": "green",
- "value": null
- },
- {
- "color": "red",
- "value": 80
- }
- {
- ]
- },
- "unit": "percentunit"
- },
- "overrides": []
- "defaults": {
- },
- "gridPos": {
- "h": 4,
- "w": 15,
- "x": 9,
- "y": 27
- },
- "id": 57,
- "options": {
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": , "values": false }, "showThresholdLabels": false, "showThresholdMarkers": true }, "pluginVersion": "7.1.1", "targets": [ { "expr": "(node_filesystem_size_bytes{job=\"$job_node_exporter\", instance=\"$instance\"} - node_filesystem_avail_bytes{job=\"$job_node_exporter\", instance=\"$instance\"}) / node_filesystem_size_bytes{job=\"$job_node_exporter\", instance=\"$instance\"}", "interval": ,
- "legendFormat": "Action mountpoint : N'existe pas",
- "refId": "A"
- "calcs": [
- }
- ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Storage Utilization",
- "type": "gauge"
- },
- {
- "aliasColors": {},
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "description": "Requires
RECORDINGS_METRICS_READ_FROM_DISK
to be enabled on the BigBlueButton Exporter", - "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- "defaults": {
- },
- "fill": 1,
- "fillGradient": 0,
- "gridPos": {
- "h": 7,
- "w": 12,
- "x": 0,
- "y": 31
- },
- "hiddenSeries": false,
- "id": 55,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "nullPointMode": "null",
- "percentage": false,
- "pluginVersion": "7.1.1",
- "pointradius": 2,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "bbb_recordings_unprocessed{job=\"$job\", instance=\"$instance\"}",
- "interval": , "legendFormat": "Recordings Unprocessed ", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Recordings Unprocessed", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": "Recordings ", "logBase": 1, "max": null, "min": "0", "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "$datasource", "fieldConfig": { "defaults": { "custom": {} }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 7, "w": 12, "x": 12, "y": 31 }, "hiddenSeries": false, "id": 42, "legend": { "alignAsTable": true, "avg": false, "current": true, "max": true, "min": true, "rightSide": true, "show": true, "total": false, "values": true }, "lines": true, "linewidth": 1, "nullPointMode": "null", "percentage": false, "pluginVersion": "7.1.1", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "bbb_meetings_participant_clients{job=\"$job\", instance=\"$instance\"}", "interval": ,
- "legendFormat": "Action type : N'existe pas",
- "refId": "A"
- }
- {
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "Participants by Client Type",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "format": "short",
- "label": "Participants",
- "logBase": 1,
- "max": null,
- "min": "0",
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- {
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- },
- {
- "collapsed": false,
- "datasource": null,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 38
- },
- "id": 51,
- "panels": [],
- "title": "Histograms",
- "type": "row"
- },
- {
- "cacheTimeout": null,
- "cards": {
- "cardPadding": null,
- "cardRound": null
- },
- "color": {
- "cardColor": "#b4ff00",
- "colorScale": "linear",
- "colorScheme": "interpolateGnBu",
- "exponent": 0.5,
- "mode": "spectrum"
- },
- "dataFormat": "tsbuckets",
- "datasource": "$datasource",
- "description": "Buckets (Y axis) represents the number of participants while the count in each bucket represents the number of rooms with that particular bucket's value. ",
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- "defaults": {
- },
- "gridPos": {
- "h": 10,
- "w": 12,
- "x": 0,
- "y": 39
- },
- "heatmap": {},
- "hideZeroBuckets": true,
- "highlightCards": true,
- "id": 44,
- "legend": {
- "show": true
- },
- "links": [],
- "pluginVersion": "6.7.2",
- "reverseYBuckets": false,
- "targets": [
- {
- "expr": "bbb_room_participants_bucket{job=\"$job\", instance=\"$instance\"}",
- "format": "heatmap",
- "instant": false,
- "interval": , "legendFormat": "{{le}}", "refId": "A" } ], "timeFrom": null, "timeShift": null, "title": "Heatmap of Room Participants", "tooltip": { "show": true, "showHistogram": false }, "type": "heatmap", "xAxis": { "show": true }, "xBucketNumber": null, "xBucketSize": null, "yAxis": { "decimals": null, "format": "short", "logBase": 1, "max": null, "min": null, "show": true, "splitFactor": null }, "yBucketBound": "auto", "yBucketNumber": null, "yBucketSize": null }, { "cacheTimeout": null, "cards": { "cardPadding": null, "cardRound": null }, "color": { "cardColor": "#b4ff00", "colorScale": "linear", "colorScheme": "interpolateGnBu", "exponent": 0.5, "mode": "spectrum" }, "dataFormat": "tsbuckets", "datasource": "$datasource", "description": "Buckets (Y axis) represents the number of listeners while the count in each bucket represents the number of rooms with that particular bucket's value. ", "fieldConfig": { "defaults": { "custom": {} }, "overrides": [] }, "gridPos": { "h": 10, "w": 12, "x": 12, "y": 39 }, "heatmap": {}, "hideZeroBuckets": true, "highlightCards": true, "id": 47, "legend": { "show": true }, "links": [], "pluginVersion": "6.7.2", "reverseYBuckets": false, "targets": [ { "expr": "bbb_room_listeners_bucket{job=\"$job\", instance=\"$instance\"}", "format": "heatmap", "instant": false, "interval": ,
- "legendFormat": "Action le : N'existe pas",
- "refId": "A"
- }
- {
- ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Heatmap of Listeners Participants",
- "tooltip": {
- "show": true,
- "showHistogram": false
- },
- "type": "heatmap",
- "xAxis": {
- "show": true
- },
- "xBucketNumber": null,
- "xBucketSize": null,
- "yAxis": {
- "decimals": null,
- "format": "short",
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true,
- "splitFactor": null
- },
- "yBucketBound": "auto",
- "yBucketNumber": null,
- "yBucketSize": null
- },
- {
- "cacheTimeout": null,
- "cards": {
- "cardPadding": null,
- "cardRound": null
- },
- "color": {
- "cardColor": "#b4ff00",
- "colorScale": "linear",
- "colorScheme": "interpolateGnBu",
- "exponent": 0.5,
- "mode": "spectrum"
- },
- "dataFormat": "tsbuckets",
- "datasource": "$datasource",
- "description": "Buckets (Y axis) represents the number of voice participants while the count in each bucket represents the number of rooms with that particular bucket's value. ",
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- "defaults": {
- },
- "gridPos": {
- "h": 10,
- "w": 12,
- "x": 0,
- "y": 49
- },
- "heatmap": {},
- "hideZeroBuckets": true,
- "highlightCards": true,
- "id": 48,
- "legend": {
- "show": true
- },
- "links": [],
- "pluginVersion": "6.7.2",
- "reverseYBuckets": false,
- "targets": [
- {
- "expr": "bbb_room_voice_participants_bucket{job=\"$job\", instance=\"$instance\"}",
- "format": "heatmap",
- "instant": false,
- "interval": , "legendFormat": "{{le}}", "refId": "A" } ], "timeFrom": null, "timeShift": null, "title": "Heatmap of Voice Participants", "tooltip": { "show": true, "showHistogram": false }, "type": "heatmap", "xAxis": { "show": true }, "xBucketNumber": null, "xBucketSize": null, "yAxis": { "decimals": null, "format": "short", "logBase": 1, "max": null, "min": null, "show": true, "splitFactor": null }, "yBucketBound": "auto", "yBucketNumber": null, "yBucketSize": null }, { "cacheTimeout": null, "cards": { "cardPadding": null, "cardRound": null }, "color": { "cardColor": "#b4ff00", "colorScale": "linear", "colorScheme": "interpolateGnBu", "exponent": 0.5, "mode": "spectrum" }, "dataFormat": "tsbuckets", "datasource": "$datasource", "description": "Buckets (Y axis) represents the number of video participants while the count in each bucket represents the number of rooms with that particular bucket's value. ", "fieldConfig": { "defaults": { "custom": {} }, "overrides": [] }, "gridPos": { "h": 10, "w": 12, "x": 12, "y": 49 }, "heatmap": {}, "hideZeroBuckets": true, "highlightCards": true, "id": 49, "legend": { "show": true }, "links": [], "pluginVersion": "6.7.2", "reverseYBuckets": false, "targets": [ { "expr": "bbb_room_video_participants_bucket{job=\"$job\", instance=\"$instance\"}", "format": "heatmap", "instant": false, "interval": ,
- "legendFormat": "Action le : N'existe pas",
- "refId": "A"
- }
- {
- ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Heatmap of Video Participants",
- "tooltip": {
- "show": true,
- "showHistogram": false
- },
- "type": "heatmap",
- "xAxis": {
- "show": true
- },
- "xBucketNumber": null,
- "xBucketSize": null,
- "yAxis": {
- "decimals": null,
- "format": "short",
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true,
- "splitFactor": null
- },
- "yBucketBound": "auto",
- "yBucketNumber": null,
- "yBucketSize": null
- },
- {
- "collapsed": false,
- "datasource": null,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 59
- },
- "id": 38,
- "panels": [],
- "title": "API",
- "type": "row"
- },
- {
- "aliasColors": {},
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "$datasource",
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- "defaults": {
- },
- "fill": 1,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 0,
- "y": 60
- },
- "hiddenSeries": false,
- "id": 40,
- "legend": {
- "alignAsTable": true,
- "avg": true,
- "current": true,
- "max": true,
- "min": true,
- "rightSide": false,
- "show": true,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 1,
- "nullPointMode": "null",
- "percentage": false,
- "pluginVersion": "7.1.1",
- "pointradius": 2,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(histogram_quantile(0.95, sum(rate(bbb_api_latency_bucket{job=\"$job\", instance=\"$instance\"}[5m])) by (le, instance, endpoint, parameters))) by (instance)",
- "interval": , "legendFormat": "{{instance}}", "refId": "A" } ], "thresholds": [ { "colorMode": "warning", "fill": true, "line": true, "op": "gt", "value": 8, "yaxis": "left" }, { "colorMode": "critical", "fill": true, "line": true, "op": "gt", "value": 9, "yaxis": "left" } ], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Metrics Response Time (95th Percentile)", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:3437", "format": "s", "label": "Response Time", "logBase": 1, "max": null, "min": "0", "show": true }, { "$$hashKey": "object:3438", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": { "getRecordings deleted": "purple" }, "bars": false, "cacheTimeout": null, "dashLength": 10, "dashes": false, "datasource": "$datasource", "fieldConfig": { "defaults": { "custom": {} }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 12, "x": 12, "y": 60 }, "hiddenSeries": false, "id": 22, "legend": { "alignAsTable": true, "avg": true, "current": true, "max": true, "min": true, "rightSide": true, "show": true, "total": false, "values": true }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "null", "percentage": false, "pluginVersion": "7.1.1", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(bbb_api_latency_bucket{job=\"$job\", endpoint=\"getMeetings\", instance=\"$instance\"}[5m])) by (le, instance))", "instant": false, "interval": ,
- "intervalFactor": 1,
- "legendFormat": "getMeetings",
- "refId": "A"
- },
- {
- "expr": "histogram_quantile(0.95, sum(rate(bbb_api_latency_bucket{job=\"$job\", endpoint=\"getRecordings\", parameters=\"state=processing\", instance=\"$instance\"}[5m])) by (le, instance))",
- "hide": false,
- "interval": , "legendFormat": "getRecordings processing", "refId": "B" }, { "expr": "histogram_quantile(0.95, sum(rate(bbb_api_latency_bucket{job=\"$job\", endpoint=\"getRecordings\", parameters=\"state=processed\", instance=\"$instance\"}[5m])) by (le, instance))", "interval": ,
- "legendFormat": "getRecordings processed",
- "refId": "C"
- },
- {
- "expr": "histogram_quantile(0.95, sum(rate(bbb_api_latency_bucket{job=\"$job\", endpoint=\"getRecordings\", parameters=\"state=published\", instance=\"$instance\"}[5m])) by (le, instance))",
- "interval": , "legendFormat": "getRecordings published", "refId": "D" }, { "expr": "histogram_quantile(0.95, sum(rate(bbb_api_latency_bucket{job=\"$job\", endpoint=\"getRecordings\", parameters=\"state=unpublished\", instance=\"$instance\"}[5m])) by (le, instance))", "interval": ,
- "legendFormat": "getRecordings unpublished",
- "refId": "E"
- },
- {
- "expr": "histogram_quantile(0.95, sum(rate(bbb_api_latency_bucket{job=\"$job\", endpoint=\"getRecordings\", parameters=\"state=deleted\", instance=\"$instance\"}[5m])) by (le, instance))",
- "interval": , "legendFormat": "getRecordings deleted", "refId": "F" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "BigBlueButton API Response Time (95th Percentile)", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:3468", "decimals": null, "format": "s", "label": "Response Time", "logBase": 1, "max": null, "min": null, "show": true }, { "$$hashKey": "object:3469", "format": "short", "label": ,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- {
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- }
- ],
- "refresh": "10s",
- "schemaVersion": 26,
- "style": "dark",
- "tags": [
- "BigBlueButton",
- "prometheus",
- "node_exporter"
- ],
- "templating": {
- "list": [
- {
- "hide": 0,
- "includeAll": false,
- "label": "Datasource",
- "multi": false,
- "name": "datasource",
- "options": [],
- "query": "prometheus",
- "queryValue": , "refresh": 1, "regex": ,
- "skipUrlSync": false,
- "type": "datasource"
- },
- {
- "allValue": null,
- "datasource": "$datasource",
- "definition": "label_values(bbb_exporter, job)",
- "hide": 0,
- "includeAll": false,
- "label": "Job",
- "multi": false,
- "name": "job",
- "options": [
- {
- "selected": true,
- "text": "bbb",
- "value": "bbb"
- }
- {
- ],
- "query": "label_values(bbb_exporter, job)",
- "refresh": 0,
- "regex": , "skipUrlSync": false, "sort": 0, "tagValuesQuery": ,
- "tags": [],
- "tagsQuery": , "type": "query", "useTags": false }, { "allValue": null, "datasource": "$datasource", "definition": "label_values(node_cpu_seconds_total, job)", "hide": 0, "includeAll": false, "label": "Job node_exporter", "multi": false, "name": "job_node_exporter", "options": [ { "selected": true, "text": "bbb_node_exporter", "value": "bbb_node_exporter" }, { "selected": false, "text": "cloud_maas", "value": "cloud_maas" } ], "query": "label_values(node_cpu_seconds_total, job)", "refresh": 0, "regex": ,
- "skipUrlSync": false,
- "sort": 0,
- "tagValuesQuery": , "tags": [], "tagsQuery": ,
- "type": "query",
- "useTags": false
- },
- {
- "allValue": null,
- "datasource": "$datasource",
- "definition": "label_values(bbb_api_up, instance)",
- "hide": 0,
- "includeAll": false,
- "label": "Instance",
- "multi": false,
- "name": "instance",
- "options": [],
- "query": "label_values(bbb_api_up, instance)",
- "refresh": 1,
- "regex": , "skipUrlSync": false, "sort": 0, "tagValuesQuery": ,
- "tags": [],
- "tagsQuery": , "type": "query", "useTags": false }, { "allValue": null, "datasource": "$datasource", "definition": "label_values(node_network_transmit_bytes_total, device)", "hide": 0, "includeAll": false, "label": "Network Interface", "multi": false, "name": "interface", "options": [], "query": "label_values(node_network_transmit_bytes_total, device)", "refresh": 1, "regex": ,
- "skipUrlSync": false,
- "sort": 0,
- "tagValuesQuery": , "tags": [], "tagsQuery": ,
- "type": "query",
- "useTags": false
- }
- {
- ]
- "list": [
- },
- "time": {
- "from": "now-6h",
- "to": "now"
- },
- "timepicker": {
- "refresh_intervals": [
- "10s",
- "30s",
- "1m",
- "5m",
- "15m",
- "30m",
- "1h",
- "2h",
- "1d"
- ]
- "refresh_intervals": [
- },
- "timezone": ,
"title": "BigBlueButton Server Instance (node_exporter)",
"uid": "HIbd_CXZz3",
"version": 6
}
%%
You are done 👏👏!
<span id="TOC_2_17" class="yeswiki-title-anchor"></span>""
TODOLIST ?
- Prévoir streaming Peertube en plan A et non en plan B
- Vérifier format sortie enregistrement vidéo
- fournir lien tuto : https://ma.formation-logiciel-libre.com/bbb/
Installer Glances https://nicolargo.github.io/glances/
curl -L https://bit.ly/glances | /bin/bash
Installer BBB-recorder
https://github.com/jibon57/bbb-recorder
cd opt
git clone https://github.com/jibon57/bbb-recorder.git
cd bbb-recorder
./dependencies_check.sh # donne les lib a rajouter
sudo apt install gconf-service libgconf-2-4 libappindicator1 xvfb -y
curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add
echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list
apt-get -y update
apt-get -y install google-chrome-stable
npm install --ignore-scripts