Blogs intéressants

Blog d’Omid Ameri : Dédié à la virtualisation et au système.

Sponsor

PostHeaderIcon Script | Purger les logs d’exécution Rundeck

Article publié le 16 Janvier 2018

Avec le temps, les performances de Rundeck peuvent fortement diminuer suite à l'accumulation de logs d’exécution stockée en base et générant en parallèle d'innombrables petits fichiers.

Il vous faudra donc mettre rapidement en place une solution afin de purger les logs d’exécution de Rundeck.

J'ai trouvé et modifié un petit script faisant très bien le boulot (utilisable si votre Rundeck utilise MySQL):

#!/bin/bash

#Nombre de jours de rétention des logs

KEEP=90

# A modifier si votre instance MySQL est hébergé sur une autre machine

HOST=localhost
PORT=3306
USERNAME=<user de votre base de donnée MySQL>
PASSWORD="<le mot de passe du user de votre base MySQL"
DB=<nom de la base de donnée MySQL Rundeck>

cd /var/lib/rundeck/logs/rundeck

JOBS=`find . -maxdepth 3 -path "*/job/*" -type d`

for j in $JOBS ; do
echo "Processing job $j"
ids=`find $j -iname "*.rdlog" | sed -e "s/.*\/\([0-9]*\)\.rdlog/\1/" | sort -n -r`
declare -a JOBIDS=($ids)

if [ ${#JOBIDS[@]} -gt $KEEP ]; then
for job in ${JOBIDS[@]:$KEEP};do
echo " * Deleting job: $job"
echo " rm -rf $j/logs/$job.*"
rm -rf $j/logs/$job.*
workflowid=`mysql -h $HOST -P $PORT -u$USERNAME -p$PASSWORD -s -N -e "select workflow_id from execution where id=$job" $DB`
workflowstepids=`mysql -h $HOST -P $PORT -u$USERNAME -p$PASSWORD -s -N -e "select workflow_step_id from workflow_workflow_step where workflow_commands_id=$workflowid" $DB`
declare -a WSIDS=($workflowstepids)
for workflowstepid in $WSIDS ; do
echo " mysql -h $HOST -P $PORT -u$USERNAME -p$PASSWORD -e 'delete from workflow_workflow_step where workflow_step_id=$workflowstepid' $DB"
mysql -h $HOST -P $PORT -u$USERNAME -p$PASSWORD -e "delete from workflow_workflow_step where workflow_step_id=$workflowstepid" $DB
echo " mysql -h $HOST -P $PORT -u$USERNAME -p$PASSWORD -e 'delete from workflow_step where id=$workflowstepid' $DB"
mysql -h $HOST -P $PORT -u$USERNAME -p$PASSWORD -e "delete from workflow_step where id=$workflowstepid" $DB
done
echo " mysql -h $HOST -P $PORT -u$USERNAME -p$PASSWORD -e 'delete from execution where id=$job' $DB"
mysql -h $HOST -P $PORT -u$USERNAME -p$PASSWORD -e "delete from execution where id=$job" $DB
echo " mysql -h $HOST -P $PORT -u$USERNAME -p$PASSWORD -e 'delete from base_report where jc_exec_id=$job' $DB"
mysql -h $HOST -P $PORT -u$USERNAME -p$PASSWORD -e "delete from base_report where jc_exec_id=$job" $DB
echo " mysql -h $HOST -P $PORT -u$USERNAME -p$PASSWORD -e 'delete from workflow where id=$workflowid' $DB"
mysql -h $HOST -P $PORT -u$USERNAME -p$PASSWORD -e "delete from workflow where id=$workflowid" $DB
done
fi
done

 

image_print

2 réponses à to “Script | Purger les logs d’exécution Rundeck”

  • Samba says:

    Bonjour,

    Merci pour les tutos.

    Un « truc » qui peut s’avérer utile lorsqu’on a un nombre important d’exécutions (~1 million de steps avant purge dans mon cas) : sauvegarder la définition des contraintes (clé étrangères), supprimer les contraintes, lancer la purge, recréer les contraintes.

    Avant de supprimer les contraintes, la purge a tourné des heures. Une fois les contraintes supprimées, elle met quelques secondes.

    Ma base est PostGreSQL, mais cela devrait donner les mêmes résultats avec MySQL.

    — supprimer les constraint qui ralentissent TRES sérieusement les suppressions
    ALTER TABLE public.execution
    drop constraint fk_a908hrcn9u20eayg6akkepbl1,
    drop CONSTRAINT fk_fofkk7vj9h2bdcqqics5ustr6,
    drop CONSTRAINT fk_6shmc1y7sh51x03aovfualoka;

    alter table public.scheduled_execution
    drop CONSTRAINT fk_jln7b7a683uwkl4fg6kpacqnp;

    alter TABLE public.workflow_step
    drop CONSTRAINT fk_8bbf05v4f6vo5o3cgp69awcue;

    alter TABLE public.workflow_workflow_step
    drop CONSTRAINT fk_9pkey6k5fdo6worgquakkh7d1;

    … purge

    — remettre les constraint
    ALTER TABLE public.execution
    ADD CONSTRAINT fk_a908hrcn9u20eayg6akkepbl1
    FOREIGN KEY (retry_execution_id)
    REFERENCES public.execution(id),
    ADD CONSTRAINT fk_fofkk7vj9h2bdcqqics5ustr6
    FOREIGN KEY (workflow_id)
    REFERENCES public.workflow(id),
    add CONSTRAINT fk_6shmc1y7sh51x03aovfualoka
    FOREIGN KEY (scheduled_execution_id)
    REFERENCES public.scheduled_execution(id);

    alter table public.scheduled_execution
    ADD CONSTRAINT fk_jln7b7a683uwkl4fg6kpacqnp
    FOREIGN KEY (workflow_id)
    REFERENCES public.workflow(id);

    alter TABLE public.workflow_step
    add CONSTRAINT fk_8bbf05v4f6vo5o3cgp69awcue
    FOREIGN KEY (error_handler_id)
    REFERENCES public.workflow_step(id);

    alter TABLE public.workflow_workflow_step
    add CONSTRAINT fk_9pkey6k5fdo6worgquakkh7d1
    FOREIGN KEY (workflow_step_id)
    REFERENCES public.workflow_step(id);

    Samba

Laisser une réponse à Samba