Parser erstellen

Indem Sie einen Parser erstellen, definieren Sie, wie Logeinträge aus einer Logdatei und Felder aus einem Logeintrag extrahiert werden.

  1. Öffnen Sie das Navigationsmenü, und klicken Sie auf Observability and Management. Klicken Sie unter Logging Analytics auf Administration. Die Seite Administration - Überblick wird geöffnet.

  2. Die Administrationsressourcen werden im linken Navigationsbereich unter Ressourcen aufgeführt. Klicken Sie auf Parser.

  3. Klicken Sie auf der Seite Parser auf Erstellen.
  4. Wählen Sie unter den Optionen Regulärer Ausdruckstyp, JSON-Typ, XML-Typ oder Grenzwertiger Typ aus.

    Die Seite Parser erstellen wird angezeigt.

    Bei Regulärer Ausdruckstyp wird die Seite Parser erstellen standardmäßig im Modus Geführt geöffnet. Fahren Sie in diesem Modus fort, wenn Logging Analytics den regulären Ausdruck zum Parsen der Logs generieren soll, nachdem Sie die Felder ausgewählt haben. Wenn Sie einen regulären Ausdruck zum Parsen schreiben möchten, wechseln Sie in den Modus Erweitert.

Hinweis

Sie können einen Parser auch mit einem von Oracle definierten Parser als Vorlage erstellen. Wählen Sie auf der Seite Parser einen von Oracle definierten Parser aus, klicken Sie auf Duplizieren, und ändern Sie die Werte in den Feldern entsprechend Ihren Anforderungen.

Oracle Logging Analytics stellt viele von Oracle definierte Parser für Logquellen bereit, wie Java-Hotspot-Dumplogs, mehrere Systeme wie Linux, Siebel, PeopleSoft usw. sowie Entitytypen wie Oracle Database, Oracle WebLogic Server und Oracle Enterprise Manager Cloud Control. Über die Oracle Logging Analytics-Benutzeroberfläche können Sie auf die vollständige Liste der unterstützten Parser und Logquellen zugreifen.

Um andere Aktionen für den Parser auszuführen, wählen Sie auf der Seite Parser den Erstellungstyp des Parsers aus, und grenzen Sie die Suche nach dem Parser ein, indem Sie im Abschnitt Filter den Parsertyp auswählen. Nachdem Sie den Parser identifiziert haben, klicken Sie in der Zeile des Parsers auf das Symbol Symbol "Aktionen" Aktionen:

  • Details anzeigen: Die Seite mit den Parserdetails wird angezeigt. Zeigen Sie die Details des Parsers an, und bearbeiten Sie ihn bei Bedarf.

  • Bearbeiten: Das Dialogfeld Parser bearbeiten wird angezeigt. Sie können die Eigenschaften des Parsers hier ändern.

  • Duplizieren: Klicken Sie auf diese Option, wenn Sie ein Duplikat des vorhandenen Parsers erstellen möchten. Anschließend können Sie das Duplikat ändern, um es anzupassen.

  • Exportdefinition: Wenn Sie Oracle Logging Analytics in mehreren Regionen verwenden, können Sie den Inhalt der Parserkonfiguration exportieren und erneut importieren. So können Sie auch eine Kopie Ihrer Definitionen außerhalb von Oracle Logging Analytics speichern. Siehe Konfigurationsinhalt importieren und exportieren.
  • Löschen: Möglicherweise müssen Sie einige Ihrer alten oder nicht verwendeten Parser löschen. Um den Parser zu löschen, bestätigen Sie den Vorgang im Dialogfeld Entity löschen. Sie können einen Parser nur löschen, wenn er keine abhängigen Quellen enthält.

Tipp zur Barrierefreiheit: Um den Inhalt für die Feldextraktion aus den Logs mit der Tastatur auszuwählen, verwenden Sie die Tasten ALT+arrow.

Parser vom Typ "Regulärer Ausdruck" erstellen

