Nettoyage des tables de logs dans GLPI

GLPI est verbeux et c’est tant mieux.

Les logs d’activité de ce logiciel Open Source de ticketing, de helpdesk et d’inventaire de parc sont stockés dans deux tables :

Il n’y a aucun risque particulier à supprimer le contenu de ces tables. Je pense qu’il est raisonnable d’en conserver les données des trois dernières semaines, à des fins de traçage et d’analyse post-mortem.

Par défaut, GLPI comprend deux actions automatiques afin de nettoyer par une tâche planifiée ces deux fichiers, que vous pouvez paramétrer à partir du menu Configuration > Actions automatiques :

Nettoyage des tables de logs dans GLPI

Configuration de l’action automatique cleantaskjob

Cette tâche est activée par défaut. Vous pouvez en régler la fréquence d’exécution pour la régler sur une durée d’une vingtaine de jours.

GLPI > Configuration > Actions automatiques > cleantaskjob

Configuration de l’action automatique logs

Très curieusement, cette tâche n’est pas activée par défaut. Il y a donc lieu de la planifier afin qu’elle soit exécutée quotidiennement.

GLPI > Configuration > Actions automatiques > logs

La réindexation des tables

A coup de migrations successives et de reprises de base existante, il peut arriver que le vidage de l’une de ces tables ne se réalise plus du fait d’une erreur sur les index. Il y a donc lieu de procéder à la réindexation des tables.

Dans l’exemple ci-dessous, la procédure stockée maintenance est créée dans la base de données glpi. Elle permet de réindexer toutes les tables de l’ensemble des bases MySQL/MariaDB à l’exception de mysql, information_schema, performance_schema.

USE glpi;
DROP PROCEDURE IF EXISTS maintenance;
DELIMITER $$ 
CREATE PROCEDURE maintenance() 
BEGIN
  DECLARE done INT DEFAULT FALSE;
  DECLARE val_table VARCHAR(255);
  DECLARE val_schema VARCHAR(255);
  DECLARE val_engine VARCHAR(255);
  DECLARE val_sql VARCHAR(255);
  DECLARE cur_tables CURSOR FOR
    SELECT table_schema, table_name, engine
    FROM information_schema.tables
    WHERE
      table_schema NOT IN ('mysql','information_schema','performance_schema')
    and
      engine IN ('MyISAM','InnoDB');
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
  OPEN cur_tables;
  boucle: LOOP
    FETCH cur_tables INTO val_schema,val_table,val_engine;
    IF done THEN
      LEAVE boucle;
    END IF;
    SET @a=val_schema;
    SET @b=val_table;
    SET @c=val_engine;
    IF @c='MyISAM' THEN
      SET @s=CONCAT('REPAIR TABLE `',@a,'`.`',@b,'`');
    ELSEIF @c='InnoDB' THEN
      SET @s=CONCAT('ALTER TABLE `',@a,'`.`',@b,'` ENGINE=InnoDB');
    END IF;
    PREPARE stmt FROM @s;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    SET @s=CONCAT('OPTIMIZE TABLE `',@a,'`.`',@b,'`');
    PREPARE stmt FROM @s;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
  END LOOP;
  CLOSE cur_tables;
END $$
DELIMITER ;

Pour exécuter la procédure maintenance, vous pouvez le faire en SQL, après vous être connecté à votre base de données à l’aide de l’utilisateur root de MySQL :

CALL glpi.maintenance;

Vous pouvez aussi le faire en ligne de commandes :

mysql -u root --password='votre_mot_de_passe_root_mysql' -e "CALL glpi.maintenance;"

Nettoyage des tables glpi_logs et glpi_crontasklogs en SQL

Dès lors, le nettoyage de vos tables glpi_logs et glpi_crontasklogs peut se faire aisément en SQL. Dans l’exemple ci-dessous, je nettoie du contenu de ces deux tables les données vieilles de plus de 21 jours :

USE glpi;
DELETE FROM glpi_crontasklogs WHERE date < NOW()-INTERVAL 21 DAY;
DELETE FROM glpi_logs WHERE date_mod < NOW()-INTERVAL 21 DAY;

GLPI  / Formateur GLPI GLPI 

Commentaires

Bonjour,

Très bon article.
Il serait bien également de préciser que la dernière version de GLPI à ce jour (9.3) inclus le plugins purgelogs par défaut :

http://glpi-project.org/fr/glpi-9-3/

Mais en effet cela peut être utile si on utilise une version inférieure :)

Non mais ne jamais mettre son mot de passe dans un terminal…

Utiliser :
–password -e « CALL….

@David

Les utilisateurs font ce qu’ils veulent.

Laisser un commentaire

(requis)

(requis)