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

 




Monitoring | Superviser vos jobs rundeck

Article publiée le 6 Septembre 2017

I) Configuration de Rundeck

Suites aux précédents tutos sur rundeck: https://journaldunadminlinux.fr/tuto-installez-et-configurez-rundeck-ordonnanceur-opensource/ et https://journaldunadminlinux.fr/tuto-sauvegardez-vos-instances-rundeck/, je continue dans ma lancée en vous fournissant un petit script (très simpliste) vous permettant de monitorer vos jobs via un outil de supervision (zabbix, nagios, etc…)

Dans un premier temps, il est nécessaire de désactiver le délai d’expiration du token permettant de taper sur l’API de rundeck:

  • Éditez le fichier /etc/rundeck/rundeck-config.properties et ajoutez la ligne suivante:

rundeck.api.tokens.duration.max=0

  • Redémarrez Rundeck

service rundeckd restart

Authentifiez vous  avec un compte admin et cliquez sur le bouton « profil » en haut à droite de la page:

 

Créez ensuite un nouveau token en laissant à 0 le champs « Expiration in ».

II) Script

Ci-dessous le script qui vous permettra de renvoyer un code erreur de votre job à votre outil de supervision en fonction de son statuts:

#!/bin/bash
URL= »<URL de votre instance RUNDECK »
TOKEN= »<le token généré> »
FLUX=$2
PROJECT=$1

 

function getLastStatus {
curl -s -H « Accept: application/json » -X GET « $URL/api/20/project/$PROJECT/executions?authtoken=$TOKEN »|jq ‘.|[ .executions[]|select(.job.name != null)|select(.job.name|contains(« ‘ »$FLUX »‘ »))]|sort_by(.id)|reverse |.[0]|.status’|sed ‘s/ »//g’
}

 

# get the token for quering rundeck
# get the last status of $1
STATUS=$(getLastStatus)

case « $STATUS » in
‘aborted’)
echo -1
;;
‘failed’)
echo -1
;;
‘succeeded’)
echo 0
;;
*) echo 0
esac
exit 0

Pour tester il vous suffit de lancer ce script avec de bons arguments:

./checkJobRundeck.sh <nom du projet rundeck> <nom du job>

 

Il ne vous reste plus qu’à paramétrer votre outil de supervision.




tuto | sauvegardez vos instances rundeck

Article publiée le 15 Août 2017

Suite à la rédaction du précédent article concernant l’installation et la configuration d’une instance rundeck (https://journaldunadminlinux.fr/tuto-installez-et-configurer-rundeck-ordonnanceur-opensource/), vous trouverez ci-dessous un outil permettant de sauvegarder entièrement votre instance rundeck.

 

1) Installation des prérequis

Les scripts de backups/restore que j’ai écrit utilisent le client en ligne de commande rundeck: « rd »

Installation sous Debian/Ubuntu

echo « deb https://dl.bintray.com/rundeck/rundeck-deb / » | sudo tee -a /etc/apt/sources.list
curl « https://bintray.com/user/downloadSubjectPublicKey?username=bintray » > /tmp/bintray.gpg.key
apt-key add – < /tmp/bintray.gpg.key
apt-get -y install apt-transport-https
apt-get -y update
apt-get -y install rundeck-cli

Installation sous RedHat/Centos

wget https://bintray.com/rundeck/rundeck-rpm/rpm -O bintray.repo
sudo mv bintray.repo /etc/yum.repos.d/
yum install rundeck-cli

Une fois l’installation terminée, éditez le fichier .profile du compte qui fera le backup et rajoutez y les lignes suivantes:

export RD_URL=http://<ip ou dns de votre machine rundeck>/api/20
export RD_USER=<login rundeck>
export RD_PASSWORD=<password rundeck>

2) Script de sauvegarde

Le user qui lance ce script doit avoir les privilèges root (sudo)

Ci-dessous un script de sauvegarde:

#!/bin/bash
# Variables utiles
DATE=`date +%Y%m%d`

# répertoire où les sauvegardes seront déposées
BACKUPDIRECTORY= » »

# Repertoire home du user qui fera les backups
HOMEBACKUPDIRECTORY= »/ »
mkdir backup_tmp

echo « Création d’un DUMP de base »
mysqldump rundeck >> $HOMEBACKUPDIRECTORY/backup_tmp/rundeck.sql

echo « Récupération de la liste des projets en cours… »
rm -f list_projet.tmp
rd projects list | grep -v « # » >> list_projet.tmp

lineone=`head -1 list_projet.tmp | cut -c5-100 >> list_projet.tmp`
sed -i 1s/.*/$lineone/ list_projet.tmp

