Pour monitorer la machine et le service de elearning Moodle, il existe moult manières de faire. L'une d'entre elles est d'utiliser la pile telegraf-InfluxDB-Grafana :

  • telegraf pour la récolte d'informations sur la machine faisant tourner moodle ;
  • InfluxDB pour stocker ses informations et ;
  • Grafana pour l'aspect visuel et les beaux graphiques.

Firefox_Screenshot_2020-06-07T08-56-27.765Z.png, juin 2020

Firefox_Screenshot_2020-06-07T09-01-08.267Z.png, juin 2020

L'objet de cet article est l'affichage du nombre d'utilisateurs et d'utilisatrices connectées à la plateforme et, en cadeau, le dashboard que j'utilise pour Moodle / PostgreSQL.

Aller chercher le nombre d'utilisateurs et utilisatrices connectées et remplir la BD

À ma connaissance, il n'y a pas de moyen d'obtenir le nombre de personnes connectées au temps t mais bien entre le temps t1 et t2. Comme je n'ai pas trouvé évident d'utiliser l'API pour ce faire, suivant un conseil sur le forum Moodle, j'ai choisi d'aller chercher l'info dans la base de données (BD).

C'est dans la table mdl_user que se trouvent les informations de connections. Il suffit de compter les personnes qui se sont connectées « avant maintenant » et « après maintenant moins un peu de temps ».

Un script bash pourrait ressembler à :


$ cat moodleusers.sh
#!/bin/bash

timestamp_now=$(date --utc +"%s")
timestamp_start=$(($timestamp_now - 60))

QUERY="SELECT COUNT(*) FROM mdl_user 
    WHERE deleted=0 AND lastaccess > "${timestamp_start}" 
        AND lastaccess < "${timestamp_now}" ;"
RESULT=$(psql -d 'moodle' -c "${QUERY}" 2>/dev/null)
RESULT_CUT=$(echo $RESULT | cut -d ' ' -f 3)
echo "nUsersMoodle nUsersMoodle=${RESULT_CUT}" 
  • les timestamps sont donnés en GMT ;
  • le script affiche le résultat qui sera compréhensible par InfluxDB
  • je ne suis pas parvenu à obtenir le résultat dans une seule variable (je ne suis pas assez bon avec bash). j'ai donc fait RESULT puis RESULT_CUT.

C'est telegraf qui va lancer le script. C'est donc l'utilisateur telegraf qui devra avoir les droits de lecture dans la BD pour la table mdl_user. Ce qui peut se faire comme suit :


# sudo -u postgres psql -d moodle

moodle =# create role telegraf
moodle =# alter role telegraf with login
moodle =# grant telegraf to moodle
moodle =# grant select on mdl_user to telegraf

Après vérification que le script est bien fonctionnel et que l'utilisateur telegraf peut le lancer, il reste à l'ajouter à telegraf comme suit :


# vim /etc/telegraf/telegraf.conf

[[inputs.exec]]
# ## Commands array
    commands = [
        "/elsewhere/moodleusers.sh"
    ]
# ## Timeout for each command to complete.
    timeout = "5s"
    data_format = "influx"
    interval = "60s"
  • demander à telegraf de recharger son fichier de conf ;
  • vérifier que tout fonctionne bien ;
  • attendre un peu que la BD InfluxDB se remplisse.

Faire de beaux graphes

Il reste à récupérer cette information via Grafana et l'inclure dans son dashboard. J'en ai profité pour proposer un dashboard Moodle with postgres.

Nous verrons à l'usage, s'il est fonctionnel.

Je suis preneur de tous vos retours et corrections. Enjoy !


Crédit photo par Xiaolong Wong chez  Unsplash. Une orange bien découpée fait un beau camembert.