• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

/var/log/messages parsen

Schmullus

Newbie
Hallo,

ich möchte die /var/log/messages auf meinem Linux Rechner parsen.
Ein Cronjob soll in regelmäßigen Abständen die Datei überprüfen und nach einem bestimmten Keyword suchen, welches z.B. in der letzten Stunde hinzugefügt wurde. Also keine Lösung mittels tail -100 oder so, sondern wirklich das aktuelle Datum nehmen, die Zeiten der einzelnen Zeileneinträge parsen und vergleichen, ob der Eintrag in der letzten Stunde hinzugefügt wurde. Ich denke, dass das nur mit Datumsarithmetik zu lösen ist... Aber wie??

Falls jemand eine Idee hat oder schon so ein Skript gesehen hat, würde ich mich über eine Nachricht freuen.

Viele Grüße

Schmullus
 
A

Anonymous

Gast
Probier mal das hier aus,
als Script jede Stunde starten, allerdings beim ersten mal starten gibs ne Fehlermeldung da die HilfsDatei unter /tmp noch nicht existiert.
Code:
#!/bin/bash
TESTFILE=/tmp/testzeit.file
export LC_ALL=C

cat /var/log/messages $TESTFILE | sort -k1M -k2n -k3n  | sed '1,/CEST/d'
date | cut -c5-24 >$TESTFILE

es wird also eine File angelegt in der das aktuelle Datum steht.
beim nächsten Aufruf wird diese Datei mit der messages gemischt und richtig sortiert anschließend mit sed alle Zeilen vor dem erscheinen des eingemischen Zeiteintrags nicht mit ausgegeben. Anschließend wird eine neuer Zeitstempel in die Hilfdatei geschrieben.

(müsste noch probiert werden, ob das mit den ersten 9 Tagen im Monat geht )

robi
 

TeXpert

Guru
das Problem ist die Festlegung auf CEST, im Winter stehst Du dann dumm da ;)

die Fehlermeldung kann man sauber mit einem if abfangen, aber irgendwie gefällt mir die Lösung nicht so richtig, hier mal ins unreine gedacht:

1. berechne Zeitstempel t_1 (jetzt)

2. schreibe t_1 als einen Eintrag ins Logfile:
Code:
logger -t "mein_suchmodul" "hier kommt ein lager eindeutiger Eintrag hin, mit Zeitstempel t_1"

3. berechne Zeitstempel t_0 = t_1-DELTA (wobei hier eine gewisse Unschärfe gefragt ist, evtl sucht man nur nach Tag und Stunde...)

4. Suche Zeile in messages mit dem entsprechenden Eintrag
a/ nicht gefunden -> 1. Aufruf also initialisierung
b/ gefunden -> alles von dieser zeile bis zum Ende nach dem gesuchten Tag durchsuchen

5. fertig


das alles durch cron regelmäßig (durch DELTA vorgegeben) machen.
 
Oben