Sie können den Parser für das Schlüssel/Wert-Paar (Key/Value Pair Parser, KVP) sowohl für FileLog- als auch für WinLog-Collectors konfigurieren.

Schlüssel/Wert-Paar-Parser (KVP-Parser)

Die kvp-Parser finden und extrahieren alle key=value-Übereinstimmungen in einem beliebigen Protokollnachrichtentext. Im folgenden Beispiel wird das kvp-Parser-Format dargestellt.
[parser|kvp_parser]
base_parser=kvp
fields=*

Beispielsweise kann das Schlüsselwertprotokoll folgendes Format aufweisen: scope=local; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0;

Für den kvp-Parser müssen Sie die Felder angeben, aus denen die Werte extrahiert werden sollen. Wenn z. B. die Definition fields=name,lastname,country in der Konfiguration vorhanden ist, werden nur die Werte mit den angegebenen Schlüsseln analysiert und an den Server gesandt.

Sowohl der Schlüssel als auch der Wert kann optional von doppelten Anführungszeichen (" ") eingeschlossen sein, um ein Leerzeichen oder andere Sonderzeichen zu definieren.

Wenn doppelte Anführungszeichen für den Schlüssel oder den Wert verwendet werden, kann der umgekehrte Schrägstrich (\) als Escape-Zeichen verwendet werden. Jedes auf einen umgekehrten Schrägstrich folgende Zeichen ist wörtlich definiert, einschließlich eines doppelten Anführungszeichens oder eines umgekehrten Schrägstrichs. Beispiel: " \\ "

Beachten Sie die folgenden Überlegungen.

  • Wenn dem Schlüssel in einem Schlüssel/Wert-Paar kein Ist-gleich-Zeichen folgt und kein VALUE angegeben ist, wird die Option wie im Fall von Freitext übersprungen.
  • Der Schlüssel darf nicht leer sein, der Wert darf jedoch leer sein.
  • Ein Gleichheitszeichen, dem kein Wert folgt, wird als Freitext behandelt und übersprungen.
  • Ein Wert kann eine von doppelten Anführungszeichen umgebene Zeichenfolge oder leer sein. Verwenden Sie einen umgekehrten Schrägstrich als Escape-Zeichen für Sonderzeichen, die zum Wert gehören.

Optionen für den KVP-Parser

Beachten Sie die folgenden Informationen hinsichtlich der Struktur des kvp-Parsers.

Option Beschreibung
fields

Die zu extrahierenden Informationen, als Dateneinheiten beschrieben. Beispielsweise fields=name,lastname,country.

Wenn bestimmte Feldnamen durch die Option fields definiert sind, werden alle ungültigen Zeichen in einem Feldnamen, der aus einem Protokoll extrahiert wurde, durch einen Unterstrich ersetzt. Wenn z. B. die Option fields nach den Feldern „x-A“ und „a*(X+Y)“ sucht, extrahiert der Parser diese Felder aus den Protokollen und benennt die Felder in „x_a“ und „a__x_y“ um. Auf diese Weise können Felder mit beliebigen Zeichen im Namen extrahiert werden.

Wenn die Option fields in der Form „*“ angegeben wird, d. h., wenn der kvp-Parser Feld/Wert-Paare automatisch erkennt, sucht der Parser nach Feldern, die nur alphanumerische und Unterstrichzeichen enthalten (unterstützt durch den LI-Server). Alle anderen ungültigen Zeichen werden verworfen und nicht in Unterstriche umgewandelt. Damit wird verhindert, dass der Parser nicht benötigte Informationen in statische Felder extrahiert.

delimiter

Optional.

Standardtrennzeichen sind Leerzeichen, Tabstopp, Zeilenumbruchzeichen, Komma und Semikolon.

Wenn in der Konfiguration keine Trennzeichen angegeben sind, verwendet der kvp-Parser Standardtrennzeichen zum Analysieren.

Um Standardtrennzeichen in bestimmte Trennzeichen zu ändern, müssen Sie diese zwischen doppelten Anführungszeichen definieren. Beispiel: delimiter = "#^|". Diese Definition bedeutet, dass jedes der in doppelten Anführungszeichen eingeschlossenen Zeichen als Trennzeichen verwendet wird. Beim kvp-Parser kann jedes Zeichen als Trennzeichen angesehen werden. Sie können die Standardtrennzeichen mit anderen Trennzeichen in die Definition einfügen.

Die delimiter = "#^|\t\r\n\s"-Anweisung beispielsweise enthält den Tabstopp, Zeilenumbruchzeichen und das Leerzeichen als Trennzeichen. Wenn diese Zeichen verwendet werden, muss ihnen das Escape-Zeichen vorangestellt werden. Um z. B. das Leerzeichen als Trennzeichen zu definieren, geben Sie das Escape-Zeichen " \" vor dem Leerzeichen ein, wenn Sie dieses als Trennzeichen definieren. Beispiel: delimiter="\s".

field_decoder

Verschachtelte Parser werden als JSON-Zeichenfolge angegeben, in der die Schlüssel die Namen des Felds sind, auf das der verschachtelte Parser angewendet wird. Der Wert ist der Name des Parsers, der für das betreffende Feld verwendet wird.

