Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
parse
Verwenden Sie parse
, um Daten aus einem Protokollfeld zu extrahieren und ein extrahiertes Feld zu erstellen, das Sie in Ihrer Abfrage verarbeiten können. parse
unterstützt sowohl den globalen Modus mit Platzhaltern als auch reguläre Ausdrücke. Hinweise zur Syntax regulärer Ausdrücke finden Sie unterUnterstützte Syntax für reguläre Ausdrücke (Regex).
Sie können verschachtelte JSON-Felder mit einem regulären Ausdruck analysieren.
Beispiel: Analysieren eines verschachtelten JSON-Feld
Das Code-Snippet zeigt, wie ein JSON-Protokollereignis analysiert wird, das während der Aufnahme reduziert wurde.
{'fieldsA': 'logs', 'fieldsB': [{'fA': 'a1'}, {'fA': 'a2'}]}
Das Code-Snippet zeigt eine Abfrage mit einem regulären Ausdruck, der die Werte für fieldsA
und fieldsB
extrahiert, um die extrahierten Felder fld
und array
zu erstellen.
parse @message "'fieldsA': '*', 'fieldsB': ['*']" as fld, array
Benannte Erfassungsgruppen
Wenn Sie parse
mit einem regulären Ausdruck verwenden, können Sie benannte Erfassungsgruppen verwenden, um ein Muster in einem Feld zu erfassen. Die Syntax lautet parse @message (?<Name>pattern).
.
Im folgenden Beispiel wird eine Erfassungsgruppe für ein VPC-Flow-Protokoll verwendet, um die ENI in ein Feld namens NetworkInterface
zu extrahieren.
parse @message /(?<NetworkInterface>eni-.*?) / display @timestamp, NetworkInterface
Anmerkung
JSON-Protokollereignisse werden während der Aufnahme reduziert. Derzeit wird das Parsen verschachtelter JSON-Felder mit einem Glob-Ausdruck nicht unterstützt. Sie können nur JSON-Protokollereignisse parsen, die nicht mehr als 200 Protokollereignisfelder enthalten. Wenn Sie verschachtelte JSON-Felder parsen, müssen Sie den regulären Ausdruck in Ihrer Abfrage so formatieren, dass er dem Format Ihres JSON-Protokollereignisses entspricht.
Beispiele des parse-Befehls
Verwenden Sie einen globalen Ausdruck zum Extrahieren der Felder @user
, @method
und @latency
aus dem Protokollfeld @message
und zur Rückgabe der durchschnittlichen Latenz für jede eindeutige Kombination aus @method
und @user
.
parse @message "user=*, method:*, latency := *" as @user, @method, @latency | stats avg(@latency) by @method, @user
Verwenden Sie einen regulären Ausdruck zum Extrahieren der Felder @user2
, @method2
und @latency2
aus dem Protokollfeld @message
und zur Rückgabe der durchschnittlichen Latenz für jede eindeutige Kombination aus @method2
und @user2
.
parse @message /user=(?<user2>.*?), method:(?<method2>.*?), latency := (?<latency2>.*?)/ | stats avg(latency2) by @method2, @user2
Extrahiert die Felder loggingTime
, loggingType
und loggingMessage
, filtert nach Protokollereignissen, die die Zeichenfolgen ERROR
oder INFO
enthalten, und zeigt dann nur die Felder loggingMessage
und loggingType
für Ereignisse an, die die Zeichenfolge ERROR
enthalten.
FIELDS @message | PARSE @message "* [*] *" as loggingTime, loggingType, loggingMessage | FILTER loggingType IN ["ERROR", "INFO"] | DISPLAY loggingMessage, loggingType = "ERROR" as isError