maison Posté(e) le 19 janvier 2012 Partager Posté(e) le 19 janvier 2012 (modifié) 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é le 20 janvier 2012 par maison 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
cricx Posté(e) le 19 janvier 2012 Partager Posté(e) le 19 janvier 2012 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 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
maison Posté(e) le 19 janvier 2012 Auteur Partager Posté(e) le 19 janvier 2012 (modifié) Merci pour ces réctifications (j'ai corrigé), je ne suis pas un pro du bash, je suis démasqué 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é le 19 janvier 2012 par maison 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
cricx Posté(e) le 19 janvier 2012 Partager Posté(e) le 19 janvier 2012 Merci pour ces réctifications (j'ai corrigé), je ne suis pas un pro du bash, je suis démasqué 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 ! 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
maison Posté(e) le 20 janvier 2012 Auteur Partager Posté(e) le 20 janvier 2012 (modifié) 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é le 20 janvier 2012 par maison 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
cricx Posté(e) le 20 janvier 2012 Partager Posté(e) le 20 janvier 2012 joursanszero=${jour##*0} 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
crakotte Posté(e) le 1 juillet 2012 Partager Posté(e) le 1 juillet 2012 (modifié) 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 là en dsm4, et ensuite ça roule tout seul "ipkg install nail" .. puis pour paramétrer nail, ya tout ce qui faut ici Modifié le 2 juillet 2012 par crakotte 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
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.