Archiv verlassen und diese Seite im Standarddesign anzeigen : Log-Skript: Suche nach Datum
Hallo,
ich hätte gerne ein Skript, dass mir einmal pro Woche bestimmte Einträge aus den Logs per Mail schickt. Dabei sollen aber nicht alle Einträge von grep berücksichtigt werden, sondern nur die, die max 7 Tage alt sind (die anderen wurde dann ja schon in der Mail aus der Vorwoche verschickt).
Ich dachte an ein Command wie:
cat /var/log/messages | grep date -d "7 days ago" %B%e| grep anderer parameter
cat /var/log/messages | grep date -d "6 days ago" | grep anderer parameter
.
.
Das Skript ist allerdings nicht sonderlich elegant und mir ist auch nicht ganz klar, wie ich bei %B%e ein Leerzeichen zwischen dem Monat und dem Tag hinbekomme. Vielleicht weiß ja wer weiter.
Danke!
DrunkenFreak
03.08.09, 21:59
Würde eventuell mal einen anderen Anstaz mit logrotate probieren. Das hat zusätzlich den Vorteil, dass die Logs danach vernünftig nach Datum sortiert sind und du nicht in einem riesen großen Log nach irgendwas suchen musst
so long
Ähhm
grep /var/log/messages -e "$(date -d "7 days ago" +"%b %e")"
oder
DATE=$(date -d "7 days ago" +"%b %e"); cat /var/log/messages | grep "$DATE"
Aber wie DrunkenFreak schon sagt, logrotate ist da ne saubere Lösung. Weiss ja nicht was Du genau vor hast.
Greeez Oli
Danke für die Antworten. Mit dem Logrotate hatte ich auch schon überlegt, aber das geht wirklich nur im wöchentlichen Rhythmus. Bei bestimmten events würde ich gerne täglich informiert werden und da würde die Technik nicht greifen. Kann ich denn ein Skript so schreiben, dass es alle Einträge, die von Jetzt bis vor 24h (oder 7 Tagen etc.) geloggt wurden per grep herausgezogen werden?
am einfachsten über grep, date "yesterday" und ein CronJob um 00:01
am einfachsten über grep, date "yesterday" und ein CronJob um 00:01
Ja, das Problem dabei ist, dass die Mails auf mein Handy gepusht werden und ich dann Nachts regelmäßig von der Notification geweckt werde. Am liebsten wäre mir gegen 20:30 - aber das ist vermutlich schwer zu realisieren?!
Nö - sind dann halt 2 grep-Befehle.
Nö - sind dann halt 2 grep-Befehle.
Wenn ich das Skript aber wirklich um 20:30 ausführen lassen würden und mit yesterday und today arbeite, dann würde ich viele Meldungen doppelt bekommen. Da ja alle Meldungen von gestern (nicht erst ab 20:30) auch mitgesendet werden würden.
2 Tipps:
nicht 20:30, sondern 20:00 ausführen - das machts einfacher.
Du kannst ja aus dem gestrigen Tag nur die nach 20:00 herausfiltern - grep macht das gerne für Dich.
Danke für die Hilfe, anbei mal das Reporting-Skript, was ich erstellt habe. Verbesserungsvorschläge oder was ich evtl. noch an Infos auslesen lassen sollte sind gerne gesehen.
#!/bin/sh
TODAY="$(date -d "today" +"%b %e")"
DATE1="$(date -d "1 days ago" +"%b %e")"
DATE2="$(date -d "2 days ago" +"%b %e")"
DATE3="$(date -d "3 days ago" +"%b %e")"
DATE4="$(date -d "4 days ago" +"%b %e")"
DATE5="$(date -d "5 days ago" +"%b %e")"
DATE6="$(date -d "6 days ago" +"%b %e")"
DATE7="$(date -d "7 days ago" +"%b %e")"
logdatei=weekly_$(/bin/date +"%Y%m%d").log
angriffe=$(cat /var/log/fail2ban.log | grep -i " Ban " | wc -l)
cd /root/
touch $logdatei
echo "====Serverstatus====" >> /root/$logdatei
echo " " >> /root/$logdatei
date -d "today" >> /root/$logdatei
echo " " >> /root/$logdatei
echo "Load and Uptime:" >> /root/$logdatei
uptime >> /root/$logdatei
echo " " >> /root/$logdatei
echo "Memory-Usage:" >> /root/$logdatei
cat /proc/meminfo | grep MemTotal >> /root/$logdatei
cat /proc/meminfo | grep MemFree >> /root/$logdatei
cat /proc/meminfo | grep SwapCached >> /root/$logdatei
echo " " >> /root/$logdatei
echo "Disk-Usage:" >> /root/$logdatei
df -h >> /root/$logdatei
echo " " >> /root/$logdatei
echo "==Disks and RAID==" >> /root/$logdatei
echo "Disk:" >> /root/$logdatei
cat /var/log/messages | grep -A2 -i "disk error" | grep "$TODAY" >> /root/$logdatei
cat /var/log/messages | grep -A2 -i "disk error" | grep "$DATE1" >> /root/$logdatei
cat /var/log/messages | grep -A2 -i "disk error" | grep "$DATE2" >> /root/$logdatei
cat /var/log/messages | grep -A2 -i "disk error" | grep "$DATE3" >> /root/$logdatei
cat /var/log/messages | grep -A2 -i "disk error" | grep "$DATE4" >> /root/$logdatei
cat /var/log/messages | grep -A2 -i "disk error" | grep "$DATE5" >> /root/$logdatei
cat /var/log/messages | grep -A2 -i "disk error" | grep "$DATE6" >> /root/$logdatei
cat /var/log/messages | grep -A2 -i "disk error" | grep "$DATE7" >> /root/$logdatei
cat /var/log/messages | grep -A2 -i "disk failure" | grep "$TODAY" >> /root/$logdatei
cat /var/log/messages | grep -A2 -i "disk failure" | grep "$DATE1" >> /root/$logdatei
cat /var/log/messages | grep -A2 -i "disk failure" | grep "$DATE2" >> /root/$logdatei
cat /var/log/messages | grep -A2 -i "disk failure" | grep "$DATE3" >> /root/$logdatei
cat /var/log/messages | grep -A2 -i "disk failure" | grep "$DATE4" >> /root/$logdatei
cat /var/log/messages | grep -A2 -i "disk failure" | grep "$DATE5" >> /root/$logdatei
cat /var/log/messages | grep -A2 -i "disk failure" | grep "$DATE6" >> /root/$logdatei
cat /var/log/messages | grep -A2 -i "disk failure" | grep "$DATE7" >> /root/$logdatei
cat /var/log/messages | grep -A2 -i "I/O error" | grep "$TODAY" >> /root/$logdatei
cat /var/log/messages | grep -A2 -i "I/O error" | grep "$DATE1" >> /root/$logdatei
cat /var/log/messages | grep -A2 -i "I/O error" | grep "$DATE2" >> /root/$logdatei
cat /var/log/messages | grep -A2 -i "I/O error" | grep "$DATE3" >> /root/$logdatei
cat /var/log/messages | grep -A2 -i "I/O error" | grep "$DATE4" >> /root/$logdatei
cat /var/log/messages | grep -A2 -i "I/O error" | grep "$DATE5" >> /root/$logdatei
cat /var/log/messages | grep -A2 -i "I/O error" | grep "$DATE6" >> /root/$logdatei
cat /var/log/messages | grep -A2 -i "I/O error" | grep "$DATE7" >> /root/$logdatei
echo " " >> /root/$logdatei
echo "RAID:" >> /root/$logdatei
cat /var/log/messages | grep -i "raid" | grep "$TODAY" >> /root/$logdatei
cat /var/log/messages | grep -i "raid" | grep "$DATE1" >> /root/$logdatei
cat /var/log/messages | grep -i "raid" | grep "$DATE2" >> /root/$logdatei
cat /var/log/messages | grep -i "raid" | grep "$DATE3" >> /root/$logdatei
cat /var/log/messages | grep -i "raid" | grep "$DATE4" >> /root/$logdatei
cat /var/log/messages | grep -i "raid" | grep "$DATE5" >> /root/$logdatei
cat /var/log/messages | grep -i "raid" | grep "$DATE6" >> /root/$logdatei
cat /var/log/messages | grep -i "raid" | grep "$DATE7" >> /root/$logdatei
cat /proc/mdstat | grep -A2 -i "read_ahead not set" | grep "$TODAY" >> /root/$logdatei
cat /proc/mdstat | grep -A2 -i "read_ahead not set" | grep "$DATE1" >> /root/$logdatei
cat /proc/mdstat | grep -A2 -i "read_ahead not set" | grep "$DATE2" >> /root/$logdatei
cat /proc/mdstat | grep -A2 -i "read_ahead not set" | grep "$DATE3" >> /root/$logdatei
cat /proc/mdstat | grep -A2 -i "read_ahead not set" | grep "$DATE4" >> /root/$logdatei
cat /proc/mdstat | grep -A2 -i "read_ahead not set" | grep "$DATE5" >> /root/$logdatei
cat /proc/mdstat | grep -A2 -i "read_ahead not set" | grep "$DATE6" >> /root/$logdatei
cat /proc/mdstat | grep -A2 -i "read_ahead not set" | grep "$DATE7" >> /root/$logdatei
echo " " >> /root/$logdatei
echo "==Einbruchversuche==" >> /root/$logdatei
echo " " >> /root/$logdatei
echo "Angriffe mit Ban: $angriffe" >> /root/$logdatei
echo "IP's in den letzten 7 Tagen gesperrt:" >> /root/$logdatei
cat /var/log/fail2ban.log | grep " Ban " | grep $(date -d "today" +"%Y-%m-%d") >> /root/$logdatei
cat /var/log/fail2ban.log | grep " Ban " | grep $(date -d "1 day ago" +"%Y-%m-%d") >> /root/$logdatei
cat /var/log/fail2ban.log | grep " Ban " | grep $(date -d "2 day ago" +"%Y-%m-%d") >> /root/$logdatei
cat /var/log/fail2ban.log | grep " Ban " | grep $(date -d "3 day ago" +"%Y-%m-%d") >> /root/$logdatei
cat /var/log/fail2ban.log | grep " Ban " | grep $(date -d "4 day ago" +"%Y-%m-%d") >> /root/$logdatei
cat /var/log/fail2ban.log | grep " Ban " | grep $(date -d "5 day ago" +"%Y-%m-%d") >> /root/$logdatei
cat /var/log/fail2ban.log | grep " Ban " | grep $(date -d "6 day ago" +"%Y-%m-%d") >> /root/$logdatei
cat /var/log/fail2ban.log | grep " Ban " | grep $(date -d "7 day ago" +"%Y-%m-%d") >> /root/$logdatei
echo " " >> /root/$logdatei
echo "==Datenvolumen==" >> /root/$logdatei
vnstat -w >> /root/$logdatei
echo " " >> /root/$logdatei
cat $logdatei | mail -s Serverstatus mail@example.com
Verbesserungsvorschläge
Naja da sich alles 10fach wiederholt könnte man ne Funktion nutzen die das Script wesentlich verkleinert.
Ala:
function myfunc {
echo $1 $2
}
myfunc Hallo "Welt !"
Greeez Oli
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.