Aller au contenu

Recevoir Les Logs Par Mail


maison

Messages recommandés

Bonjour,

n'ayant pas réussi à installer logwatch ou autres, j'ai du me résigner à faire un petit script avec mes moyens mais qui focntionne, je le mets ici, si ca peut servir.

Pré requis : ipkg puis syslog-ng installé

A vous de modifier selon vos besoins, il est lancé par cron à 23h59 pour avoir les logs du jour.

J'enlève dans ce script (grep -v) les logs correspondant à mon pc et au routeur (192.168.0.12 et 254)

N'hésitez pas à me demander ou à proposer d'autres améliorations


#!/bin/bash




mois=`date +%b`

jour=`date +%d`

joursanszero=`date +%_d`


mail="monmail@mail.com"


#Chemins

log="/volume1/homes/user/scripts/log"


httpssluser="/var/log/httpd-ssl.log"

httpsslsys="/var/log/httpd-ssl-sys.log"

httpaccess="/var/log/httpd-access-user.log"

httperror="/var/log/httpd-error-user.log"

user="/opt/var/log/user.log"

auth="/opt/var/log/auth.log"

cron="/opt/var/log/cron.log"

messages="/volume1/@optware/var/log/messages"

syslog="/opt/var/log/syslog"



#ip a exclure

ip1="192.168.0.12"

ip2="192.168.0.254"






echo "Salut !" > "$log"



echo "" >> "$log"

echo "-----------------------------------------------------------------------------------" >> "$log"

echo "				  DISK SPACE" >> "$log"

echo "-----------------------------------------------------------------------------------" >> "$log"

df -h >> "$log"



echo "" >> "$log"

echo "-----------------------------------------------------------------------------------" >> "$log"

echo "				  ACCESS http-SSL-user" >> "$log"

echo "-----------------------------------------------------------------------------------" >> "$log"

grep "$jour\/$mois" "$httpssluser" | grep -v "$ip1" | grep -v "$ip2" | awk '{print $3}' | sort | uniq -c >> "$log"


echo "" >> "$log"

echo "-----------------------------------------------------------------------------------" >> "$log"

echo "				  ACCESS http-SSL-sys" >> "$log"

echo "-----------------------------------------------------------------------------------" >> "$log"


grep "$jour\/$mois" "$httpsslsys" | grep -v "$ip1" | grep -v "$ip2" | awk '{print $3}' | sort | uniq -c >> "$log"



echo "" >> "$log"

echo "-----------------------------------------------------------------------------------" >> "$log"

echo "				  ACCESS http-user" >> "$log"

echo "-----------------------------------------------------------------------------------" >> "$log"


grep "$jour\/$mois" "$httpaccess" | grep -v "$ip1" | grep -v "$ip2" | awk '{print $1}' | sort | uniq -c  >> "$log"



echo "" >> "$log"

echo "-----------------------------------------------------------------------------------" >> "$log"

echo "				  ERROR http" >> "$log"

echo "-----------------------------------------------------------------------------------" >> "$log"

grep "$mois $jour" "$httperror" | sort | uniq -c | sort -r >> "$log"




echo "" >> "$log"

echo "-----------------------------------------------------------------------------------" >> "$log"

echo "				  USER" >> "$log"

echo "-----------------------------------------------------------------------------------" >> "$log"

grep "$mois $joursanszero" "$user" >> "$log"


echo "" >> "$log"

echo "-----------------------------------------------------------------------------------" >> "$log"

echo "				  AUTH" >> "$log"

echo "-----------------------------------------------------------------------------------" >> "$log"

grep "$mois $joursanszero" "$auth" >> "$log"


echo "" >> "$log"

echo "-----------------------------------------------------------------------------------" >> "$log"

echo "				  CRON" >> "$log"

echo "-----------------------------------------------------------------------------------" >> "$log"

grep "$mois $joursanszero" "$cron" >> "$log"


echo "" >> "$log"

echo "-----------------------------------------------------------------------------------" >> "$log"

echo "				  MESSAGES" >> "$log"

echo "-----------------------------------------------------------------------------------" >> "$log"

grep "$mois $joursanszero" "$messages"  | grep -v syslog-ng >> "$log"


echo "" >> "$log"

echo "-----------------------------------------------------------------------------------" >> "$log"

echo "				  SYSLOG" >> "$log"

echo "-----------------------------------------------------------------------------------" >> "$log"

grep "$mois $joursanszero" "$syslog" | grep -v syslog-ng >> "$log"



nail -s "Logs du $joursanszero $mois" "$mail" < "$log"


Pour les accès ssl et http il faut aussi modifier la conf d'apache ( /usr/syno/apache/conf/httpd.conf pour http et /usr/syno/apache/conf/extrahttpd-ssl.conf pour ssl) pour qu'il log vers les fichiers donnés ci dessus auquels j'ai donné des noms.

Modifié par maison
Lien vers le commentaire
Partager sur d’autres sites

OK.

tu peux éviter le cat fichier|grep...|grep ... en faisant directement un grep fichier|grep ...

tu peux éviter de supprimer le fichier de log au début du script en faisant

