Différences entre les versions de « Logs »

De BlaxWiki
Aller à la navigationAller à la recherche
 
Ligne 10 : Ligne 10 :
0 3 * * * root purge_logs.sh > /dev/null
0 3 * * * root purge_logs.sh > /dev/null
15 */1 * * * root /opt/agarik/script/anomalie_syslog.sh > /dev/null
15 */1 * * * root /opt/agarik/script/anomalie_syslog.sh > /dev/null
## Pour avoir la date dans un fichier de sortie
00 10      * * *        root    php /var/www/html/DSN_ocirp/cron/generer_export_udo_Cron.php > /var/www/html/DSN_ocirp/fichiers_Client/EXPORT_ANNUEL/export_udo$(date +"\%d-\%m-\%Y").log
</pre>
</pre>



Version actuelle datée du 28 septembre 2017 à 12:09

Cette page recense plusieurs scripts nécessaire à la gestion d'un serveur de log centralisé (syslog-ng, rsyslog ou autres). Nous avons bien sur ici une architecture spécifique au niveau de la gestion des logs. Ils sont rangés dans /data/local/syslog/by_ip/$ip/$year/$month/$day.log. Il y a aussi un lien qui est créé entre /data/common/syslog/$hostname vers /data/local/syslog/by_ip/$ip (via le script symlink). Ces scripts sont utilisés sur les syslog d'Agarik

Crontab[modifier]

1  0 * * * root link-current.sh > /dev/null
5  0 * * * root compresslog.sh > /dev/null
0 */1 * * * root symlinks.sh > /dev/null
0 3 * * * root purge_logs.sh > /dev/null
15 */1 * * * root /opt/agarik/script/anomalie_syslog.sh > /dev/null
## Pour avoir la date dans un fichier de sortie 
00 10      * * *        root    php /var/www/html/DSN_ocirp/cron/generer_export_udo_Cron.php > /var/www/html/DSN_ocirp/fichiers_Client/EXPORT_ANNUEL/export_udo$(date +"\%d-\%m-\%Y").log

Link-current[modifier]

Ce script permet de créer un lien symbolique (current.log) à la racine de chaque serveur (/data/local/syslog/by_ip/$ip) qui pointe vers le log de la date du jour (/data/local/syslog/by_ip/$ip/$year/$month/$day.log). Cela permet de toujours vérifier le même fichier de log (/data/local/syslog/by_ip/$ip/current.log)

#!/bin/sh
BASE=/data/local/syslog/by_ip
YEAR=`date +%Y`
MONTH=`date +%m`
DAY=`date +%d`
cd $BASE

for dir in * ; do
        cd $BASE/$dir
        if [ -f OLD ] ; then
                continue
        fi
        mkdir -m 755 -p $YEAR/$MONTH
        touch $YEAR/$MONTH/$DAY.log
        chmod 644 $YEAR/$MONTH/$DAY.log
        ln -sf $YEAR/$MONTH/$DAY.log current.log
done

Compress log[modifier]

Ce script permet de compresser les fichiers de log qui n'ont pas la date du jour et de supprimer les fichiers de log qui ont une taille nulle

#!/bin/sh
# Compression des logs dans syslog
DAY=`date +%d`
find /data/local/syslog/ -type f ! -size 0 ! -name $DAY.log ! -name \*.gz -exec gzip {} \;
find /data/local/syslog/ -type f ! -name $DAY.log -size 0 -exec rm {} \;

Symlink[modifier]

Ce script est extremement spécifique à la plateforme. Il fait de multiples vérification, et créé les liens entre le hostname et l'ip (/data/common/syslog/$hostname vers /data/local/syslog/by_ip/$ip)

#! /bin/bash

CONF_VISION="/var/vision_client/data/vision_client/vision_client.conf"
PATH_IP="/data/local/syslog/by_ip"
PATH_HOSTNAME="/data/common/syslog"

cp -f /opt/agarik/script/anomalie_syslog /opt/agarik/script/anomalie_syslog_H-1

> /opt/agarik/script/anomalie_syslog

## 1. Verification des liens dans /data/common/syslog/ ###

## 1.1 Verfication que l'equipement est present dans le fichier de supervision. Si l'ip dans la sup est differente de celle du lien symbolique, alors on change le lien symbolique et 
on garde le repertoire de l'ip associee ; sinon on garde le lien symbolique et le répertoire de l'ip associee ###

for hostname in $(ls $PATH_HOSTNAME)
do
        IP="$(grep -w target $CONF_VISION | grep -w \"$hostname\" | awk -F '\"*\"' '{ print $4 }' | tail -1)";
        LINK_IP="$(ls -l $PATH_HOSTNAME/$hostname | awk {' print $NF '})";
        if [ "$IP" != `basename $LINK_IP` ];
        then
                echo "le lien $PATH_HOSTNAME/$hostname pointe vers l'ip $LINK_IP qui n'est pas celle de la supervision, il va etre supprime et recree avec la bonne destination"
                rm -f $PATH_HOSTNAME/$hostname
                ln -s "$PATH_IP/$IP" "$PATH_HOSTNAME/$hostname"
        else
                echo "le lien symbolique $PATH_HOSTNAME/$hostname pointe bien vers la bonne ip "
        fi
done



### 1.2 Verfication que l'equipement est present dans le fichier de supervision, sinon on retire le lien symbolique et le repertoire de l'ip associde est conserve ###
for hostname in $(ls $PATH_HOSTNAME)
do
        if [ `grep -cw $hostname $CONF_VISION` -eq 0 ];
        then
                rm -f $PATH_HOSTNAME/$hostname
                echo "le lien $PATH_HOSTNAME/$hostname n existe pas dans la conf et a ete supprime"
        fi