Jeder verschachtelte Parser wird entsprechend der Decodierung durch den Basis-Parser auf das zutreffende Feld angewandt.

Felddecodierer sind nützlich, wenn es sich beim Wert eines Schlüssel/Wert-Paars um einen komplexen Wert wie ein Zeitstempel oder eine kommagetrennte Liste handelt.

debug =

Optional. Der debug =-Wert kann yes oder no betragen. Der Debug-Standardwert für Parser ist debug=no.

Wenn die Option auf yes festgelegt ist, können Sie detaillierte Protokolle der Parser-Verarbeitung unter liagent_<Datum>.log anzeigen.

Zusätzliche Optionen für Schlüsselwerte

Schlüssel Definition
KVP_MESSAGE = *(MESSAGE_ENTRY [WSPR])

Eine Liste mit Nachrichteneinträgen, optional getrennt durch Leerzeichen

MESSAGE_ENTRY = KVP / FREE_TEXT

Ein Eintrag ist ein Schlüssel/Wert-Paar oder nur ein Freitext

KVP = KEY ["=" VALUE]

Schlüssel/Wert-Paar. Wenn auf KEY kein Gleichheitszeichen und VALUE folgen, wird er wie Freitext übersprungen.

KEY = BARE_KEY / QUOTED_KEY
FREE_TEXT = "="

Ein frei stehendes Gleichheitszeichen wird als Freitext betrachtet und übersprungen.

BARE_KEY = *1BARE_KEY_CHAR

Mindestens ein Zeichen

BARE_KEY_CHAR = %0x00-08 / %0x10-19 / %0x21-3C / %3E-%FF

Ein beliebiges Zeichen mit Ausnahme von Gleichheitszeichen, Leerzeichen oder Tabstopp

QUOTED_KEY = 0x22 *1(QUOTED_STRING_CHAR / "\" CHAR) 0x22

Mindestens ein in doppelten Anführungszeichen eingeschlossenes Zeichen. Der umgekehrte Schrägstrich wird als Escape-Zeichen verwendet.

QUOTED_STRING_CHAR = %0x00-21 / %0x23-FF

Jedes Zeichen mit Ausnahme von doppelten Anführungszeichen

VALUE = BARE_VALUE / QUOTED_VALUE
BARE_VALUE = *BARE_VALUE_CHAR

Null oder mehr Zeichen

BARE_VALUE_CHAR = %0x00-08 / %0x10-19 / %0x21-FF

Ein beliebiges Zeichen mit Ausnahme von Leerzeichen oder Tabstopp

QUOTED_VALUE = 0x22 *(QUOTED_STRING_CHAR / "\" CHAR) 0x22

Eine in doppelten Anführungszeichen eingeschlossene Zeichenfolge. Darf leer sein. Der umgekehrte Schrägstrich wird als Escape-Zeichen verwendet.

Beispiele für die Konfiguration von KVP-Parsern

Falls erforderlich, können Sie fields=* zum Analysieren aller Felder verwenden.

[parser|simple_kvp]
base_parser =kvp
fields=*

In diesem Beispiel wird dargestellt, wie der Felddecodierer angegeben wird.

[parser|mykvp]
debug=no
base_parser=kvp
delimiter="#^|"
fields=*
;OR fields=scope,abstract,lazyInit,autowireMode,dependencyCheck
field_decoder={"field1":"field1_parser1"}

[parser|field1_parser1]
base_parser=clf
format=[%{value1}i]]
field_decoder={"value1":"field_parser2"}

So analysieren Sie das folgende KVP-Protokoll:

Configuring transport... proto = cfapi server_hostname = LOCALHOST ssl = no port = 9000 reconnect = 30
Definieren Sie die KVP-Parser-Konfiguration:
[parser|kvp_log_parser]
base_parser=kvp
fields=*
Der KVP-Parser gibt folgende Felder zurück:
proto=cfapi
server_hostname=LOCALHOST
ssl=no
port=9000
reconnect=30
Hinweis: Wenn in Eingabeprotokollen einem Zuweisungsoperator ( =) ein zufällig erzeugter Schlüssel vorangestellt wird, sollte der KVP-Parser nicht mit der Option * verwendet werden, da er viele Zufallsfelder erzeugt, was zu Problemen mit der Benutzeroberfläche und der Abfrageleistung führen kann. Stattdessen können Sie den Parser verwenden, indem Sie die zu analysierenden Felder angeben.

Beispiele für einfache und komplexe KVP-Parser

Beispiel für einen einfachen KVP-Parser

[filelog|MyLog]
directory=C:\<folder_name>\Parser_logs
include=*.log
parser=my_KVP_parser

[parser|my_KVP_parser]
base_parser=kvp
fields=*

Beispiel für einen komplexen KVP-Parser

[filelog|MyLog]
directory=C:\<folder_name>\Parser_logs
include=*.log
parser=my_KVP_parser

[parser|my_KVP_parser]
base_parser=kvp
fields=*
field_decoder={"field1":" field1_parser1"}

[parser| field1_parser1]
base_parser=clf
format=[%{value1}i]]
field_decoder={"value1":" field1_parser2"}