Sauvegarder et restaurer Nagios, Centreon et Nagvis

installation du trio Nagios

Sauvegarder et restaurer Nagios, Centreon et Nagvis

L’installation du trio Nagios, Centreon et Nagvis est assez complexe c’est pour cela qu’une solution de sauvegarde et de restauration complète est nécessaire.

Le script en SHELL que j’ai développé (à l’aide de petits bouts trouvés sur le net) permet à lui seul de sauvegarder ou de restaurer les logiciels et leurs configurations dans leurs intégralité. Il sauvegarde donc :

  • Les bases de données
  • Les répertoire qui contiennent les fichiers
  • Les fichiers de configuration de logiciels
  • Les fichiers de configuration de Apache, Sendmail etc …

Je vous laisse le soin de modifier les chemins pour l’adapter à votre configuration.

Ce script lancé sans arguments va lister les sauvegardes présentes, vous demander si vous voulez sauvegarder ou restaurer et si vous choisissez de restaurer il va vous demander d’entrer la date.

En utilisant les arguments maintenant :

  • Pour sauvegarder il faudra utiliser le script de cette manière : Save_Restore.sh S
  • Pour restaurer et lister les sauvegarde présente pour faire un choix il faut utiliser : Save_Restore.sh R
  • Pour restaurer à une date donnée il faut utiliser : Save_Restore.sh R AAAA-MM-JJ

Convertir un fichier texte au format Linux

Code source du script :

#!/bin/sh
#
#Script de sauvegarde et de restauration de Nagios-Centreon-Nagvis
#Version 1.0
#
#
#
#Par Tonyo
#############################################

echo "****** ******Solution de sauvegarde et de restauration du serveur de supervision******"
eval `date "+day=%d; month=%m; year=%Y"` 

# Repertoire utilisés
rep=`pwd`
rac=/usr/local/save
dest_local=/usr/local/
dest_etc=/etc
temp=/usr/local/save/temp
mdp=VotreMDPdelaBDD
save=NULL
LOG_NAGIOS=/usr/local/save/nagios_log.txt

# Selection du fichier de sauvegarde
echo -e "****** Liste des fichiers de sauvegarde disponibles : ******"
ls -l $rac

if [ -z "$1" ] 
then 
        read -p "Voulez vous sauvegarder ou restaurer le serveur ? S pour sauvegarder et R pour restaurer :  " save
else
        save=$1
fi

