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