echo "Salut !" > log au lieu de echo "Salut !" >> log

et il vaudrait mieux mettre ton fichier de log en variable :

$log=/volume1/homes/user/scripts/log

et remplacer ensuite log par $log

et pour récupérer le mois, tu as les trois solutions suivantes, plus élégantes qu'un awk :

syno > date

Thu Jan 19 09:04:28 CET 2012

syno > date +%b

Jan

syno > date +%B

January

syno > date +%m

01

Lien vers le commentaire
Partager sur d’autres sites

Merci pour ces réctifications (j'ai corrigé), je ne suis pas un pro du bash, je suis démasqué wink.png

en plus je le savais, sauf pour le jour ou j'ai galéré, car il log desfois avec un 0 et desfois sans selon les journaux.

Pourrais tu donner un exemple pour le grep ca m'interesse, je n'ai pas compris la subtilité et me dire l'interêt de mettre log en variable.

Modifié par maison
Lien vers le commentaire
Partager sur d’autres sites

Merci pour ces réctifications (j'ai corrigé), je ne suis pas un pro du bash, je suis démasqué wink.png

en plus je le savais, sauf pour le jour ou j'ai galéré, car il log desfois avec un 0 et desfois sans selon les journaux.

Pourrais tu donner un exemple pour le grep ca m'interesse, je n'ai pas compris la subtilité et me dire l'interêt de mettre log en variable.

exemple, tu as un fichier nommé toto et tu cherches dedans la chaine titi

toi tu fais : cat toto|grep titi

tu auras le même résultat en faisant : grep titi toto

GREP(1) GREP(1)

NAME

grep, egrep, fgrep, rgrep - print lines matching a pattern

SYNOPSIS

grep [OPTIONS] PATTERN [FILE...]

grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

DESCRIPTION

grep searches the named input FILEs (or standard input if no files are

named, or if a single hyphen-minus (-) is given as file name) for lines

containing a match to the given PATTERN. By default, grep prints the

matching lines.

l'intérêt de mettre le fichier de logs en variable :

imagine que tu changes le nom du fichier de log ou son emplacement... changer une variable ou autant de fois que le nom du fichier apparaît dans ton script, il n'y a pas photo ! et ça évite les erreurs.

et aussi, tu n'as pas besoin de faire le cd au début de ton script puisque tu fournis ensuite par la variable le chemin complet du fichier

de la même façon, tu rendras ton script plus facilement utilisable par tout le monde en mettant les ip à exclure dans des variables

monrouteur=AA.BB.CC.DD

....

....

grep -v $monrouteur

pour les zéros, il suffit de les enlever en début de valeur.

inspire toi de ça :

${parameter#word}

${parameter##word}

Remove matching prefix pattern. The word is expanded to produce

a pattern just as in pathname expansion. If the pattern matches

the beginning of the value of parameter, then the result of the

expansion is the expanded value of parameter with the shortest

matching pattern (the ``#'' case) or the longest matching pat‐

tern (the ``##'' case) deleted. If parameter is @ or *, the

pattern removal operation is applied to each positional parame‐

ter in turn, and the expansion is the resultant list. If param‐

eter is an array variable subscripted with @ or *, the pattern

removal operation is applied to each member of the array in

turn, and the expansion is the resultant list.

${parameter%word}

${parameter%%word}

Remove matching suffix pattern. The word is expanded to produce

a pattern just as in pathname expansion. If the pattern matches

a trailing portion of the expanded value of parameter, then the

result of the expansion is the expanded value of parameter with

the shortest matching pattern (the ``%'' case) or the longest

matching pattern (the ``%%'' case) deleted. If parameter is @

or *, the pattern removal operation is applied to each posi‐

tional parameter in turn, and the expansion is the resultant

list. If parameter is an array variable subscripted with @ or

*, the pattern removal operation is applied to each member of

the array in turn, and the expansion is the resultant list.

si tu ne trouves pas, je t'aiderai !

Lien vers le commentaire
Partager sur d’autres sites

Merci c'est corrigé sauf pour le jour sans zéro (de 01 à 09) car ca ne fonctionnait pas pour aujourd'hui le '20' par exemple alors que ma commande fonctione pour tout le mois

je me suis peut etre trompé mais j'ai éssayé :


joursanszero=`{$jour#0}`

Sinon un grand merci pour ces expliactions et j'ai donc tout mis en variables et c'est du coup plus fonctionnel et mieux adaptable

Bon week end

Modifié par maison
Lien vers le commentaire
Partager sur d’autres sites

  • 5 mois après...

bonjour,

merci bcp pour ce script, il fonctionne bien chez moi aussi, sauf la commande d'envoie du mail, il me met un message du type :

nail: not found

il n'est pas installé par défaut ?

Modification du 02/07 : j'ai trouvé la réponse à ma question, il faut effectivement l'installer en passant par ipkg. cf le wiki ipkg

ya plus qu'à ...

.. ne pas oublier cette partie en dsm4, et ensuite ça roule tout seul "ipkg install nail"

.. puis pour paramétrer nail, ya tout ce qui faut ici

Modifié par crakotte
Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.