notes·de·pit

Parfois j'apprends à pêcher à des gens qui n'aiment pas le poisson

Monitoring Moodle : script pour telegraf et dashboard pour Grafana

xiaolong-wong-9gpERFdyDW4-unsplash-1200x.jpg, juin 2020

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 :

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}" 

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"

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.