PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Log-Skript: Suche nach Datum



audience
03.08.09, 22:53
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, 22: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

zyrusthc
04.08.09, 01:40
Ä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

audience
04.08.09, 09:15
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?

marce
04.08.09, 09:17
am einfachsten über grep, date "yesterday" und ein CronJob um 00:01

audience
04.08.09, 09:59
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?!

marce
04.08.09, 10:03
Nö - sind dann halt 2 grep-Befehle.

audience
04.08.09, 10:15
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.

marce
04.08.09, 10:24
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.

audience
06.08.09, 08:51
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

zyrusthc
06.08.09, 14:27
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