done


### 2. Verification pour chaque conf de la supervision ###

### 2.1 Verification que l'ip dans le champs "filename" de la supervision correspond à un répertoire dans byip, alors on ajoute le lien symbolique de l'arborescence "hostnames", on 
garde le répertoire
###  et on retire l'ip du fichier de contrôle 'ignore.txt' si il y existe. - Si l'ip dans le champs "filename" de la supervision ne correspond pas à un répertoire dans byip alors, on 
envoie un mail vers "le 3eme" ####

for ip in $(grep "filename" $CONF_VISION | awk -F\/ {' print $6 '} | sort | uniq)
do
        if [ -d $PATH_IP/$ip ];then
                HOST=$(grep -w target $CONF_VISION | grep -w $ip | awk -F '\"*\"' '{ print $2 }' | tail -1)
                if [ ! -h $PATH_HOSTNAME/$HOST ]; then
                        echo "le lien symbolique $PATH_IP/$ip vers $PATH_HOSTNAME/$HOST n'existe pas, il va etre cree "
                        ln -s "$PATH_IP/$ip" "$PATH_HOSTNAME/$HOST"
                        sed -i '/$ip/d' /opt/agarik/script/ignore.txt
                fi
  else echo -e "L'ip $ip existe dans la conf vision, mais pas dans le repertoire $PATH_IP\n" >> /opt/agarik/script/anomalie_syslog
        fi
done


### 3. Verification des liens dans /data/local/syslog/by_ip ###

###  3.1 Verification que l'ip fait partie des destinations d'un lien symbolique de l'arborescence "hostnames", alors on garde le répertoire et on retire l'ip du fichier de contrôle 
'ignore.txt' si il y existe. Si l'ip ne fait pas partie des destinations d'un lien symbolique de l'arborescence "hostnames", on vérifie le contenu :
# - s'il y a des fichiers non vides, on garde le répertoire, on vérifie s'il est présent dans un fichier de contrôle 'ignore.txt' et si ce n'est pas le cas on envoie un mail vers "le 
3eme",
# - si tous les fichiers du répertoire sont vides, alors on supprime le répertoire et on retire l'ip du fichier de contrôle 'ignore.txt'

for ip in $(ls $PATH_IP | egrep -vw "127.0.0.1|192.168.26.14")
do
        if [ `ls -l $PATH_HOSTNAME | grep -cw $ip` -eq 1 ]; then
                echo "l'ip $ip fait partie des destinations d'un lien symbolique de l'arborescence hostnames"
                sed -i '/$ip/d' /opt/agarik/script/ignore.txt
        else
                if [ `find $PATH_IP/$ip -type f -size +1c | wc -l` -gt 0 ];then
                        if [ `grep -cw $ip$ /opt/agarik/script/ignore.txt` -eq 0 ]; then
                                echo -e "Le repertoire $PATH_IP/$ip contient des fichiers non vide et n'est pas present dans le fichier /opt/agarik/script/ignore.txt\n" >> /opt/agarik
/script/anomalie_syslog
                        fi
                elif [ `find $PATH_IP/$ip -type f -size +1c | wc -l` -eq 0 ];then
                                echo "Le repertoire $PATH_IP/$ip contient que des fichiers vides, il va etre archive, et l'ip $ip retire de /opt/agarik/script/ignore.txt"
                                /opt/agarik/script/archivages.sh $ip
                                sed -i '/$ip$/d' /opt/agarik/script/ignore.txt
        fi
        fi
done;

Purge[modifier]

Script très générique et classique purgeant les logs datant de plus de x mois (ici 730 jours donc 2 ans)

#!/bin/bash
path_log="/data/local/syslog/by_ip/"
# Retention de 2 ans
n=730

suppress_log_date=`date -d  "$n days ago" +'%Y/%m/%d'`

# Suppresion des fichiers comportant des dates de plus de 2 ans
cd /data/local/syslog/by_ip/
for i in `ls`;
        do rm -rf $i/$suppress_log_date;
        done

exit 0

Purge bis[modifier]

#!/bin/bash
# Supprime les fichiers contenu dans chaque dossier d'ip qui date de plus de NB_DAY, suppression du dossier du mois precedent cette date si on est un 1er du mois
PATH_LOG="/data/local/syslog/by_ip/"
# Retention de 365 jours
NB_DAY=365

day_before=$(($NB_DAY+1))
day=`date -d  "$NB_DAY days ago" +'%d'`
date_before=`date -d  "$day_before days ago" +'%Y/%m'`
suppress_log_date=`date -d  "$NB_DAY days ago" +'%Y/%m/%d'`

cd $PATH_LOG
for ip in `ls`;
do
        if [ -f "$ip/$suppress_log_date".log.gz ]; then rm -f "$ip/$suppress_log_date".log.gz;fi
        if [ $day -eq 1 ]; then
                if [ -d $ip/$date_before ]; then rmdir $ip/$date_before;fi
        fi
done
exit 0

Anomalie[modifier]

Ce script envoie les différences dans les anomalies d'une heure à l'autre

[root@syslog1.agarik.com script]# cat anomalie_syslog.sh
#!/bin/bash
if ! diff "/opt/agarik/script/anomalie_syslog" "/opt/agarik/script/anomalie_syslog_H-1"; then
echo "From: <root@syslog1.agarik.com>
To: ben@pouet.com, toto@aol.com
Subject: Syslog1 : Rapport Anomalie syslog1.agarik.com
`cat /opt/agarik/script/anomalie_syslog`" | sendmail -froot@syslog1.agarik.com  ben@pouet.com, toto@aol.com
fi