Différences entre les versions de « Logs »
(Page créée avec « 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... ») |
|||
| (9 versions intermédiaires par 3 utilisateurs non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
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 | 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 | 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 === | ||
<pre> | |||
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 | |||
</pre> | |||
=== Link-current === | |||
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) | |||
<pre> | <pre> | ||
#!/bin/sh | #!/bin/sh | ||
BASE=/data/local/syslog/by_ip | BASE=/data/local/syslog/by_ip | ||
YEAR=`date +%Y` | YEAR=`date +%Y` | ||
| Ligne 25 : | Ligne 35 : | ||
ln -sf $YEAR/$MONTH/$DAY.log current.log | ln -sf $YEAR/$MONTH/$DAY.log current.log | ||
done | done | ||
</pre> | |||
=== Compress log === | |||
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 | |||
<pre> | |||
#!/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 {} \; | |||
</pre> | |||
=== Symlink === | |||
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) | |||
<pre> | |||
#! /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; | |||
</pre> | |||
=== Purge === | |||
Script très générique et classique purgeant les logs datant de plus de x mois (ici 730 jours donc 2 ans) | |||
<pre> | |||
#!/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 | |||
</pre> | |||
=== Purge bis === | |||
<pre> | |||
#!/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 | |||
</pre> | |||
== Anomalie == | |||
Ce script envoie les différences dans les anomalies d'une heure à l'autre | |||
<pre> | |||
[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 | |||
</pre> | </pre> | ||
[[Catégorie:Script]] | [[Catégorie:Script]] | ||
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