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