Child pages
  • Moodle (depuis la table des logs)
Skip to end of metadata
Go to start of metadata

En cours de rédaction

Cette documentation est en cours de rédaction/relecture. N'hésitez pas à nous faire des retours.

Après quelques tests de traitement des logs apache de moodle, il nous a semblé plus pertinent de travailler directement sur la base des logs de moodle.

Nous en profitons pour extraire davantage d'informations ce qui rend les indicateurs plus parlants. Il est nécessaire pour intégrer cette solution de travailler côté moodle mais elle présente l'avantage de ne pas être intrusive et de n'utiliser que la consultation de la base moodle.

Travail côté moodle

Si vous ne souhaitez pas effectuer de traitement côté moodle, vous pouvez regarder la solution mise en place par l'université de La Réunion et disponible en bas de cette page.

Récupération des cours et des noms de modules

La récupération des noms de modules n'est à faire qu'une seule fois. Le script python liste_modules.py (à paramétrer) permet de générer un fichier yaml (moodle-activites.yml) qui sera utilisé dans le traitement logstash pour associer un nom lisible à un module.
Vous pouvez compléter/modifier la liste générée, y compris en ajoutant le wildcard *. Exemple :

Tous les modules booktool renverront la valeur "Livre" et les tool_ seront des outils admin
"booktool_*": "Livre"
"tool_*": "Outil admin"

 

Le traitement des cours est fait quotidiennement afin de conserver également une évolution de la plate-forme.

Le script python liste_cours.py (à paramétrer) permet de générer la liste des cours de moodle que vous enverrez ensuite sur le serveur agimus. Chaque ligne du fichier correspond à un cours et aura le format suivant :

[cours:id_cours];[nom_cours:nom_cours];[cat:id_cat_parente];[enseignants:logins_enseignants];[activites:id_act_1=type_act_1|id_act_2=type_act_2|id_act_3=type_act_1|id_act_4=type_act_1|id_act_5=type_act_2];[type_activites:type_act_1=3|type_act_2=2];[actif:1];[niv2:id_cat_niv2];[niv1:id_cat_niv_1]

Exemple :

[cours:16];[nom_cours:Agimus facile];[cat:77];[enseignants:enseignant1|enseignant2];[activites:315=Forum|66789=Fichier|66791=Fichier|66792=Fichier|66795=Fichier|66796=Fichier|218286=URL|232492=Fichier|240718=Fichier|291614=Fichier|294869=Fichier|295067=Fichier|298778=Fichier|298779=Fichier|302150=Fichier|312374=Fichier|314361=Fichier|315952=Fichier|317008=Fichier|317029=Fichier|318624=Fichier|321352=Fichier];[type_activites:Forum=1|Fichier=20|URL=1];[actif:1];[niv2:1309];[niv1:75]

Lorsque vous exécuterez ce script et enverrez le résultat sur le serveur Agimus, prenez garde à ne pas exécuter le traitement logstash avant que l'envoi ne soit fait.

Mise en place d'une table des logs temporaire (facultatif)

Cette étape est facultative mais a le mérite de faciliter le traitement des logs. Nous utilisons la possibilité offerte par moodle de stocker une partie des logs dans une base externe en plus de la base habituelle.
Ceci va nous permettre de traiter quotidiennement la totalité des logs depuis notre dernier traitement. Il suffira de supprimer les logs de cette nouvelle base à la fin du traitement logstash.

Pour mettre en place cette nouvelle base, connectez-vous à la page de gestion des stockages d'historiques (moodle.univ.fr/admin/settings.php?section=managelogging)

 

Puis dans Paramètres, vous renseignerez les paramètres d'accès à cette base ainsi que les filtres suivants :

 

Intégration dans Agimus