echo « Sauvegarde des projets en cours… »
while read PROJET
do
rd jobs list -f $HOMEBACKUPDIRECTORY/backup_tmp/jobs_$PROJET.xml -p $PROJET 2> /dev/null
done < list_projet.tmp
rm -f list_projet.tmp

echo « Arret de Rundeck en cours… »
sudo service rundeckd stop

echo « Copie des répertoires logs et data »
sudo cp -r /var/lib/rundeck/data $HOMEBACKUPDIRECTORY/backup_tmp
sudo cp -r /var/lib/rundeck/logs $HOMEBACKUPDIRECTORY/backup_tmp
sudo cp -r /var/rundeck $HOMEBACKUPDIRECTORY/backup_tmp

echo « Démarrage de Rundeck en cours… »
sudo service rundeckd start
sudo tar -czvf backuprundeck$DATE.tar.gz backup_tmp/*

echo « Déplacement du backup vers le serveur NFS »
sudo mv backuprundeck$DATE.tar.gz $BACKUPDIRECTORY

echo « Suppression du répertoire temporaire »
sudo rm -Rf backup_tmp

 

 

3) Script de restauration

#!/bin/bash

# répertoire où les sauvegardes sont déposées
BACKUPDIRECTORY= » »

echo « Arret de rundeck »
sudo service rundeckd stop

echo « Récupération du dernier backup »
FILETORESTORE=`ls -1t /srv/rundeckconfbackup | head -1`
cp -R $BACKUPDIRECTORY/$FILETORESTORE .
sudo tar -xf $FILETORESTORE

echo « Importation du DUMP de base »
mysql rundeck < ~/backup_tmp/rundeck.sql

echo « Démarrage de rundeck »
sudo service rundeckd start

# Rundeck est long à démarrer…
sleep 90

# Purge de tout les projets avant une resto propre
echo « Purge de la conf rundeck en cours… »
rd projects list | grep -v « # » >> list_projet.tmp

lineone=`head -1 list_projet.tmp | cut -c5-100 >> list_projet.tmp`
sed -i 1s/.*/$lineone/ list_projet.tmp
while read file
do
PROJET=`echo $file | cut -d « _ » -f2 | cut -d « . » -f1` 2>/dev/null
rd projects delete -p $PROJET -y 2>/dev/null
done < list_projet.tmp
rm -f list_projet.tmp

 

# On récupère le nom du projet via le nom du fichier XML et pour on importe le ou les jobs
cd ~/backup_tmp
for file in `ls *.xml`
do
PROJET=`echo $file | cut -d « _ » -f2 | cut -d « . » -f1`
echo « Restauration du projet $PROJET »
rd projects create -p $PROJET 2>/dev/null
rd jobs load -f $file -p $PROJET 2>/dev/null
done
# On recopies le répertoire /var/lib/rundeck ainsi que les logs des JOBS
echo « Copie des logs en cours »
sudo cp -R ~/backup_tmp/logs /var/lib/rundeck
echo « Copie des datas en cours »
sudo cp -R ~/backup_tmp/data /var/lib/rundeck && sudo chown -R rundeck:rundeck /var/lib/rundeck
sudo cp -R ~/backup_tmp/rundeck /var/ && sudo chown -R rundeck:rundeck /var/rundeck

echo « Restauration terminée »
cd ..

sudo rm -Rf ~/backup_tmp
if [ -f $FILETORESTORE ]; then
sudo rm -f $FILETORESTORE
fi

 

 




tuto | Installez et configurez rundeck (ordonnanceur opensource)

Article publié le 14 Août 2017

Article mis à jour le 17 Janvier 2018

J’ai eu l’occasion de tester pas mal d’ordonnanceur et j’ai remarqué que la plupart du temps les solutions du marché sont onéreuses, difficile à mettre en place et dur à maîtriser.

C’est pour ces raisons que j’ai été impressionné par la solution Rundeck.

Cet ordonnanceur open-source est extrêmement simple à mettre en place et à administrer. De plus énormément de plugins sont disponible ce qui permet de bénéficier d’un paquet de fonctionnalités supplémentaire (intégration d’Ansible, etc…)

 

1) Installation

Sous Debian/Ubuntu:

Installez Java:

apt-get install openjdk-8-jdk

Télécharger le paquet DEB sur le site officiel de Rundeck et installez le.

dpkg -i <nom du paquet>

 

Sous RedHat/Centos:

Installez Java:

yum install java-1.8.0-openjdk

Installez Rundeck

rpm -Uvh http://repo.rundeck.org/latest.rpm
yum install rundeck

 

Une fois l’installation terminée, démarrez le service rundeck:

