Logdatensätze mit mehreren Zeitstempeln parsen

Einige Logdatensätze können mehrere Zeitstempel aufweisen, wie die Logeintragszeit, die Startzeit und die Endzeit eines Prozesses oder einer Transaktion, die Sie möglicherweise in ihren eigenen Feldern erfassen möchten. Nachdem Sie die Start- und Endzeit in ihre eigenen Felder aufgenommen haben, können Sie mit dem Befehl eval die Datumsbearbeitung für diese Felder ausführen, z.B. um die Dauer zwischen den beiden Feldern abzurufen. Siehe eval.

Oracle Log Analytics enthält verschiedene von Oracle definierte Felder, mit denen Sie Zeit- und Datumsinformationen speichern können, die nicht die tatsächliche Logeintragszeit sind:

  • Ereignisendzeit

  • Ereignisstartzeit

  • Ereignisgenerierungszeit

  • Zeitpunkt des ersten Ereignisses

  • Vertragsendzeit

  • Vertragsstartzeit

  • Alertauslösezeit

  • Erfassungszeit

  • Erkennungszeit

Die Daten, die in diesen Feldern gespeichert werden, müssen das Format ISO-8601 aufweisen:

2018-07-04T23:43:34.000Z

Beim Erstellen des Parser können Sie das Makro {TIMEDATE} nur einmal verwenden, um die Logeintragszeit auszudrücken. Für die zusätzlichen Zeitfelder müssen Sie die Daten je nach Anwendungsfall mit einer der folgenden Methoden extrahieren.

Fall 1: Das Log enthält bereits die Zeit- und Datumsinformationen im Format ISO-8601.

Wenn das Log bereits zusätzliche Zeit- und Datumsinformationen im Format ISO-8601 enthält, können Sie diese als Zeichenfolgen im Basisparser der erweiterten Felddefinition extrahieren.

Beispiellog:

July 4, 2018 23:43:12 Server1 ModuleA Transaction completed. Start=2018-07-04T23:45:34.000Z, End=2018-07-04T23:46:39.000Z

Das Log enthält Zeit- und Datumsinformationen für den Logeintrag, die Startzeit und die Endzeit.

  1. Um die Logeintragszeit abzurufen, erstellen Sie den Basisparser. Siehe Parser erstellen.

    {TIMEDATE}\s(\S+)\s(\S+)\s(.*)
  2. Öffnen Sie das Dialogfeld Quelle erstellen. Siehe Quelle erstellen.

  3. Wählen Sie den Basisparser aus, den Sie in Schritt 1 erstellt haben.

  4. Geben Sie den Dateipfad für das Beispiellog an.

  5. Fügen Sie auf der Registerkarte Erweiterte Felder die erweiterten Felddefinitionen zur Logquelle hinzu, um die Zeit- und Datumsfelder zu extrahieren:

    • Aus Feld Meldung: Start={Event Start Time:\S+}

    • Aus Feld Meldung: End={Event End Time:\S+}

  6. Speichern Sie die neue erstellte Quelle.



Jetzt werden die beiden Felder für Ereignisstartzeit und Ereignisendzeit mit den Werten aus dem Log aufgefüllt. Im Log Explorer werden die Zeiten als Millisekunden seit der Epoche angezeigt.

Fall 2: Das Log enthält keine Zeit- und Datumsinformationen im Format ISO-8601.

Wenn die zusätzlichen Zeitfelder, die Sie extrahieren möchten, nicht im Format ISO-8601 vorliegen, müssen Sie die folgenden Schritte zum Parsen ausführen:

Beispiellogdatei, in der die gesamte Datei ein einzelner Logeintrag ist:

+---------------------------------------------------------------------------+
Application Object Library: Version : 12.2
Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
FNDWFBG: Workflow Background Process
+---------------------------------------------------------------------------+
Current system time is 04-JUL-2018 17:25:23
+---------------------------------------------------------------------------+
**Starts**04-JUL-2018 17:25:23
**Ends**04-JUL-2018 18:25:23
+---------------------------------------------------------------------------+
Start of log messages from FND_FILE
+---------------------------------------------------------------------------+
+---------------------------------------------------------------------------+
End of log messages from FND_FILE
+---------------------------------------------------------------------------+
Successfully resubmitted concurrent program FNDWFBG with request ID 239834523 to start at 04-JUL-2018 18:30:23 (ROUTINE=IERKWEP)
+---------------------------------------------------------------------------+
No completion options were requested.
Output file size: 
0
Output is not being printed because:
The print option has been disabled for this report.
+---------------------------------------------------------------------------+
Concurrent request completed successfully
Current system time is 04-JUL-2018 18:30:23
+---------------------------------------------------------------------------+
  1. Erstellen Sie den Basisparser. Siehe Parser erstellen.

    .*?Current system time is {TIMEDATE}.*\*\*Starts\*\*([\S\ ]+).*?\*\*Ends\*\*([\S\ ]+).*

    Folgende Felder müssen Sie zum Parsen auswählen:

    • Version

    • Ereignisstartzeit

    • Ereignisendzeit

    Aktivieren Sie für das oben genannte Beispiellog das Kontrollkästchen Gesamte Datei als einen Logdatensatz behandeln. Es ist kein regulärer Headerausdruck erforderlich.

  2. Öffnen Sie das Dialogfeld Logquelle erstellen. Siehe Quelle erstellen.

  3. Wählen Sie den Basisparser aus, den Sie in Schritt 1 erstellt haben.

  4. Geben Sie den Dateipfad für das Beispiellog an.

  5. Navigieren Sie zur Registerkarte Datenfilter.

  6. Kurzname des Monats in Zahl konvertieren:

    Wenn das Log bereits eine numerische Monatsnummer anstelle eines Monatsnamens enthält, können Sie diesen Schritt überspringen und mit Schritt 7 fortfahren.

    Wenn das Log den Kurznamen für den Monat anstelle der Monatsnummer enthält, fügen Sie zwölf Datenfilter vom Typ MASK hinzu, um den Monatskurznamen in die Monatsnummer zu konvertieren.

    Für jeden Kalendermonat enthält der Datenfilter ähnliche Details wie für den nachfolgenden Monat Januar:

    • Name: Jan to 01

    • Typ: Mask

    • Find-Ausdruck: (\*\*\w+\*\*\d{2}-)(JAN)(-\d{4})

    • Replace-Ausdruck: $101$3



    Die Datenmaske findet Vorkommen des Zeitmusters im Log:

    **Starts**04-JAN-2018 17:25:23

    Sie erfasst die Daten vor JAN, den Wert JAN und die Daten nach JAN in drei Capture-Gruppen. Die Capture-Gruppen werden mit den drei Klammernpaaren ( ) angegeben.

    Dann wird der Wert aus der ersten Capture-Gruppe im Replace-Ausdruck mit $1 ersetzt, der Wert JAN wird durch 01 ersetzt, und die dritte Capture-Gruppe wird mit $3 ersetzt.

    Nach der Implementierung des Datenfilters werden Zeit- und Dateninformationen wie folgt angezeigt:

    **Starts**04-01-2018 17:25:23
  7. Zeit- und Datumsinformationen im Format ISO-8601 umschreiben:

    Wenn die Zeit- und Datumsinformationen im richtigen Datentyp verfügbar sind, schreiben Sie die Zeit- und Datumsdaten mit zwei Datenfiltern für das Beispiellog in das Format ISO-8601 um:

    Diese beiden Datenfilter müssen nach den zwölf Datenfiltern positioniert werden, die Sie zur Konvertierung des Monatskurznamens in die Monatsnummer erstellt haben. Dadurch wird sichergestellt, dass das Zeit- und Datumsformat ausgewertet wird, nachdem der Monatskurzname in die Monatsnummer konvertiert wurde. Mit den Pfeilen nach oben und unten können Sie die Reihenfolge der Datenfilter ändern.

    Erstellen Sie die folgenden beiden Datenfilter, um die Start- und Endzeitdaten in das Format ISO-8601 zu konvertieren:

      • Name: Change shape of Starts

      • Typ: Mask

      • Find-Ausdruck: \*\*Starts\*\*(\d+)-(\d+)-(\d{4})\s(\d{2}:\d{2}:\d{2})

      • Replace-Ausdruck: \*\*Starts\*\*$3-$2-$1T$4.000Z

      • Name: Change shape of Ends

      • Typ: Mask

      • Find-Ausdruck: \*\*Ends\*\*(\d+)-(\d+)-(\d{4})\s(\d{2}:\d{2}:\d{2})

      • Replace-Ausdruck: \*\*Ends\*\*$3-$2-$1T$4.000Z



    Im Find-Ausdruck wird jedes Zeit- und Datumselement erfasst. Im Replace-Ausdruck wird die Reihenfolge der Zeit- und Datumselemente geändert. Die Werte $1, $2, $3 und $4 entsprechen den Capture-Gruppen im Find-Ausdruck. Die Capture-Gruppen werden mit den Klammernpaaren ( ) angegeben.

    Der statische Wert .000Z wird im Replace-Ausdruck hinzugefügt, um den Zeit- und Datumswert im Feld zu speichern. Dadurch werden Zeit und Datum in der Zeitzone Koordinierte Weltzeit (UTC) angegeben. Wenn der Logeintrag stattdessen die Zeitzone Pacific Standard Time (PST) nutzte, wird die Zeitzone künstlich in UTC geändert, jedoch ohne die tatsächliche Stundenverschiebung.

    Hinweis

    Derzeit ist es nicht möglich, den Zeit- und Datumswert beim Erfassen in eine andere Zeitzone zu konvertieren. Dazu können Sie jedoch im Log Explorer den Befehl eval verwenden:
    • Nachdem Sie die Ereignisstart- und Ereignisendzeit gespeichert haben, ziehen Sie die Ereignisendzeit von der Ereignisstartzeit ab, um die Ereignisdauer zu ermitteln.

    • Addieren Sie die in Millisekunden berechnete Zeitdifferenz zwischen den Zeitzonen hinzu, oder subtrahieren Sie sie.

    • Konvertieren Sie die Ausgabe von der Anzahl der Millisekunden in das Zeit- und Datumsformat.

    Siehe eval.
  8. Fügen Sie auf der Registerkarte Erweiterte Felder die erweiterten Felddefinitionen zur Logquelle hinzu, um die Zeit- und Datumsfelder zu extrahieren:

    • Aus Feld Meldung: \*\*Starts\*\*{Event Start Time:\S+}

    • Aus Feld Meldung: \*\*Ends\*\*{Event Start Time:\S+}

  9. Speichern Sie die neu erstellte Logquelle.



Jetzt werden die beiden Felder für Ereignisstartzeit und Ereignisendzeit mit den Datums- und Uhrzeitwerten aus dem Log aufgefüllt. Im Log Explorer werden die Zeiten als Millisekunden seit der Epoche angezeigt.