Die Seite Parser erstellen wird standardmäßig im Modus Geführt geöffnet. Fahren Sie in diesem Modus fort, wenn Logging Analytics den regulären Ausdruck zum Parsen der Logs generieren soll, nachdem Sie die Felder ausgewählt haben. Informationen zum geführten Modus finden Sie unter Symbol "Wiedergabe" Video: RegEx Parser Builder verwenden. Wenn Sie einen regulären Ausdruck zum Parsen schreiben möchten, wechseln Sie in den Modus Erweitert, und fahren Sie mit den folgenden Schritten fort:

  1. Geben Sie im Feld Name den Parsernamen ein. Beispiel: Geben Sie Custom Audit Logs ein.

  2. Optional können Sie eine geeignete Beschreibung zur einfachen Identifizierung des Parsers angeben.

  3. Fügen Sie im Feld Beispielloginhalt den Inhalt aus einer zu parsenden Logdatei ein. Beispiel:

    Jun 20 2020 15:19:29 hostabc rpc.gssd: ERROR: can't open clnt5aa9: No such file or directory
    Jul 29 2020 11:26:28 hostabc kernel: FS-Cache: Loaded
    Jul 29 2020 11:26:28 hostxyz kernel: FS-Cache: Netfs 'nfs' registered for caching
    Aug 8 2020 03:20:01 slc08uvu rsyslogd-2068: could not load module '/lib64/rsyslog/lmnsd_gtls.so', rsyslog error -2078
    [try http://www.rsyslog.com/e/2068 ]
    Aug 8 2020 03:20:36 0064:ff9b:0000:0000:0000:0000:1234:5678 rsyslogd-2066: could not load module '/lib64/rsyslog/lmnsd_gtls.so', dlopen: /lib64/rsyslog/lmnsd_gtls.so: cannot open shared object file: Too many open files
    [try http://www.rsyslog.com/e/2066 ]
    Sep 13 2020 03:36:06 hostnam sendmail: uAD3a6o5009542: from=root, size=263, class=0, nrcpts=1, msgid=<201611130336.uAD3a6o5009542@hostname.example.com>, relay=root@localhost
    Sep 13 2020 03:36:06 hostnam sendmail: uAD3a6o5009542: to=root, ctladdr=root (0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30263, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (uAD3a6KW009543 Message accepted for delivery)
    Sep 20 2020 08:11:03 hostnam sendmail: STARTTLS=client, relay=userv0022.example.com, version=TLSv1/SSLv3, verify=FAIL, cipher=DHE-RSA-AES256-GCM-SHA384, bits=256/256]]>

    Das ist ein mehrzeiliger Logeintrag, da die Einträge 4 und 5 mehrere Zeilen umfassen.

  4. Geben Sie im Feld Regulären Ausdruck parsen den regulären Ausdruck zum Parsen der Felder ein. Jedes Klammernpaar gibt die reguläre Ausdrucksklausel für die Extrahierung in ein einzelnes Feld an.

    Der Parseausdruck ist für jeden Logtyp eindeutig und hängt vom Format der eigentlichen Logeinträge ab. Geben Sie in diesem Beispiel Folgendes ein:

    (\w+)\s+(\d+)\s+(\d+)\s+(\d+):(\d+):(\d+)\s+([^\s]+)\s+([^:]+):\s+(.*)
    Hinweis

    • Nehmen Sie keine Leerzeichen vor oder nach dem Inhalt auf.

    • Der reguläre Ausdruck muss mit dem vollständigen Text des Logdatensatzes übereinstimmen.

    • Wenn Sie verborgene Zeichen in den Parseausdruck aufgenommen haben, gibt die Oberfläche Parser erstellen eine Warnmeldung aus:

      Parseausdruck beinhaltet einige ausgeblendete Steuerzeichen.

      Um diese Standardantwort zu deaktivieren, deaktivieren Sie das Kontrollkästchen Ausgeblendete Steuerzeichen anzeigen, wenn die Fehlermeldung angezeigt wird.

    Weitere Informationen zum Erstellen von Parseausdrücken finden Sie unter Beispielparseausdrücke.

  5. Wählen Sie den entsprechenden Logdatensatzbereich aus.

    Der Logeintrag kann einzeilig oder mehrzeilig sein. Wenn Sie mehrere Zeilen ausgewählt haben, geben Sie den Startausdruck des Logdatensatzes ein.

    Sie müssen den regulären Ausdruck als Mindestregel definieren, die erforderlich ist, um den Start eines neuen Logeintrags erfolgreich zu identifizieren. Im Beispiel kann der Startausdruck folgendermaßen lauten:
    (\w+)\s+(\d+)\s+(\d+)\s+

    Das bedeutet, dass der Start eines neuen Logeintrags immer dann erfolgt, wenn eine neue Zeile mit dem Text beginnt, der mit diesem Eintragsstartausdruck übereinstimmt.

    Optional können Sie auch den Endausdruck eingeben. Verwenden Sie Endausdruck, um das Ende des Logdatensatzes anzugeben. Wenn ein Logdatensatz über einen langen Zeitraum in die Datei geschrieben wird und Sie sicherstellen möchten, dass der gesamte Logeintrag erfasst wird, verwenden Sie den regulären Endausdruck. Der Agent wartet beim Erfassen des Logdatensatzes, bis das Muster des regulären Endausdrucks übereinstimmt. Für den Endausdruck gelten dieselben Formatregeln wie für Eintragsstartausdruck.

    Aktivieren Sie gegebenenfalls das Kontrollkästchen Gesamte Datei als einen Logdatensatz behandeln. Mit dieser Option können Sie eine gesamte Logdatei als einen einzigen Logeintrag parsen und speichern. Das ist besonders nützlich, wenn Sie Logquellen wie Java-Hotspot-Dumplogs, RPM-Listen mit Packagelogs usw. parsen. Wenn der Logeintrag viel Text enthält, der durchsuchbar sein soll, aktivieren Sie das Kontrollkästchen Raw-Textsuche für diesen Inhalt aktivieren. Mit dieser Option können Sie die Logdatensätze mit dem Feld Raw-Text durchsuchen. Wenn diese Option aktiviert ist, können Sie den ursprünglichen Loginhalt mit dem Raw-Text anzeigen.

  6. Wählen Sie auf der Registerkarte Felder das entsprechende Feld aus, um jeden erfassten Wert aus dem regulären Ausdruck zu speichern.

    Um ein neues Feld zu erstellen, klicken Sie auf das Symbol Symbol "Feld erstellen". Das Dialogfeld Benutzerdefiniertes Feld erstellen wird geöffnet. Geben Sie die Werte für Name, Datentyp und Beschreibung ein, und aktivieren Sie gegebenenfalls das Kontrollkästchen Mehrwertiges Feld für Ihre Logs. Informationen zu den einzugebenden Werten finden Sie unter Feld erstellen. Um das ausgewählte Feld in der Zeile zu entfernen, klicken Sie auf das Symbol Symbol "Feld löschen".

    Wählen Sie für jeden erfassten Wert das Feld aus, in dem die Daten gespeichert werden sollen. Das erste erfasste Feld im Beispiel kann wie folgt eingegeben werden:

    • Feldname: Monat (Kurzname)

    • Felddatentyp: STRING

    • Feldbeschreibung: Monatskomponente der Logeintragszeit als Kurzname, z.B. Jan

    • Feldausdruck: (\w{3})

    Im obigen Logbeispiel werden die Felder in der folgenden Reihenfolge zugeordnet:

    1. Monat (Kurzname)
    2. Tag
    3. Jahr (4 Stellen)
    4. Hostname (Server)
    5. Service
    6. Meldung
  7. Klicken Sie auf der Registerkarte Funktionen auf Funktion hinzufügen, um optional eine Funktion für die Vorverarbeitung von Logeinträgen hinzuzufügen. Siehe Logeinträge vorverarbeiten.

  8. Klicken Sie auf die Registerkarte Parsertest, um anzuzeigen, wie der neu erstellte Parser Werte aus dem Loginhalt extrahiert.

    Sie können die Logeinträge aus dem Beispielinhalt anzeigen, den Sie zuvor angegeben haben. Mit dieser Option können Sie bestimmen, ob der definierte Parser erfolgreich funktioniert.

    Wenn der reguläre Ausdruck für einen Logeintrag nicht erfolgreich ist, zeigt der Abgleichstatus den erfolgreichen Teil des Ausdrucks grün und den nicht erfolgreichen Teil rot an. Auf diese Weise können Sie ermitteln, welcher Teil des regulären Ausdrucks korrigiert werden muss.

    Sie können die Liste der Ereignisse, bei denen der Parsertest nicht erfolgreich war, und die Details des Fehlers anzeigen. Außerdem können Sie die Anzahl der Schritte anzeigen und so einschätzen, wie aufwendig der reguläre Ausdruck ist. Idealerweise sollte dieser Wert so niedrig wie möglich sein. Jeder Wert unter 1.000 kann akzeptabel sein, aber manchmal ist ein aufwendigerer regulärer Ausdruck notwendig. Wenn der reguläre Ausdruck zu viele Schritte ausführt, kann das zu einer höheren CPU-Auslastung auf dem Agent-Host und einer langsameren Verarbeitung der Logs führen. Dadurch wird die Verfügbarkeit der Logeinträge im Log Explorer verzögert. In extremen Fällen, in denen der reguläre Ausdruck zu aufwendig ist, wird das Parsen des Logeintrags und aller anderen Einträge, die in demselben Erfassungszeitraum erfasst werden, übersprungen.

Klicken Sie auf Speichern, um den neu erstellten Parser zu speichern.

Um das Erstellen des Parsers abzubrechen, klicken Sie auf Abbrechen. Wenn Sie auf "Abbrechen" klicken, gehen alle bei der Erstellung des Parsers vom Typ Regulärer Ausdruck bereits erzielten Fortschritte verloren.

Uhrzeit und Datum mit dem TIMEDATE-Makro parsen

  • Mit Oracle Logging Analytics können Sie auch die in den Logdateien verfügbaren Uhrzeit- und Datumsangaben mit dem TIMEDATE-Makro analysieren.

    Für Logs, die das Ausdrucksformat TIMEDATE verwenden, muss der vorhergehende Parseausdruck wie folgt geschrieben werden:

    {TIMEDATE}\s+([^\s]+)\s+([^:]+):\s+(.*)

    In diesem Fall lautet der Eintragsstartausdruck {TIMEDATE}\s+.

  • Wenn einigen Logeinträgen kein Jahr im Log zugewiesen ist, versucht Oracle Logging Analytics, das Jahr basierend auf den verfügbaren Informationen wie der Hostzeitzone, der letzten Änderungszeit der Datei usw. zu identifizieren. Mit dem On-Demand-Upload können Benutzer Informationen zur Auflösung von mehrdeutigen Datumsangaben bereitstellen. Außerdem können Sie die Zeitzonen-Override-Einstellung verwenden, wenn Sie die Logs mit On-Demand-Upload oder Management Agent aufnehmen. Siehe Logs nach Bedarf hochladen und Kontinuierliche Logerfassung von Ihren Hosts einrichten.

  • Wenn Uhrzeit und Datum nicht im Parser für eine Logdatei, die als ein einzelner Logdatensatz geparst wird, angegeben sind, wird die letzte Änderungszeit der Logdatei beim Erfassen von Logs mit dem Management Agent verwendet. Wenn Uhrzeit und Datum eines Log-Eintrags nicht bei der Erfassung festgelegt werden können, werden die Log-Einträge mit dem Datum und der Uhrzeit gespeichert, an denen die Logs in Oracle Logging Analytics aufgenommen wurden.

Parser vom Typ "JSON" erstellen

Hinweis

Wenn jeder Ihrer Logeinträge keine Kontext-/Headerlogdaten enthält, können Sie die Logeinträge mit den relevanten Headerlogdaten anreichern. Sie können die Logeinträge vorab verarbeiten und den Inhalt mit Headerinformationen anreichern, indem Sie eine Headerdetailfunktion angeben. Gehen Sie dazu wie folgt vor:

  1. Erstellen Sie zunächst einen Headerinhaltsparser, indem Sie den Beispielloginhalt angeben, mit dem der JSON-Pfad identifiziert werden kann, um die Headerinformationen abzurufen.

  2. Definieren Sie einen zweiten Parser, um den verbleibenden Body des Logeintrags zu parsen.

  3. Fügen Sie dem Bodyparser eine Instanz der Funktion "Headerdetails" hinzu, und wählen Sie den Headerparser aus, den Sie in Schritt 1 definiert haben.

  4. Fügen Sie den in Schritt 2 definierten Bodyparser einer Logquelle hinzu, und verknüpfen Sie die Logquelle mit einer Entity, um die Logerfassung zu starten.

Zusätzliches Thema anzeigen: Mehrere JSON-Ausprägungen in einem einzelnen JSON-Parser verarbeiten

So erstellen Sie einen JSON-Parser:

  1. Geben Sie im Feld Parser den Parsernamen ein. Beispiel: Geben Sie Custom API Log ein.

  2. Wählen Sie als Parsertyp JSON aus.

  3. Optional können Sie eine geeignete Beschreibung zur einfachen Identifizierung des Parsers angeben.

  4. Fügen Sie im Feld Beispielloginhalt den Inhalt aus einer zu parsenden Logdatei ein. Beispiel:

    {
      "name": "helloapi",
      "hostname": "banana.local",
      "pid": 40442,
      "level": 30,
      "req": {
        "method": "GET",
    	"url": "/hello?name=paul",
    	"headers": {
    	  "user-agent": "curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8r zlib/1/2/3",
    	  "host": "0.0.0.0:8080",
    	  "accept": "*/*"
    	},
    	"remoteAddress": "127.0.0.1",
    	"remotePort": 59834
      },
      "msg": "start",
      "time": "2012-03-28T17:39:44.880Z",
      "v": 0
    }

    Basierend auf dem Beispielloginhalt werden die Felder wie im folgenden Beispiel auf der Registerkarte "Felder" ausgewählt und angezeigt:


    Registerkarte "Felder": Die in der Tabelle angezeigten Spalten sind Feldnummer, JSON-Pfad, Name, Datentyp und Beschreibung.

  5. Wählen Sie auf der Registerkarte Felder für den spezifischen JSON-Pfad den Feldnamen aus den verfügbaren definierten Feldern aus.

    Um ein neues Feld zu erstellen, klicken Sie auf das Symbol Symbol "Feld erstellen". Das Dialogfeld Benutzerdefiniertes Feld erstellen wird geöffnet. Geben Sie die Werte für Name, Datentyp und Beschreibung ein, und aktivieren Sie gegebenenfalls das Kontrollkästchen Mehrwertiges Feld für Ihre Logs. Informationen zu den einzugebenden Werten finden Sie unter Feld erstellen. Um das ausgewählte Feld in der Zeile zu entfernen, klicken Sie auf das Symbol Symbol "Feld löschen".

    Der ausgewählte Standard-Root-Pfad ist $. Wenn Sie den JSON-Stammpfad ändern möchten, blenden Sie den Abschnitt Erweiterte Optionen ein, und wählen Sie im Menü Logebene - JSON-Pfad aus.

  6. Klicken Sie auf der Registerkarte Funktionen auf Funktion hinzufügen, um optional eine Funktion für die Vorverarbeitung von Logeinträgen mit der Headerparserfunktion hinzuzufügen. Siehe Logeinträge vorverarbeiten.
  7. Nachdem die Felder ausgewählt wurden, wechseln Sie zur Registerkarte Parsertest, um den Abgleichstatus und die aus dem Beispielloginhalt ausgewählten Felder anzuzeigen.
  8. Klicken Sie auf Speichern, um den neu erstellten Parser zu speichern.

Um das Erstellen eines Parsers vom Typ "JSON" abzubrechen und zu einem Parser vom Typ "Regulärer Ausdruck" zu wechseln, wählen Sie unter Typ die Option Regulärer Ausdruck aus.

Mehrere JSON-Ausprägungen in einem einzelnen JSON-Parser verarbeiten

Wenn mehrere JSON-Logeinträge mit dem Root-Knoten $ für dieselbe Quelle vorhanden sind, fügen Sie dem Beispielinhalt eines Parsers alle JSON-Beispiellogs hinzu, und ordnen Sie die Vereinigungsmenge der Felder zu, die in allen Beispielen enthalten sind.

Beispiel: Sie können einen JSON-Parser und eine Quelle verwenden, die diesen Parser verwenden. Beachten Sie, dass dieses Log zwei Ausprägungen aufweisen kann. Setzen Sie die beiden Beispielelogeinträge (Ausprägungen) wie folgt in das Feld Beispielinhalt:

{ "key_A":value1, "key_B":value2, "key_C":value3, "key_E":value4, "key_F",value5 } { "key_A":value6, "key_B":value7, "key_D":value8, "key_G":value9, "key_H":value10 }

In der Parserfeldliste werden dann die zuzuordnenden Schlüssel key_A, key_B, key_C, key_D, key_E, key_F, key_G und key_H angezeigt.

Sie können diese Schlüssel Feldern wie folgt zuordnen:

Schl. Feld
key_A Zeit
key_B Host-IP (Client)
key_C Meldung
key_D Meldung
key_E Severity
key_F Benutzername
key_G Komponente
key_H Service

Im obigen Beispiel werden die JSON-Schlüssel key_C und key_D in verschiedenen Logs angezeigt. Diese gelten als sich gegenseitig ausschließend. Normalerweise werden key_C und key_D nicht in einer Logausprägung zusammen angezeigt. In diesem Fall können beide einem einzelnen Feld Nachricht zugeordnet werden. Welcher Schlüssel auch immer übereinstimmt, wird im Feld Nachricht gespeichert.

Wenn key_C und key_D sich nicht gegenseitig ausschließen und in einer dritten Logeintragsausprägung sowohl key_C als auch key_D zusammen angezeigt werden, wird erste übereinstimmende Ausprägung im Feld Nachricht gespeichert.

Parser vom Typ "XML" erstellen

  1. Geben Sie im Feld Parser den Parsernamen ein. Beispiel: Geben Sie Custom Database Audit Log ein.

  2. Wählen Sie als Parsertyp XML aus.

  3. Optional können Sie eine geeignete Beschreibung zur einfachen Identifizierung des Parsers angeben.

  4. Fügen Sie im Feld Beispielloginhalt den Inhalt aus einer zu parenden Logdatei ein. Beispiel: ExampleA:

    <AuditRecord><Audit_Type>1</Audit_Type><Session_ld>201073</Session_ld><Statementid>13</Statementid><Entryld>6</Entryld>
    <Extended_Timestamp>2016-09-09T01:26:07.832814Z</Extended_Timestamp><DB_User>SYSTEM</DB_User><OS_User>UserA</OS_User><Userhost>host1</Userhost>
    <OS_Process>25839</OS_Process><Terminal>pts/4</Terminal><Instance_Number>0</Instance_Number><Object_Schema>HR</Object_Schema>
    <Object_Name>EMPLOYEES</Object_Name><Action>17</Action>
    <Returncode>0</Returncode><Sen>§703187</Sen><AuthPrivileges>--------¥-----</AuthPrivileges>
    <Grantee>SUMON</Grantee>
    <Priv_Used>244</Priv_Used><DBID>2791516383</DBID><Sql_Text>GRANT SELECT ON hr.employees TO sumon</Sql_Text></AuditRecord>

    Basierend auf dem Beispielloginhalt identifiziert Oracle Logging Analytics automatisch die Liste der XML-Elemente, die Logdatensätze darstellen.

  5. Aktivieren Sie optional das Kontrollkästchen Namespace ignorieren, um den Namespace im XML-Pfad zu ignorieren.

  6. Aktivieren Sie optional das Kontrollkästchen Positionserkennung aktivieren, um mehrere Werte eines Elements unter einem XML-Pfad zu erkennen, wie bei einem Array von Elementen. Beispiel: Für den folgenden Beispielloginhalt ExampleB:

    <ListOfTrackingFields>
        <TrackingField>
            <Name>NameA</Name>
        </TrackingField>
        <TrackingField>
            <Name>NameB</Name>
        </TrackingField>
        <TrackingField>
            <Name>NameC</Name>
        </TrackingField>
        <TrackingField>
            <Name>NameD</Name>
        </TrackingField>
        <TrackingField>
            <Name>NameE</Name>
        </TrackingField>
    </ListOfTrackingFields>

    Wenn die Positionserkennung nicht aktiviert ist, werden Sie auf den XML-Pfad /ListOfTrackingFields/TrackingField/Name beschränkt, der nur den ersten Wert von Name erkennt. Wenn Sie die Positionserkennung aktivieren, werden die folgenden 5 Werte von Name unter dem Element TrackingField erkannt: NameA, NameB, NameC, NameD, NameE, wenn alle entsprechenden XML-Pfade konfiguriert sind.

  7. Wählen Sie im Menü Logeintrag - XML-Pfad das XML-Element aus, das für die relevanten Logdatensätze geeignet ist. Wählen Sie für den Loginhalt ExampleA im obigen Beispiel /AuditRecord aus.

    Die Felder werden basierend auf dem ausgewählten XML-Pfad ausgewählt und auf der Registerkarte "Felder" angezeigt. Im obigen Beispielloginhalt sind die hervorgehobenen Elemente für die Felder geeignet. Für den XML-Beispielpfad /AuditRecord lautet der XML-Pfad des Feldes /AuditRecord/<highlighted_element>. Beispiel: /AuditRecord/Audit_Type.

  8. Wählen Sie auf der Registerkarte Felder für den spezifischen XML-Pfad den Feldnamen aus den verfügbaren definierten Feldern aus.

    Um ein neues Feld zu erstellen, klicken Sie auf das Symbol Symbol "Feld erstellen". Das Dialogfeld Benutzerdefiniertes Feld erstellen wird geöffnet. Geben Sie die Werte für Name, Datentyp und Beschreibung ein, und aktivieren Sie gegebenenfalls das Kontrollkästchen Mehrwertiges Feld für Ihre Logs. Informationen zu den einzugebenden Werten finden Sie unter Feld erstellen. Um das ausgewählte Feld in der Zeile zu entfernen, klicken Sie auf das Symbol Symbol "Feld löschen".

  9. Nachdem die Felder ausgewählt wurden, wechseln Sie zur Registerkarte Parsertest, um den Abgleichstatus anzuzeigen.


    Dialogfeld zur Parsererstellung: Die Registerkarte "Parsertest" und der Abgleichstatus des Tests

  10. Klicken Sie auf Speichern, um den neu erstellten Parser zu speichern.

Um das Erstellen eines Parsers vom Typ "XML" abzubrechen und zu einem Parser vom Typ "Regulärer Ausdruck" zu wechseln, wählen Sie unter Typ die Option Regulärer Ausdruck aus.

Parser mit Trennzeichen erstellen

  1. Geben Sie den Namen des Parsers ein. Beispiel: Geben Sie Comma Separated Custom App Log ein.

  2. Optional können Sie eine geeignete Beschreibung zur einfachen Identifizierung des Parsers angeben.

  3. Wählen Sie als Parsertyp Begrenzt aus.

  4. Wählen Sie unter Trennzeichen den Typ des Trennzeichens aus, das in den Logs zum Trennen der Felder verwendet wird, z.B. Komma, Semikolon, Leerzeichen oder Registerkarte. Falls sie sich von den aufgeführten Optionen unterscheidet, wählen Sie Andere aus, und geben Sie das Trennzeichen im angegebenen Leerzeichen an.

    Beispielloginhalt:

    helloapi,"host,local", 65427, 29, start, 2021-08-28T17:39:44.880Z

    Im obigen Beispiel ist das Komma (,) das Trennzeichen.

    Stellen Sie sicher, dass das angegebene Trennzeichen nicht mit dem als Nächstes ausgewählten Kennzeichner übereinstimmt.

  5. Wählen Sie optional den Qualifier aus, der zum Umbrechen des Texts für ein Feld in den Logs verwendet wird. Wählen Sie Doppeltes Angebot oder Einzelnes Angebot aus.

    Der Textqualifizierer wird verwendet, wenn die Begrenzungszeichen in den Felddaten enthalten sind. Beispiel: In einem Szenario hat field1 den Wert host,local, der ein Trennzeichen (,) enthält und kein Textqualifizierer verwendet wird. Dann werden die Daten, die nach dem Trennzeichen (local) auftreten, als Wert des nächsten Feldes betrachtet.

    Im Beispielloginhalt aus dem vorherigen Schritt ist das doppelte Anführungszeichen (") der Qualifier.

    Hinweis

    Für die Werte der Felder der Datentypzeichenfolge wird das Leerzeichen vor und nach dem Qualifier auch als Teil der Zeichenfolge betrachtet. Stellen Sie sicher, dass der Qualifier rechts neben dem Begrenzungszeichen positioniert ist, damit der Zeichenfolgenwert übereinstimmt. Beispiel: In ,"host,local", wird das Leerzeichen nach dem ersten Trennzeichen entfernt. Außerdem wird das Leerzeichen vor dem letzten Trennzeichen entfernt. Daher ist der effektive Wert des übereinstimmenden Zeichenfolgenfelds host,local, wie später im Parsertestergebnis zu sehen ist.
  6. Fügen Sie optional unter Header die Headerzeile des Logs ein, die dann in der Registerkarte Felder der Headerspalte zugeordnet werden kann. Beispiel:

    name, hostname, pid, level, msg, time

    Wenn Sie einen Header angeben, werden alle Logzeilen in den eigentlichen Logs, die genau mit dem Header übereinstimmen, herausgefiltert.

  7. Fügen Sie im Feld Beispielloginhalt den Inhalt aus einer zu parsenden Logdatei ein. Beispiel:

    helloapi,"host,local", 65427, 29, start, 2021-08-28T17:39:44.880Z

    Basierend auf dem Beispielloginhalt werden die Felder wie im folgenden Beispiel auf der Registerkarte "Felder" ausgewählt und angezeigt:

  8. Wählen Sie auf der Registerkarte Felder für die Headerspalte den Feldnamen aus den verfügbaren definierten Feldern aus. Sie können jedoch nur Ihre bevorzugten Headerspalten selektiv zuordnen. Es ist nicht erforderlich, dass Sie Felder für jede Headerspalte zuordnen.
    Registerkarte "Felder" im UI-Ablauf für die getrennte Parsererstellung

    Um ein neues Feld zu erstellen, klicken Sie auf das Symbol Symbol "Feld erstellen". Das Dialogfeld Benutzerdefiniertes Feld erstellen wird geöffnet. Geben Sie die Werte für Name, Datentyp und Beschreibung ein, und aktivieren Sie gegebenenfalls das Kontrollkästchen Mehrwertiges Feld für Ihre Logs. Informationen zu den einzugebenden Werten finden Sie unter Feld erstellen. Um das ausgewählte Feld in der Zeile zu entfernen, klicken Sie auf das Symbol Symbol "Feld löschen".

  9. Nachdem die Felder ausgewählt wurden, wechseln Sie zur Registerkarte Parsertest, um den Abgleichstatus und die aus dem Beispielloginhalt ausgewählten Felder anzuzeigen.
    Die Registerkarte "Parsertest" im UI-Ablauf zum Erstellen von Parser mit Trennzeichen

  10. Klicken Sie auf Parser erstellen, um den neu erstellten Parser zu speichern.

Um das Erstellen eines Parsertyps mit Trennzeichen abzubrechen und zum Erstellen eines anderen Parsertyps zu wechseln, wählen Sie ihn unter Typ aus.

Basisfeld einem Parser zuordnen

Wenn der ursprüngliche Loginhalt mit zusätzlichen Informationen umschlossen ist, können Sie das Basisfeld, das den ursprünglichen Loginhalt enthält, einem Parser zuordnen und die Felder in diesem ursprünglichen Logdatensatz extrahieren.

Beachten Sie, dass Ihr ursprünglicher Loginhalt wie unten dargestellt ist:

####<Feb 01, 2021 10:28:27 AM PST> <Info> <Diagnostics> <soaapps.example.com> <excstg_soa> <[ACTIVE] ExecuteThread: '34' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <kernel_version> <123456> <[severity-value:64] [rid: 0] [partition-id: 0] [partition-name: DOMAIN] > <BEA-320145> <Size based data retirement operation completed on archive HarvestedDataArchive. Retired 9,720 records in 11,242 ms.>

Wenn derselbe Loginhalt zuerst an OCI Logging und dann über Connector Hub an Oracle Logging Analytics gesendet wird, wird dem ursprünglichen Loginhalt ein JSON-Wrapper hinzugefügt. Beispiel:

{
  "data": {
    "Labels": "LogPath:/u01/APPLTOP/instance/wlslogs/FADomain/servers/ServiceServer_1/logs/ServiceServer_1.log;ServiceName:Host;ServiceType:Oracle_Host;LogSet:TEST_POD;HostName:examplehost.oraclecloud.com;IP:192.0.2.1;WLS:NA;Domain:NA;AppName:myApp;Customer:CompanyA, (U.S.) Corp;CustomerType:NonHypercare;PODType:TEST;PODSize:S0;DC:CDC;Version:11.13.20.10.0;",
    "action": "ACTION",
    "msg": "####<Feb 01, 2021 10:28:27 AM PST> <Info> <Diagnostics> <soaapps.example.com> <excstg_soa> <[ACTIVE] ExecuteThread: '34' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <kernel_version> <123456> <[severity-value:64] [rid: 0] [partition-id: 0] [partition-name: DOMAIN] > <BEA-320145> <Size based data retirement operation completed on archive HarvestedDataArchive. Retired 9,720 records in 11,242 ms.>"
  },
  "id": "123123123",
  "oracle": {
    "compartmentid": "ocid1.compartment.oc1..aaaaaaaauniqueID",
    "ingestedtime": "2021-02-01T18:32:49.204Z",
    "loggroupid": "ocid1.loggroup.oc1.iad.amaaaaaauniqueID",
    "logid": "ocid1.log.oc1.iad.amaaaaaayuniqueID",
    "tenantid": "ocid1.tenancy.oc1..aaaaaaaaetuniqueID"
  },
  "source": "FA-APPS",
  "specversion": "1.0",
  "time": "2021-02-01T11:48:43.091Z",
  "type": "FA Unified Apps Logs"
}

Im obigen Beispiel ist der ursprüngliche Loginhalt im Basisfeld $.data.msg vorhanden.

Beachten Sie, dass der Loginhalt im Beispiel einen JSON-Wrapper aufweist. Sie können diese Schritte jedoch auch ausführen, wenn der ursprüngliche Loginhalt und die ursprünglichen Wrapper ein unterstütztes Parserformat aufweisen und die Logs in einer beliebigen unterstützten Methode aufgenommen werden.

So extrahieren Sie die Felder im ursprünglichen Loginhalt:

  1. Identifizieren oder erstellen Sie basierend auf dem Typ des ursprünglichen Loginhalts einen Parser, um die relevanten Felder aus dem ursprünglichen Loginhalt abzurufen. Siehe Parser erstellen.

    Dieser Parser wird als zugeordneter Parser im Wrapper-Parser verwendet, den Sie als Nächstes erstellen.

  2. Erstellen Sie den Parser basierend auf dem Typ des Wrapperinhalts, indem Sie die Schritte unter Parser erstellen ausführen.

    Dieser Parser wird in den folgenden Schritten als Wrapper-Parser bezeichnet.

  3. Geben Sie für den Wrapper-Parser Beispielloginhalt an, der einen Wrapper über dem ursprünglichen Loginhalt aufweist.

    Bei einem JSON-Parser ist der ausgewählte Standard-Root-Pfad $. Wenn Sie den JSON-Stammpfad ändern möchten, blenden Sie den Abschnitt Erweiterte Optionen ein, und wählen Sie im Menü Logebene - JSON-Pfad aus.

  4. Klicken Sie auf der Registerkarte Felder entsprechend dem Basisfeld mit dem ursprünglichen Loginhalt auf das Menü "Aktionen" Menü "Aktionen", und wählen Sie Felder über einen Parser zuordnen aus. Das Dialogfeld, in dem Sie den Parser auswählen können, wird geöffnet.

    Im obigen Beispiel ist die Zeile, für die ein zugeordneter Parser hinzugefügt werden muss, $.data.msg.

    In einem Wrapper-Parser können Sie einem zugeordneten Parser nur ein Basisfeld zuordnen.

  5. Wählen Sie im Dialogfeld Felder über einen Parser zuordnen den Parser aus, mit dem die Felder aus dem Basisfeld extrahiert werden sollen.

    Wählen Sie optional eine der Aktionen Base64 decode and unzip oder Base64 decode aus, die für das Feld ausgeführt werden sollen:

    • Base64 decodieren und dekomprimieren: Wählen Sie diese Option aus, wenn das Basisfeld eine Base64-codierte ZIP-Datei ist. Das Basisfeld wird dann dekodiert und entpackt, bevor der zugeordnete Parser angewendet wird. Da es sich bei dem Basisfeld um eine codierte ZIP-Datei handelt, führt das Anwenden des gemappten Parsers dazu, dass mindestens ein Logdatensatz identifiziert wird. Diese Logdatensätze werden im Log-Explorer als Ursprünglicher Loginhalt angezeigt. Der Inhalt des Wrapper-Logs wird jedoch nicht angezeigt. Wenn der Wrapper-Parser Feldzuordnungen enthält, werden auch diese Felder angezeigt.

      Diese Aktion kann nur für Logs ausgeführt werden, die mit Management Agent erfasst wurden.

    • Base64 decodieren: Wählen Sie diese Option aus, wenn das Basisfeld Base64 im ursprünglichen Loginhalt codiert ist. Das Basisfeld wird entschlüsselt, bevor der zugeordnete Parser angewendet wird. Zusätzlich
      • Verwenden Sie die Option In Feld speichern, um die decodierte Zeichenfolge in einem Feld zu speichern.
      • Wenn Sie den entschlüsselten Basisfeldwert als Ursprünglicher Loginhalt speichern möchten, sodass er als Logdatensatz im Log Explorer angezeigt wird, wählen Sie die Option Ursprünglichen Loginhalt außer Kraft setzen. Wenn diese Option ausgewählt ist, wird der entschlüsselte Basisfeldwert im Feld Ursprünglicher Loginhalt gespeichert, und der Wrapper-Loginhalt wird im Feld Raw-Text gespeichert.

    Klicken Sie auf Felder zuordnen. Auf der Registerkarte "Felder" wird jetzt angezeigt, dass das Basisfeld dem ausgewählten zugeordneten Parser und der Liste der extrahierten Felder zugeordnet ist.

    Möglicherweise enthält der von Ihnen ausgewählte zugeordnete Parser auch einen zugeordneten Parser. Oracle Logging Analytics unterstützt zwei Ebenen verschachtelter zugeordneter Parser. Beispiel: Wrapper-parser enthält mapped-parser-1 den Wert mapped-parser-2.

  6. Nachdem die restlichen Felder ausgewählt wurden, führen Sie auf der Registerkarte Parsertest den Parsertest aus, um zu prüfen, ob der Übereinstimmungsstatus und die Felder aus dem Beispielloginhalt ausgewählt wurden.

Logeinträge vorverarbeiten

Oracle Logging Analytics bietet die folgenden Funktionen, mit denen Sie Log-Einträge vorverarbeiten und die resultierenden Log-Einträge erweitern können:

Um Logeinträge beim Erstellen eines Parsers vorverarbeiten zu können, klicken Sie auf die Registerkarte Funktionen und anschließend auf die Schaltfläche Funktion hinzufügen.

Geben Sie im daraufhin angezeigten Dialogfeld "Funktion hinzufügen" einen Namen für die Funktion ein, wählen Sie die erforderliche Funktion aus, und geben Sie die relevanten Feldwerte an.

Um das Ergebnis beim Anwenden der Funktion auf den Beispielloginhalt zu testen, klicken Sie auf Testen. Ein Vergleichsergebnis wird angezeigt, damit Sie die Richtigkeit der Feldwerte bestimmen können.

Funktion "Headerdetails"

Mit dieser Funktion können Sie Logeinträge mit den Feldern aus dem Header der Logdateien anreichern. Diese Funktion ist besonders nützlich für Logs, die einen Bodyblock als Header und dann Einträge im Body enthalten.

Diese Funktion reichert jeden Logbodyeintrag mit den Feldern des Headerlogeintrags an. Datenbank-Tracedateien stellen ein Beispiel für solche Logs dar.

Um den Header und die zugehörigen Felder zum Anreichern der zeitbasierten Bodylogeinträge zu erfassen, wählen Sie beim Erstellen des Parsers den entsprechenden Headerinhaltsparser im Dialogfeld "Funktion hinzufügen" aus.

Beispiele für den Inhaltsparser im regulären Ausdruckskopf:

  • In diesen Logtypen wird der Header meist an einer Stelle am Anfang der Logdatei angezeigt, gefolgt von anderen Einträgen. Beispiel: 

    Trace file /scratch/emga/DB1212/diag/rdbms/lxr1212/lxr1212_1/trace/lxr1212_1_ora_5071.trc
    Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
    With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
    Advanced Analytics and Real Application Testing options
    ORACLE_HOME = /scratch/emga/DB1212/dbh
    System name:    Linux
    Node name:  slc00drj
    Release:    2.6.18-308.4.1.0.1.el5xen
    Version:    #1 SMP Tue Apr 17 16:41:30 EDT 2012
    Machine:    x86_64
    VM name:    Xen Version: 3.4 (PVM)
    Instance name: lxr1212_1
    Redo thread mounted by this instance: 1
    Oracle process number: 35
    Unix process pid: 5071, image: oracle@slc00drj (TNS V1-V3)
     
    *** 2020-10-12 21:12:06.169
    *** SESSION ID:(355.19953) 2020-10-12 21:12:06.169
    *** CLIENT ID:() 2020-10-12 21:12:06.169
    *** SERVICE NAME:(SYS$USERS) 2020-10-12 21:12:06.169
    *** MODULE NAME:(sqlplus@slc00drj (TNS V1-V3)) 2020-10-12 21:12:06.169
    *** CLIENT DRIVER:() 2020-10-12 21:12:06.169
    *** ACTION NAME:() 2020-10-12 21:12:06.169
      
    2020-10-12 21:12:06.169: [    GPNP]clsgpnp_dbmsGetItem_profile: [at clsgpnp_dbms.c:345] Result: (0) CLSGPNP_OK. (:GPNP00401:)got ASM-Profile.Mode='legacy'
    *** CLIENT DRIVER:(SQL*PLUS) 2020-10-12 21:12:06.290
      
    SERVER COMPONENT id=UTLRP_BGN: timestamp=2020-10-12 21:12:06
    *** 2020-10-12 21:12:10.078
    SERVER COMPONENT id=UTLRP_END: timestamp=2020-10-12 21:12:10
    *** 2020-10-12 21:12:39.209
    KJHA:2phase clscrs_flag:840 instSid:
    KJHA:2phase ctx 2 clscrs_flag:840 instSid:lxr1212_1
    KJHA:2phase clscrs_flag:840 dbname:
    KJHA:2phase ctx 2 clscrs_flag:840 dbname:lxr1212
    KJHA:2phase WARNING!!! Instance:lxr1212_1 of kspins type:1 does not support 2 phase CRS
    *** 2020-10-12 21:12:39.222
    Stopping background process SMCO
    *** 2020-10-12 21:12:40.220
    ksimdel: READY status 5
    *** 2020-10-12 21:12:47.628
    
    ...
    
    KJHA:2phase WARNING!!! Instance:lxr1212_1 of kspins type:1 does not support 2 phase CRS

    Im vorherigen Beispiel reichert Oracle Logging Analytics die zeitbasierten Bodylogeinträge über die Funktion "Headerdetails" mit den Feldern aus dem Headerinhalt an.

  • Beachten Sie das folgende Logbeispiel:

    Server: prodsrv123
    Application: OrderAppA
     
    2020-08-01 23:02:43 INFO DataLifecycle Starting backup process
    2020-08-01 23:02:43 ERROR OrderModule Order failed due to transaction timeout
    2020-08-01 23:02:43 INFO DataLifecycle Backup process completed. Status=success
    2020-08-01 23:02:43 WARN OrderModule Order completed with warnings: inventory on backorder
    

    Im vorherigen Beispiel sind vier Log-Einträge vorhanden, die in Oracle Logging Analytics erfasst werden müssen. Der Servername und der Anwendungsname werden nur am Anfang der Logdatei angezeigt. So nehmen Sie den Servernamen und den Anwendungsnamen in jeden Logeintrag auf:

    1. Definieren Sie einen Parser für den Header, der die Server- und Anwendungsfelder parst: Server:\s*(\S+).*?Application:\s*(\S+)

    2. Definieren Sie einen zweiten Parser, um den restlichen Body des Logs zu parsen: {TIMEDATE}\s(\S+)\s(\S+)\s(.*)

    3. Fügen Sie dem Bodyparser eine Instanz der Funktion "Headerdetails" hinzu, und wählen Sie den Headerparser aus, den Sie in Schritt 1 definiert haben.

    4. Fügen Sie den in Schritt 2 definierten Bodyparser einer Logquelle hinzu, und verknüpfen Sie die Logquelle mit einer Entity, um die Logerfassung zu starten.

    Dann können Sie vier Logeinträge abrufen, wobei der Servername und der Anwendungsname jedem Eintrag hinzugefügt werden.

Beispiele für Inhaltsparser im JSON-Header:

Im Folgenden finden Sie Beispiele für verschiedene Fälle für Header-Detail. Detaillogeinträge werden mit Feldern aus Headerlogeinträgen angereichert. Die hervorgehobenen Felder im angereicherten Detaillogeintrag sind die Felder, die aus dem Headerlogeintrag kopiert wurden.

  • JSON-PFAD: Header = $, Details = $.data

    {
      "id" : "id_ERROR1",
      "data": {
      "id" : "id_data_ERROR1",
       "childblock0": {
          "src": "127.0.0.1"
        },
        "childblocks": [
          {
            "childblock": {
              "srchost1": "host1_ERROR1"
            }
          },
          {
            "childblock": {
              "srchost2": "host2_ERROR1"
            }
          }
        ],
        "hdr": {
          "time_ms": "2021-05-21T04:27:18.89714589Z",
          "error": "hdr_ERROR1"
        }
      },
      "compartmentName": "comp_name_ERROR1",
      "eventName": "GetBucket_ERROR1"
    }

    Extrahierte und angereicherte Logeinträge:

    Headerlogeintrag: {"id":"id_ERROR1","compartmentName":"comp_name_ERROR1","eventName":"GetBucket_ERROR1"}

    Details Logeintrag: {"compartmentName":"comp_name_ERROR1","eventName":"GetBucket_ERROR1", "id": "id_data_ERROR1", "childblock0":{"src":"127.0.0.1"},"childblocks":[{"childblock":{"srchost1":"host1_ERROR1"}},{"childblock":{"srchost2":"host2_ERROR1"}}],"hdr":{"time_ms":"2021-05-21T04:27:18.89714589Z","error":"hdr_ERROR1"}}

    Das Feld id ist sowohl im Header als auch in den Details verfügbar. Das Feld aus den Details wird in diesem Fall ausgewählt.

  • JSON-PFAD: Header = $.metadata, Details = $.datapoints[*]

    In diesem Beispiel weist der erste Block sowohl Header als auch Details auf, der zweite Block enthält jedoch nur den Logeintrag "Details".

    {
       "namespace":"oci_streaming",
       "resourceGroup":null,
       "name":"GetMessagesThroughput.Count1",
       "dimensions":{
          "region":"phx1",
          "resourceId":"ocid1.stream.oc1.phx.1"
       },
       "datapoints":[
          {
             "timestamp":1652942170000,
             "value":1.1,
             "count":11
          },
          {
             "timestamp":1652942171001,
             "value":1.2,
             "count":12
          }
       ],
       "metadata":{
          "displayName":"Get Messages 1",
          "unit":"count1"
       }
    }
    {
       "namespace":"oci_streaming",
       "resourceGroup":null,
       "name":"GetMessagesThroughput.Count1",
       "dimensions":{
          "region":"phx1",
          "resourceId":"ocid1.stream.oc1.phx.1"
       },
       "datapoints":[
          {
             "timestamp":1652942170002,
             "value":2.1,
             "count":21
          },
          {
             "timestamp":1652942171003,
             "value":3.2,
             "count":32
          }
       ]
    }

    Extrahierte und angereicherte Logeinträge:

    Headerlogeintrag: {"displayName":"Get Messages 1","unit":"count1"}

    Details Logeintrag: {"displayName":"Get Messages 1","unit":"count1", "timestamp":1652942170000,"value":1.1,"count":11}

    Details Logeintrag: {"displayName":"Get Messages 1","unit":"count1", "timestamp":1652942171001,"value":1.2,"count":12}

    Details Logeintrag: {"timestamp":1652942170002,"value":2.1,"count":21}

    Details Logeintrag: {"timestamp":1652942171003,"value":3.2,"count":32}

  • JSON-PFAD: Header = $.instanceHealths:[*], Details = $.instanceHealths[*].instanceHealthChecks[*]

    {
      "reportType": "Health Status Report 1",
      "instanceHealths": [
        {
          "instanceHealthChecks": [
            {
              "HealthCheckName": "Check-A1",
              "Result": "Passed",
              "time": "2022-11-17T06:05:01Z"
            },
            {
              "HealthCheckName": "Check-A2",
              "Result": "Passed",
              "time": "2022-11-17T06:05:01Z"
            }
          ],
          "Datacenter-A" : "Remote A"
        }
      ]
    }

    Extrahierte und angereicherte Logeinträge:

    Headerlogeintrag: {"Datacenter-A":"Remote A"}

    Details Logeintrag: {"Datacenter-A":"Remote A", "HealthCheckName":"Check-A1","Result":"Passed","time":"2022-11-17T06:05:01Z"}

    Details Logeintrag: {"Datacenter-A":"Remote A", "HealthCheckName":"Check-A2","Result":"Passed","time":"2022-11-17T06:05:01Z"}

  • JSON-PATH: Header1 = $.dimensions, Header2 = $.metadata, Details = $.datapoints[*]

    In diesem Beispiel werden zwei verschiedene Header angewendet.

    {
       "namespace":"oci_streaming",
       "resourceGroup":null,
       "name":"GetMessagesThroughput.Count1",
       "dimensions":{
          "region":"phx1",
          "resourceId":"ocid1.stream.oc1.phx.1"
       },
       "datapoints":[
          {
             "timestamp":1652942170000,
             "value":1.1,
             "count":11
          },
          {
             "timestamp":1652942171001,
             "value":1.2,
             "count":12
          }
       ],
       "metadata":{
          "displayName":"Get Messages 1",
          "unit":"count1"
       }
    }

    Extrahierte und angereicherte Logeinträge:

    Logeintrag Header1: {"region":"phx1","resourceId":"ocid1.stream.oc1.phx.1"}

    Logeintrag Header2: {"displayName":"Get Messages 1","unit":"count1"}

    Details Logeintrag: {"region":"phx1","resourceId":"ocid1.stream.oc1.phx.1", displayName":"Get Messages 1","unit":"count1", "timestamp":1652942170000,"value":1.1,"count":11}

    Details Logeintrag: {"region":"phx1","resourceId":"ocid1.stream.oc1.phx.1", displayName":"Get Messages 1","unit":"count1", "timestamp":1652942171001,"value":1.2,"count":12}

  • JSON-PATH: Header1 = $.hdr1, Header2 = $.hdr2, Details = $.body

    In diesem Fall wird der Headerlogeintrag mit dem Detailslogeintrag verknüpft, wenn sich beide im selben Block befinden.

    {
        "hdr1": {
            "module": "mod1",
             "error": "hdr1_error1"
        }
    }
    {
        "body": {        
            "id": "data_id_ERROR2",
             "error": "body_ERROR2"
        }
    }
    {
        "hdr2": {
    
            "module": "mod3",
            "error": "hdr2_error3"
        }
        "body": {        
            "id": "data_id_ERROR4",
            "error": "body_ERROR4"
        }
    }

    Extrahierte und angereicherte Logeinträge:

    Headerlogeintrag: {"id":"data_id_ERROR1","error":"hdr1_error1"}

    Details Logeintrag: {"id":"data_id_ERROR2","error":"body_ERROR2"}

    Headerlogeintrag: {"module":"mod3","error":"hdr2_error3"}

    Details Logeintrag: {"module":"mod3", "id":"data_id_ERROR4","error":"body_ERROR4"}

    Beachten Sie, dass im zweiten Details-Logeintrag der Wert von error aus den Details ausgewählt wird, wenn dasselbe Element im Header verfügbar ist, sowie Details.

  • JSON-PATH: Header = $, Details1 = $.JDBC, Details2 = $.THREADS

    In diesem Fall ist ein einzelner Headerlogeintrag mehreren Detaillogeinträgen zugeordnet:

    {
      "time": "2024-09-10T00:20:00",
      "instance": "GBOSBMXR1PR",
      "name": "gbosbmxr1pr_server_2",
      "JDBC": [
        {  "name":"XXAlsGoldXADS",
    	"Status": "Running",
    	"Url": "jdbc:oracle:thin:@PSOAPR1"
        }
      ],
      "THREADS": [
        {  "name": "[HOGGING][ACTIVE] ExecuteThread 56 ",
    	"WORKMGR": "OneWayJTACoordinatorWM",
    	"CATEGORY": "Internal", "APPNAME": "None"
        }
      ]
    }

    Extrahierte und angereicherte Logeinträge:

    Headerlogeintrag (wird auf die folgenden Logeinträge angewendet): { "time": "2024-09-10T00:20:00", "instance": "GBOSBMXR1PR", "name": "gbosbmxr1pr_server_2" }

    Details Logeintrag: { "name":"XXAlsGoldXADS", "Status": "Running", "Url": "jdbc:oracle:thin:@PSOAPR1" }

    Details Logeintrag: { "name": "[HOGGING][ACTIVE] ExecuteThread 56 ", "WORKMGR": "OneWayJTACoordinatorWM", "CATEGORY": "Internal", "APPNAME": "None" }

Funktion "Suchen und ersetzen"

Mit dieser Funktion können Sie Text aus einer Logzeile extrahieren und abhängig von bestimmten Mustern zu anderen Logzeilen hinzufügen. Beispiel: Mit dieser Funktion können Sie fehlende Zeitstempel zu Logs für allgemeine und langsame MySQL-Abfragen hinzufügen.

Die Funktion "Suchen und ersetzen" enthält die folgenden Attribute:

  • Regulärer Catch-Ausdruck: Der reguläre Ausdruck, der mit jeder Logzeile verglichen wird. Der benannte Gruppentext, der mit dem regulären Ausdruck übereinstimmt, wird im Speicher gespeichert und im Replace-Ausdruck verwendet. 

    • Wenn der Catch-Ausdruck mit einer vollständigen Zeile übereinstimmt, wird der Replace-Ausdruck nicht auf die nachfolgende Logzeile angewendet. Dadurch wird vermieden, dass dieselbe Zeile zweimal vorkommt, wenn Sie eine fehlende Zeile voranstellen möchten.

    • Eine mit dem Catch-Ausdruck übereinstimmende Zeile wird nicht für den Find-Ausdruck verarbeitet. Daher können Sie den Vorgang "Suchen und ersetzen" nicht in derselben Logzeile ausführen.

    • Sie können mehrere Gruppen mit unterschiedlichen Namen angeben.

  • Regulärer Find-Ausdruck: Dieser reguläre Ausdruck gibt den Text an, der durch den Text ersetzt werden soll, der mit benannten Gruppen im Catch-Ausdruck in Logzeilen übereinstimmt.

    • Das Abgleichsmuster muss gruppiert sein.

    • Der Find-Ausdruck wird nicht für die Zeilen ausgeführt, die mit dem Catch-Ausdruck übereinstimmen. Daher können Sie den Vorgang "Suchen und ersetzen" nicht in derselben Logzeile ausführen.

    • Der Find-Ausdruck kann mehrere Gruppen aufweisen. Der übereinstimmende Text in jeder Gruppe wird durch den Text ersetzt, der mit dem Replace-Ausdruck erstellt wird.

  • Regulärer Replace-Ausdruck: Diese benutzerdefinierte Notation gibt den Text an, der die im Find-Ausdruck gefundenen Gruppen ersetzen soll. Die Gruppennamen müssen in Klammern gesetzt werden.

    • Der Gruppenname muss in Klammern gesetzt werden.

    • Sie können den statischen Text aufnehmen.

    • Der durch den Replace-Ausdruck erstellte Text ersetzt den übereinstimmenden Text in allen Gruppen im Find-Ausdruck.

Klicken Sie neben den Feldern Regulärer Catch-Ausdruck, Regulärer Find-Ausdruck und Regulärer Replace-Ausdruck auf das Symbol Hilfe, um die Beschreibung des Feldes, den Beispielausdruck, den Beispielinhalt und die ausgeführte Aktion anzuzeigen. Um weitere Catch-Ausdrücke hinzuzufügen, klicken Sie unter Regulärer Catch-Ausdruck auf Ausdruck hinzufügen.

Beispiele:

  • Ziel dieses Beispiels ist es, den Zeitstempel aus der Logzeile mit dem Text # Time: abzurufen und zu den Logzeilen hinzuzufügen, die mit # User@Host beginnen und keinen Zeitstempel aufweisen.

    Betrachten Sie die folgenden Logdaten:

    # Time: 160201 1:55:58 
    # User@Host: root[root] @ localhost [] Id: 1
    # Query_time: 0.001320 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 1
    select @@version_comment limit 1;
    # User@Host: root[root] @ localhost [] Id: 2
    # Query_time: 0.000138 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 2
    SET timestamp=1454579783;
    SELECT DATABASE();

    Die Werte der Attribute Regulärer Catch-Ausdruck, Regulärer Find-Ausdruck und Regulärer Replace-Ausdruck können wie folgt lauten:

    • Der Wert von Regulärer Catch-Ausdruck zum Abgleichen der Zeitstempellogzeile und Speichern im Arbeitsspeicher mit dem Namen timestr gespeichert wird, lautet ^(?<timestr>^# Time:.*).

    • Der Wert von Regulärer Find-Ausdruck zum Suchen der Zeilen, denen die Zeitstempellogzeile vorangestellt werden soll, lautet (^)# User@Host:.*.

    • Der Wert von Regulärer Replace-Ausdruck zum Ersetzen des Anfangs der Logzeilen, in denen der Zeitstempel fehlt, lautet (timestr).

    Nachdem Sie die Funktion "Suchen und ersetzen" hinzugefügt haben, wird die folgende Änderung in den Logzeilen angezeigt:

    # Time: 160201 1:55:58 
    # User@Host: root[root] @ localhost [] Id: 1
    # Query_time: 0.001320 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 1
    select @@version_comment limit 1;
    # Time: 160201 1:55:58 
    # User@Host: root[root] @ localhost [] Id: 2
    # Query_time: 0.000138 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 2
    SET timestamp=1454579783;
    SELECT DATABASE();

    Im vorherigen Ergebnis des Beispiels können Sie feststellen, dass die Funktion "Suchen und ersetzen" den Zeitstempel vor dem Eintrag User@host in jeder Logzeile eingefügt hat, die bei der Vorverarbeitung des Logs aufgetreten ist.

  • Ziel dieses Beispiels ist es, mehrere Parameter abzufangen und an mehreren Stellen in den Logdaten zu ersetzen.

    Betrachten Sie die folgenden Logdaten:

    160203 21:23:54 Child process "proc1", owner foo, SUCCESS, parent init 
    160203 21:23:54 Child process "proc2" - 
    160203 21:23:54 Child process "proc3" -

    In den vorhergehenden Logzeilen enthalten die zweite und dritte Zeile nicht die Benutzerdaten. Daher muss die Funktion "Suchen und ersetzen" die Werte aus der ersten Zeile des Logs auswählen und die Werte in der zweiten und dritten Zeile ersetzen.

    Die Werte der Attribute Regulärer Catch-Ausdruck, Regulärer Find-Ausdruck und Regulärer Replace-Ausdruck können wie folgt lauten:

    • Der Wert von Regulärer Catch-Ausdruck zum Abrufen der Informationen zu den Benutzern foo und init aus der ersten Logzeile und Speichern im Arbeitsspeicher mit den Parametern user1 und user2 lautet ^.*?owner\s+(?<user1>\w+)\s*,\s*.*?parent\s+(?<user2>\w+).*.

    • Der Wert von Regulärer Find-Ausdruck suchen zum Suchen der Zeilen mit dem Bindestrich (-) lautet .*?(-).*.

    • Der Wert von Regulärer Replace-Ausdruck lautet , owner (user1), UNKNOWN, parent (user2).

    Nachdem Sie die Funktion "Suchen und ersetzen" hinzugefügt haben, wird die folgende Änderung in den Logzeilen angezeigt:

    160203 21:23:54 Child process "proc1", owner foo, SUCCESS, parent init 
    160203 21:23:54 Child process "proc2", owner foo, UNKNOWN, parent init 
    160203 21:23:54 Child process "proc3", owner foo, UNKNOWN, parent init

    Im vorherigen Ergebnis des Beispiels können Sie feststellen, dass die Funktion "Suchen und ersetzen" die Informationen user1 und user2 anstelle des Bindestrichs (-) in jede Logzeile eingefügt hat, die bei der Vorverarbeitung des Logs gefunden wurde.

Funktion "Zeit-Offset"

Bei einigen Logdatensätzen fehlt der Zeitstempel, einige weisen nur den Zeit-Offset auf, und einige haben keine Zeitangaben. Oracle Logging Analytics extrahiert die erforderlichen Informationen und weist jedem Logdatensatz den Zeitstempel zu.

Einige Szenarios und die entsprechenden Lösungen für die Zuweisung des Zeitstempels mit der Funktion "Zeit-Offset":

Beispielloginhalt Szenario Lösung
Process started May 5, 2020 12:34:53 AM
0.0 host1 debug services started
0.5 host1 debug cache populated 
1.4 host1 info connected to cluster
2.7 host1 error cache failure
Process started May 6, 2020 12:36:54 AM
0.1 host1 debug services started
0.4 host1 debug cache populated 
2.1 host1 info connected to cluster
3.4 host1 error cache failure

Die Logdatei enthält einen Zeitstempel in den anfänglichen Logs und weist später Offsets auf.

Wählen Sie den Zeitstempel aus den anfänglichen Logdatensätzen aus, und weisen Sie ihn den späteren Logdatensätzen zu, die mit Zeit-Offsets angepasst wurden.

1 [Startup] Timestamp=0, 
   PName=USER_START, ProcessID=11961, 
   ClientIP=xx.xx.xx.xx, 
   Date=20-MAR-2020 03:35:17, ServerName=host2, 
   Tracegroup=debug    
10 [CLIENT_TIME] Timestamp=1370, Milliseconds=328   
100 [Local_PU.END,6] Timestamp=16000, 
   StartEvent=99, Duration=0

Die Logdatei enthält anfängliche Logs mit Zeit-Offsets und keine vorherigen Zeitstempellogs.

Wählen Sie den Zeitstempel aus den späteren Logdatensätzen aus, und weisen Sie ihn den vorherigen Logdatensätzen zu, die mit Zeit-Offsets angepasst wurden.

Wenn der Zeit-Offset in der Zwischenzeit zurückgesetzt wird (also wenn ein kleinerer Zeit-Offset in einem Logdatensatz auftritt), wird er korrigiert, indem der Zeitstempel des vorherigen Logdatensatzes als Referenz verwendet wird.

0.0 host1 debug services started
0.5 host1 debug cache populated
1.4 host1 info connected to cluster
2.7 host1 error cache failure 

Die Logdatei enthält nur Logdatensätze mit Zeit-Offsets und ohne Zeitstempel.

Zeitstempel aus der letzten Änderungszeit der Datei: Nachdem alle Logdatensätze durchlaufen wurden, wird der Zeitstempel berechnet, indem der berechnete Zeit-Offset von der letzten Änderungszeit der Datei abgezogen wird.

Zeitstempel aus Dateiname: Wenn diese Option in der UI ausgewählt ist, wird der Zeitstempel aus dem Dateinamen in dem vom Zeitstempelausdruck angegebenen Format entnommen.

Die Zeit-Offsets der Logeinträge beziehen sich auf den zuvor abgeglichenen Zeitstempel. Dieser Zeitstempel wird in diesem Dokument als Basiszeitstempel bezeichnet.

Verwenden Sie die Funktion "Parserzeit-Offset", um den Zeitstempel und den Zeitstempel-Offset aus den Logdatensätzen zu extrahieren. Führen Sie im Dialogfeld Funktion hinzufügen folgende Schritte aus:

  1. Wo befindet sich der Zeitstempel?: Um anzugeben, wo der Zeitstempel entnommen werden soll, wählen Sie Dateiname, Zeitpunkt letzte Dateiänderung oder Logeintrag aus. Standardmäßig ist Dateiname ausgewählt.

    Wenn diese Option nicht angegeben ist, wird die Suche nach dem Zeitstempel in der folgenden Reihenfolge ausgeführt:

    • Durchlaufen Sie die Logdatensätze, und suchen Sie nach einer Übereinstimmung mit dem Zeitstempelparser, den Sie im nächsten Schritt angeben.
    • Wählen Sie die letzte Änderungszeit der Datei als Zeitstempel aus.
    • Wenn die letzte Änderungszeit für die Datei nicht verfügbar ist, wählen Sie die Systemzeit als Zeitstempel aus.
    • Suchen Sie nach einer Übereinstimmung mit dem Zeitstempelausdruck im Dateinamen, den Sie im nächsten Schritt angeben.
  2. Geben Sie auf Basis der ausgewählten Quelle des Zeitstempels die folgenden Werte an:

    • Wenn Sie in Schritt 1 die Option Dateiname ausgewählt haben:

      Zeitstempelausdruck: Geben Sie den regulären Ausdruck an, um den Zeitstempel im Dateinamen zu suchen. Standardmäßig wird die Direktive {TIMEDATE} verwendet.

      Beispieldateiname: Geben Sie den Dateinamen eines Beispiellogs an, mit dem die obigen Einstellungen getestet werden können.

    • Wenn Sie in Schritt 1 die Option Zeitpunkt letzte Dateiänderung ausgewählt haben, wählen Sie Letzte Änderungszeit der Beispieldatei aus.

    • Wenn Sie in Schritt 1 die Option Logeintrag ausgewählt haben, wählen Sie im Menü Zeitstempelparser den Parser aus, um das Zeitstempelformat anzugeben.

  3. Timestamp Offset-Ausdruck: Geben Sie den regulären Ausdruck an, um den Zeit-Offset in Sekunden und Millisekunden zu extrahieren und einem Logdatensatz den Zeitstempel zuzuweisen. Nur die Gruppen sec und msec werden unterstützt. Beispiel: (?<sec>\d+)\.(?<msec>\d+).

    Beispiel für einen Logdatensatz:

    15.225 hostA debug services started

    Der Beispiel-Offset-Ausdruck wählt 15 Sekunden und 225 Millisekunden als Zeit-Offset vom Logdatensatz aus.

  4. Nach der Auswahl in den vorherigen Schritten wird der Loginhalt im Feld Beispiellog angezeigt.

    Klicken Sie auf Testen, um die Einstellungen zu testen.

    Sie können den Vergleich zwischen dem ursprünglichen Loginhalt und der berechneten Zeit auf Basis Ihrer Angaben anzeigen.

  5. Um die obige Zeit-Offset-Funktion zu speichern, klicken Sie auf Hinzufügen.