service rundeckd start

Pour accéder à l’interface d’administration, connectez vous àl’URL suivante: <IP ou nom de la machine>:4440

Login et mot de passe par défaut: admin/admin

Si vous avez des difficultés à vous authentifiez (erreur 404 après avoir saisi les identifiants), lisez la suite de ce tutoriel.

 

2) Configuration

2.1) Paramétrage de la base de donnée

Par défaut, Rundeck utilise une base de donnée SqlLite. Il est préférable d’utiliser une base de donnée MySQL afin d’éviter de futures problèmes de performances:

# Sous Debian/Ubuntu

apt-get install mysql-server*

# Sous RedHat/Centos

yum install mysql

 

Authentifiez vous sur votre base mysql en root

mysql -uroot -p<votre password>

Créons ensuite la base de données rundeck:

CREATE database rundeck;

CREATE USER ‘rundeck’@’localhost’ IDENTIFIED BY ‘rundeck’;

GRANT ALL PRIVILEGES ON rundeck.* TO ‘rundeck’@’localhost’;

FLUSH PRIVILEGES;

Utilisez un mot plus sécurisé bien évidemment 😉

Éditez ensuite le fichier /etc/rundeck/rundeck-config.properties et modifiez les lignes suivantes:

grails.serverURL=http://<IP ou DNS de votre machine>:4440

dataSource.dbCreate = update
dataSource.url = jdbc:mysql://localhost/rundeck?autoReconnect=true
dataSource.username = rundeck
dataSource.password = rundeck
dataSource.driverClassName=com.mysql.jdbc.Driver

 

Redémarrez ensuite rundeck:

service rundeckd restart

 

2.2) Génération clés SSH

Afin de lancer un job sur une machine spécifique rundeck le protocole SSH.

Il est donc nécessaire de générer une clé privée via la commande « ssh-keygen » et de la coller dans le répertoire /var/lib/rundeck/.ssh

ssh-keygen

mkdir /var/lib/rundeck/.ssh

cp id_rsa /var/lib/rundeck/.ssh

chown -R rundeck:rundeck /var/lib/rundeck/.ssh

La clé publique (le fichier avec l’extension « .pub » généré par la commande ssh-keygen) sera a coller sur chaque machine cible dans le fichier authorized_keys du user système qui exécutera le job.

 

2.3 Création de votre premier job

Connectez-vous sur l’interface WEB de rundeck (<IP ou nom de la machine>:4440) et authentifiez vous (admin/admin par défaut).

 

Cliquez sur le bouton new projet afin de créer votre premier projet.

Renseignez le nom de votre projet et cliquez sur le bouton « create » en laissant tous les autres paramètres par défaut:

 

Cliquez ensuite sur le bouton « create a new job »:

 

Indiquez tout en haut de la page le nom de votre job et positionnez vous ensuite sur l’encadré « add a step ».

C’est à ce niveau que tout se joue!

Vous pouvez lancer une commande ou exécutez un script sur une machine distante comme l’exemple ci-dessous.

La partie matched nodes correspond aux machines sur lequelles vous voulez exécutez  vos jobs/workflow. Par défaut seul localhost est paramétré. Pour rajouter une machine vous devez éditer le fichier

/var/rundeck/projects/<nom de votre projet>/etc/resources.xml et ajoutez vos machines en respectant la synthaxe XML suivante:

<project>
<node name= »nom de votre machine 1″ description= »votre description » tags= » » hostname= »<adresse ou ip de votre machine » osArch= »amd64″ osFamily= »unix » osName= »Linux » osVersion= »votre distrib » username= »user qui execute votre job sur votre machine »/>
<node name= »nom de votre machine 2″ description= »votre description » tags= » » hostname= »<adresse ou ip de votre deuxième machine » osArch= »amd64″ osFamily= »unix » osName= »Linux » osVersion= »votre distrib » username= »user qui execute votre job sur votre machine »/>
</project>

Enregistrez vos modifications et normalement de nouveaux nodes devraient apparaître (Si ce n’est pas le cas rafraîchissez la page).

Vous avez désormais les bases pour vous lancer. Rundeck est un ordonnanceur très complet et il me serait impossible de vous expliquer chaque fonctionnalité. L’interface étant très intuitive, il vous sera très facile de trouver les fonctions dont vous avez besoin.

3) Sauvegardes/restaurations

 

tuto | sauvegardez vos instances rundeck

 

 

4) Supervisez vos jobs Rundeck

Monitoring | Superviser vos jobs rundeck

 

5) Purger les logs d’exécutions Rundeck

Script | Purger les logs d’exécution Rundeck