Envoi des données dans elasticsearch

  1. Logstash va devoir se connecter à la base de données de moodle pour récupérer ses informations. Pour cela, nous utilisons le plugin input jdbc. Pour qu'il puisse fonctionner il faut télécharger le driver correspondant à votre installation et paramétrer correctement les configurations logstash correspondantes. Un exemple est donné dans les fichiers sur github.
  2. Il faut copier le fichier de mapping des activités (moodle-activites.yml généré par liste_modules.py) que vous avez créé précédemment dans le dossier /opt/agimus-ng/build/logstash/maps/ de votre serveur agimus. Il sera utilisé dans le traitement des logs de la base logstash-moodle-from-db.conf.
  3. Il faut exécuter le script de récupération des catégories moodle. Vous pouvez l'intégrer dans le traitement quotidien ou l'exécuter ponctuellement. L'important est que le fichier résultat (logstash/maps/moodle-activites.yml) soit présent

    /opt/logstash/bin/logstash -f /opt/agimus-ng/build/logstash/logstash-moodle-categories.conf
  4. Vous devez soit relancer le script de déploiement soit recopier les nouveaux fichiers liés à moodle (dans scripts/moodle et dans logstash/logstash-moodle-*) et les adapter à votre environnement
  5. Ajouter le nouveau template elasticsearch

    template moodle pour elasticsearch
    PUT  _template/moodle 
    {
        "order": 2,
        "template": "logstash-*",
        "settings": {},
        "mappings": {
          "coursmoodle": {
            "dynamic_templates": [
              {
                "type_activites_as_int": {
                  "mapping": {
                    "type": "integer"
                  },
                  "path_match": "mdl_type_activites.*"
                }
              }
            ],
            "properties": {
              "mdl_nom_cat": {
                "index": "not_analyzed",
                "type": "string",
                "fields": {}
              },
              "mdl_activites": {
                "properties": {
                  "nom_activite": {
                    "index": "not_analyzed",
                    "type": "string",
                    "fields": {}
                  },
                  "id_activite": {
                    "type": "integer"
                  }
                },
                "type": "nested"
              },
              "mdl_nom_niv2": {
                "index": "not_analyzed",
                "type": "string",
                "fields": {}
              },
              "mdl_id_niv2": {
                "type": "integer"
              },
              "mdl_actif": {
                "type": "boolean"
              },
              "mdl_nom_niv1": {
                "index": "not_analyzed",
                "type": "string",
                "fields": {}
              },
              "mdl_courseid": {
                "type": "integer"
              },
              "mdl_id_cat": {
                "type": "integer"
              },
              "mdl_nom_cours": {
                "index": "not_analyzed",
                "type": "string",
                "fields": {}
              },
              "mdl_id_niv1": {
                "type": "integer"
              }
            }
          },
          "moodledblog": {
            "properties": {
              "uid": {
                "index": "not_analyzed",
                "type": "string",
                "fields": {}
              },
              "mdl_nom_niv2": {
                "index": "not_analyzed",
                "type": "string",
                "fields": {}
              },
              "mdl_nom_niv1": {
                "index": "not_analyzed",
                "type": "string",
                "fields": {}
              },
              "mdl_objectid": {
                "type": "integer"
              },
              "mdl_contextid": {
                "type": "integer"
              },
              "mdl_nom_cours": {
                "index": "not_analyzed",
                "type": "string",
                "fields": {}
              },
              "mdl_target": {
                "index": "not_analyzed",
                "type": "string",
                "fields": {}
              },
              "mdl_objecttable": {
                "index": "not_analyzed",
                "type": "string",
                "fields": {}
              },
              "mdl_nom_cat": {
                "index": "not_analyzed",
                "type": "string",
                "fields": {}
              },
              "mdl_actif": {
                "type": "boolean"
              },
              "mdl_courseid": {
                "type": "integer"
              },
              "mdl_crud": {
                "index": "not_analyzed",
                "type": "string",
                "fields": {}
              },
              "mdl_id": {
                "type": "integer"
              },
              "mdl_action": {
                "index": "not_analyzed",
                "type": "string",
                "fields": {}
              },
              "mdl_component": {
                "index": "not_analyzed",
                "type": "string",
                "fields": {}
              },
              "mdl_activite": {
                "index": "not_analyzed",
                "type": "string",
                "fields": {}
              },
              "mdl_contextinstanceid": {
                "type": "integer"
              }
            }
          }
        },
        "aliases": {}
    }
  6. Il faut également activer le traitement quotidien dans le fichier de batch daily_batch.sh

Création du nouveau tableau de bord

Le nouveau tableaux de bord est disponible sur le github : https://github.com/EsupPortail/agimus-ng/blob/master/kibana/dashboard/Moodle.json

Il faut également importer les visualisations associées disponibles ici : https://github.com/EsupPortail/agimus-ng/tree/master/kibana/visualization

Exemple de mise en pratique

Université de La Réunion

L'université de La Réunion a également intégré un tableau de bord moodle basé sur la table des logs. Vous pouvez en voir le rendu sur la page 5 - Les tableaux de bord disponibles

L'approche est légèrement différente de celle proposée ci-dessus car il n'y a pas de traitement sur le serveur moodle. Il suffit de permettre un accès à la base de données par logstash.

Si vous souhaitez vous en inspirer pour créer votre propre tableau de bord, vous pouvez utiliser les documents en libre accès sur l'espace github du projet :

Configurations logstash :

Configurations kibana :

  • No labels