if [ $save = 'R' ] 
then
        if [ -z "$2" ] 
        then
                read -p "Entrez la date (Annee-Mois-Jour) de la sauvegarde a importer -- exemple 2012-03-01 :  " choix
        else 
                choix=$2
        fi

        echo "Debut de la restauration du $choix" | tee -a $LOG_NAGIOS 
        # Création du dossier temporaire
        if [ -d $temp ]
                then
                rm -R -f $temp | tee -a $LOG_NAGIOS
        fi

        mkdir $temp
        cd $temp
        mkdir files
        mkdir conf
        mkdir lib
        # On se place dans le répertoire voulu
        cd $rac/backup-$choix

        # Arret des services de supervision
        echo "****** Arret des services... ******"
        /etc/init.d/centstorage stop 
        /etc/init.d/centcore stop 
        /etc/init.d/nagios stop 
        /etc/init.d/ndo2db stop 

        # Sauvegarde temporaire
        echo "****** Sauvegarde temporaire ...... ******"
        tar -cpzf $temp/files/centreon-backup.tar.gz /usr/local/centreon/ 
        tar -cpzf $temp/files/nagvis-backup.tar.gz /usr/local/nagvis/ 
        tar -cpzf $temp/files/nagios-backup.tar.gz /usr/local/nagios/ 
        tar -cpzf $temp/conf/apache-backup.tar.gz /etc/httpd/conf.d/centreon.conf /etc/httpd/conf.d/nagios.conf /etc/httpd/conf.d/nagvis.conf
        tar -cpzf $temp/conf/cron-backup.tar.gz /etc/cron.d/centreon /etc/cron.d/centstorage 
        tar -cpzf $temp/conf/init-backup.tar.gz /etc/init.d/nagios /etc/init.d/ndo2db /etc/init.d/centcore /etc/init.d/centstorage 
        tar -cpzf $temp/conf/snmp-backup.tar.gz /etc/snmp/* 
        tar -cpzf $temp/conf/mail-backup.tar.gz /etc/mail/* 
        tar -cpzf $temp/lib/vues_centreon-backup.tar.gz /var/lib/centreon/metrics /var/lib/centreon/status 

        # Decompression des fichier ZIP de sauvegarde
        echo "****** Decompression des fichiers ...... ******"
        tar xpzf files/centreon-backup.tar.gz -C /
        tar xpzf files/nagvis-backup.tar.gz -C / 
        tar xpzf files/nagios-backup.tar.gz -C / 
        tar xpzf conf/apache-backup.tar.gz -C /
        tar xpzf conf/cron-backup.tar.gz -C /
        tar xpzf conf/init-backup.tar.gz -C / 
        tar xpzf conf/snmp-backup.tar.gz -C / 
        tar xpzf conf/mail-backup.tar.gz -C /
        tar xpzf lib/vues_centreon-backup.tar.gz -C / 

        echo "Termine"

        # Importation des bases de donnees
        echo "****** Restauration de la base de donnee..... ******"
        mysql -u root -p$mdp centreon < BdD_centreon.sql 
        mysql -u root -p$mdp centstorage < BdD_storage.sql 
        mysql -u root -p$mdp ndo < BdD_ndo.sql 
        echo "Termine"

        # Redemarrage des services de supervision
        echo "****** Redemarrage des services de supervision ******"
        /etc/init.d/ndo2db start 
        /etc/init.d/centcore start 
        /etc/init.d/centstorage start 
        /etc/init.d/nagios start 

        # Suppression des fichiers temporaires
        echo "****** Suppression des fichiers temporaires ******"
        echo "Merci de verifier si la restauration s'est deroule correctement."
        read -p "Voulez-vous supprimer les fichiers temporaire? :  " repsup
        if [ $repsup = 'oui' ]
                then
                rm -r $temp
        else
                echo "Un probleme est survenu pendant la restauration. Vous pouvez revenir manuellement a la version precedente en vous aidant du dossier $temp " | tee -a $LOG_NAGIOS
        fi

        echo "****** Restauration du $choix terminee ******" | tee -a $LOG_NAGIOS 

fi      

if [ $save = 'S' ] 
then

        # Creation du nom de fichier de sauvegarde 
        echo "Debut de la sauvegarde du "`date` | tee -a $LOG_NAGIOS 
        echo "****** Création du dossier de sauvegarde... ******"
        mkdir /usr/local/save/backup-$year-$month-$day 
        cd /usr/local/save/backup-$year-$month-$day 
        mkdir files
        mkdir conf
        mkdir lib
        # Arrêt des services
        echo "****** Arret des services... ******"
        /etc/init.d/centstorage stop 
        /etc/init.d/centcore stop 
        /etc/init.d/nagios stop 
        /etc/init.d/ndo2db stop 

        # Dump des bases MySQL
        echo "****** Dump des bases MySQL... ******"
        mysqldump -u root -p$mdp --all-databases --add-locks > All-BdD-mysql-`date +%Y%m%d`.sql
        mysqldump -u root -p$mdp --opt centreon > BdD_centreon.sql
        mysqldump -u root -p$mdp --opt centstorage > BdD_storage.sql
        mysqldump -u root -p$mdp --opt ndo > BdD_ndo.sql

        # Gzip du répertoire
        echo "****** Gzip des repertoire... ******"
        tar -cpzf files/centreon-backup.tar.gz $dest_local/centreon/ 
        tar -cpzf files/nagvis-backup.tar.gz $dest_local/nagvis/ 
        tar -cpzf files/nagios-backup.tar.gz $dest_local/nagios/ 
        tar -cpzf conf/apache-backup.tar.gz $dest_etc/httpd/conf.d/centreon.conf /etc/httpd/conf.d/nagios.conf /etc/httpd/conf.d/nagvis.conf
        tar -cpzf conf/cron-backup.tar.gz $dest_etc/cron.d/centreon /etc/cron.d/centstorage 
        tar -cpzf conf/init-backup.tar.gz $dest_etc/init.d/nagios /etc/init.d/ndo2db /etc/init.d/centcore /etc/init.d/centstorage 
        tar -cpzf conf/snmp-backup.tar.gz $dest_etc/snmp/* 
        tar -cpzf conf/mail-backup.tar.gz $dest_etc/mail/* 
        tar -cpzf lib/vues_centreon-backup.tar.gz /var/lib/centreon/metrics /var/lib/centreon/status 

        # Redémarrage des différents services
        echo "****** Redemarrage des differents services... ******"
        /etc/init.d/ndo2db start 
        /etc/init.d/centcore start 
        /etc/init.d/centstorage start 
        /etc/init.d/nagios start 

        echo "On supprime les sauvegardes datant de plus de deux semaines" | tee -a $LOG_NAGIOS

        # On nettoie les anciens backups, ainsi que les logs de plus de 30 jours
        find $dest_local/save/* -mtime +30 -exec rm -fr {} \; > /dev/null 2>&1 

        find $dest_local/save/* -mtime +30 -exec rm -fr {} \; > /dev/null 2>&1 
        echo "Fin de la sauvegarde du serveur "`date` | tee -a $LOG_NAGIOS 
fi

if [ $save != 'S' ] && [ $save != 'R' ]
then 
        echo "La valeur entree est incorrect merci de relancer le script."
fi