it-swarm.com.de

So prüfen Sie eine Protokolldatei innerhalb eines bestimmten Zeitraums

Ich habe eine Protokolldatei, jeder Zeile im Protokoll wird ein Datum vorangestellt, wie folgt:

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

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

Ich möchte die Anzahl der Fehler zählen, die zwischen 8:00 und 23:00 Uhr auftreten.

21
Rosdi
egrep '^[^ ]+ (0[89]|1[0-9]|2[012]):'

Detaillierte Erklärungen finden Sie in verschiedenen Tutorials zu Regex (regulären Ausdrücken). egrep verwendet die Syntax "POSIX extended" (man 7 regex).

  • Der erste ^ bedeutet "Zeilenanfang".

  • [^ ]+ stimmt nur mit dem Datumsfeld überein, unabhängig vom tatsächlichen Datum.

    • [...] bedeutet "ein beliebiges Zeichen zwischen den Klammern", daher stimmt [89] entweder mit 8 oder 9 überein. [0-9] ist eine beliebige Zahl und [^ ] ist alles außer ein Leerzeichen (wegen des ^ in Klammern).

    • + bedeutet "einer oder mehrere des vorherigen" (zum Beispiel würde a+ mit a, aaa und aaaaaaaa übereinstimmen).

    • ^[^ ]+ beginnt also mit dem Zeilenanfang und stimmt mit so vielen Nicht-Leerzeichen wie möglich überein.

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


Eine etwas bessere Option ist:

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

Die Option -F unterteilt jede Zeile in separate Felder entsprechend dem regulären Ausdruck [: ] (der entweder mit : oder einem Leerzeichen übereinstimmt), und das Skript awk überprüft die 2. Spalte (die Stunde).

22
grawity

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

beispiel:

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

Dadurch werden alle Protokolle zwischen June 17 13:39:54 und June 18 10:50:28 gedruckt.

20

Es gibt tatsächlich 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

Erklärung:

  • autodrgrep.kl.sh ist der Werkzeugname.

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

  • /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, das Sie scannen möchten

  • "INFO" ist eine der Zeichenfolgen in den Protokollzeilen, an denen Sie interessiert sind.

  • "a2ensite" ist eine weitere Zeichenfolge in derselben Zeile, in der Sie die Zeichenfolge "INFO" erwarten. Wenn Sie diese beiden Zeichenfolgen (INFO und a2ensite) angeben, werden die gewünschten Zeilen viel schneller isoliert und verarbeitet, insbesondere, wenn Sie mit einer großen Protokolldatei arbeiten.

  • 5 gibt Warnung an. Wenn Sie 5 angeben, weisen Sie das Programm an, als WARNUNG zu benachrichtigen, wenn die von Ihnen angegebenen Suchzeichenfolgen mindestens 5 Mal vorkommen

  • 10 gibt Kritisch an. Wenn Sie 10 angeben, weisen Sie das Programm an, als KRITISCH zu warnen, wenn die von Ihnen angegebenen Suchzeichenfolgen mindestens 10 Mal vorkommen.

  • -show gibt an, welche Art von Antwort Sie erhalten. Wenn Sie -show angeben, sagen Sie, wenn etwas gefunden wird, das mit den angegebenen Mustern übereinstimmt, wird es auf dem Bildschirm ausgegeben.

Probelauf:

# ./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 passiert, wenn der vom Benutzer angegebene Zeitraum oder Zeitraum nicht im Protokoll enthalten ist?

Jeder Lauf des obigen Befehls hat immer eine Zeile (letzte Zeile der Ausgabe), in der entweder "ATWFILF" oder "ETWNFILF" steht.

  • ATWFILF bedeutet, dass der von Ihnen angeforderte tatsächliche Zeitraum oder Zeitraum im Protokoll gefunden wurde. Das ist also sehr gut.

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

0
SimplifiedWork