2012-06-21 10:54:47 +0000 2012-06-21 10:54:47 +0000
22
22

So durchsuchen Sie eine Protokolldatei innerhalb eines bestimmten Zeitraums

Ich habe eine Protokolldatei, jeder Zeile im Protokoll ist ein Datum vorangestellt, etwa so:

2012-03-06 11:34:48,657 blah blah blah...

Wie kann ich diese Datei grep und nur die Zeilen von 8 Uhr bis 23 Uhr erhalten?

Meine Absicht ist es, die Anzahl der Fehler zu zählen, die zwischen 8 und 23 Uhr auftreten.

Antworten (3)

24
24
24
2012-06-21 11:08:20 +0000
egrep '^[^]+ (0[89]|1[0-9]|2[012]):'

Ausführliche Erläuterungen finden Sie in verschiedenen regex (regulärer Ausdruck) Tutorials; egrep verwendet die “POSIX extended”-Syntax (man 7 regex).

  • Das erste ^ bedeutet “Anfang der Zeile”.

  • [^]+ passt nur auf das Datumsfeld, unabhängig vom tatsächlichen Datum.

  • (...|...|...) bedeutet “entweder eines der angegebenen Muster”, also bedeutet (0[89]|1[0-9]|2[012]) “entweder 0[89] oder 1[0-9] oder 2[012]”. Es passt auf alle Zahlen von 08 bis 22.


Eine etwas bessere Option ist:

awk -F'[:]' '$2 >= 8 && $2 <= 22 { print }'

Die Option -F teilt jede Zeile gemäß dem [:]-Regex in separate Felder auf (die entweder auf : oder ein Leerzeichen passen), und das awk-Skript prüft die zweite Spalte (die Stunde).

21
21
21
2012-06-21 11:11:02 +0000

Warum sollten Sie grep verwenden? Sie können einfach sed verwenden.

Beispiel:

sed -n '/Jun 17 13:39:54/ , /Jun 18 10:50:28/p' kern.log

Dies wird alle Protokolle zwischen June 17 13:39:54 und June 18 10:50:28 ausgeben

0
0
0
2016-05-09 06:43:49 +0000

Es gibt eigentlich einen viel einfacheren Weg, dies zu tun.

Download/Dokumentation: autodrgrep.kl.sh

Befehl:

./autodrgrep.kl.sh notchef /tmp/client.log '2016-05-08_08:00:00,2016-05-08_23:00:00' 'INFO' 'a2ensite' 5 10 -show

Erläuterung:

  • autodrgrep.kl.sh ist der Name des Tools.

  • notchef ist eine Option, die an das Werkzeug übergeben wird, um ihm mitzuteilen, was es tun soll. In diesem speziellen Fall teilt sie dem Tool mit, welcher Typ von Protokolldatei /tmp/client.log ist.

  • /tmp/client.log ist natürlich die Protokolldatei.

  • 2016-05-08_19:12:00,2016-05-08_21:13:00 ist der Datumsbereich innerhalb des Protokolls, den Sie durchsuchen möchten

  • “INFO” ist eine der Zeichenketten, die in den Zeilen des Protokolls stehen, an denen Sie interessiert sind.

  • “a2ensite” ist eine weitere Zeichenkette in der gleichen Zeile, in der Sie die “INFO”-Zeichenkette zu finden erwarten. Die Angabe dieser beiden Zeichenketten (INFO und a2ensite) isoliert und verarbeitet die gewünschten Zeilen viel schneller, besonders wenn Sie es mit einer großen Protokolldatei zu tun haben.

  • 5 gibt eine Warnung an. Durch die Angabe von 5 weisen Sie das Programm an, als WARNUNG zu alarmieren, wenn mindestens 5 Vorkommen der von Ihnen angegebenen Suchzeichenfolgen vorhanden sind

  • 10 gibt Critical an. Durch die Angabe von 10 weisen Sie das Programm an, als KRITISCH zu alarmieren, wenn die angegebenen Suchstrings mindestens 10 Mal vorkommen.

  • -show gibt an, welche Art von Antwort Sie erhalten werden. Durch die Angabe von -shown sagen Sie, dass, wenn etwas gefunden wird, das mit den angegebenen Mustern übereinstimmt, die Ausgabe auf dem Bildschirm erfolgt.

Beispiellauf:

# ./autodrgrep.kl.sh notchef /tmp/client.log '2016-05-08_19:12:00,2016-05-08_21:13:00' 'INFO' 'a2ensite' 5 10 -show

[2016-05-08 19:12:58-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 19:12:58-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 19:12:58-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 19:13:09-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 19:13:12-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 19:42:57-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 19:42:57-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 19:42:57-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 19:43:08-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 19:43:11-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 20:12:58-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 20:12:58-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 20:12:58-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 20:13:10-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 20:13:12-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 20:42:59-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 20:42:59-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 20:42:59-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 20:43:09-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 20:43:12-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 21:12:59-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 21:12:59-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 21:12:59-07:00] INFO: execute[a2ensite default] ran successfully
23
2---78720---23---ATWFILF---(2016-05-08)-(19:12)---(2016-05-08)-(21:13) SEAGM

Was ist, wenn der vom Benutzer angegebene Datumsbereich oder Zeitrahmen nicht im Protokoll enthalten ist?

Jeder Lauf des obigen Befehls enthält immer eine Zeile (letzte Zeile der Ausgabe), die entweder “ATWFILF” oder “ETWNFILF” lautet.

  • ATWFILF bedeutet, dass der tatsächliche Datumsbereich oder Zeitrahmen, den Sie gesucht haben, im Protokoll gefunden wurde. Dies ist also sehr gut.

  • ETWNFILF bedeutet, dass der tatsächliche Datumsbereich oder Zeitrahmen, den Sie gesucht haben, NICHT im Protokoll gefunden wurde. In diesem Fall wird die Zeit, die der von Ihnen angegebenen Zeit am nächsten liegt, ermittelt und stattdessen verwendet.