View a markdown version of this page

parse - CloudWatch Amazon-Protokolle

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

Dient parse zum Extrahieren von Daten aus einem Protokollfeld und zum Erstellen extrahierter Felder, die Sie in Ihrer Abfrage verarbeiten können. Der parse Befehl unterstützt vier Modi: Globausdrücke, reguläre Ausdrücke, logfmt und CSV.

Wenn weggelassen fieldName wird, @message wird standardmäßig verwendet. Sie können jedes benannte Feld analysieren, indem Sie den Feldnamen als erstes Argument angeben.

Wenn ein Protokollereignis nicht dem angegebenen Muster entspricht, wird es trotzdem in den Ergebnissen angezeigt, jedoch ohne die extrahierten Felder.

Glob-Modus

Verwenden Sie Platzhalter (*) als Platzhalter für Werte, die Sie extrahieren möchten, und weisen Sie sie benannten Feldern mit zu. as

Syntax

parse fieldName "pattern" as alias1, alias2

Die Anzahl der * Platzhalter muss der Anzahl der Aliase entsprechen.

Beispiele

parse @message "user=*, method:*, latency := *" as @user, @method, @latency | stats avg(@latency) by @method, @user
parse @logStream "*/*/*/*" as env, service, instance, shard | stats count(*) by env, service

Verkettete Analyse

Extrahieren Sie ein Feld und analysieren Sie das entpackte Feld dann weiter.

parse @message "url=*" as url | parse url "/api/*/users/*" as apiVersion, userId | display apiVersion, userId

Regex-Modus

Verwenden Sie einen regulären Ausdruck mit benannten Erfassungsgruppen, um Felder zu extrahieren. Hinweise zur Syntax regulärer Ausdrücke finden Sie unterUnterstützte Syntax für reguläre Ausdrücke (Regex).

Syntax

parse fieldName /regex/

Verwenden Sie benannte Erfassungsgruppen(?<name>...), um extrahierte Felder zu definieren.

Beispiele

Verwenden Sie benannte Erfassungsgruppen, um Felder zu extrahieren

parse @message /user=(?<user2>.*?), method:(?<method2>.*?), latency := (?<latency2>.*?)/ | stats avg(latency2) by @method2, @user2

Verwenden Sie eine benannte Erfassungsgruppe, um die ENI aus einem VPC-Flow-Log zu extrahieren

parse @message /(?<NetworkInterface>eni-.*?) / | display NetworkInterface, @message

Multi-match mode

Verwenden Sie den Multi-Match-Modus, um alle Treffer eines regulären Ausdrucks aus einem Feld zu extrahieren, wodurch mehrere Zeilen pro Protokollereignis erzeugt werden. Fügen Sie das Schlüsselwort multi nach dem Regex-Muster hinzu.

Syntax

parse fieldName /regex/ multi

Beispiele

Extrahieren Sie alle IP-Adressen aus einer Protokollzeile (Multi-Match)

parse @message /(\d+\.\d+\.\d+\.\d+)/ as ip_addr multi | stats count(*) by ip_addr

Logfmt-Modus

Wird verwendetparse logfmt, um Log-Zeilen im Logfm-Format in Schlüssel-Wert-Paare zu analysieren. Logfmt ist ein strukturiertes Logging-Format, bei dem jede Zeile Paare enthält, die durch Leerzeichen getrennt sind. key=value

Syntax

parse fieldName logfmt as alias

Das Ergebnis ist eine Map, auf die Sie mit Punktnotation zugreifen (z. B.,lf.level). lf.msg

Beispiele

parse @message logfmt as lf | filter lf.level = "error" | display lf.msg, lf.duration
parse @message logfmt as lf | stats count(*) by lf.host

CSV-Modus

Wird verwendetparse csv, um CSV-formatted Protokollzeilen in strukturierte Felder zu analysieren. Jeder durch Kommas getrennte Wert wird dem entsprechenden Alias zugewiesen.

Syntax

parse fieldName csv as alias1, alias2, alias3

Beispiele

parse @message csv as timestamp, level, message | filter level = "ERROR" | display timestamp, message
parse @message csv as host, method, path, status, duration | stats avg(duration) by method

Extraktion von JSON-Feldern

Wird json field=fieldName für die explizite verkettete JSON-Extraktion aus einem zuvor analysierten Objektfeld verwendet. Auf diese Weise können Sie verschachtelte Schlüssel aus einem strukturierten Feld extrahieren, ohne die Rohnachricht erneut zu analysieren.

Syntax

json field=fieldName "key.subkey" as alias

Beispiele

parse @message /(?<payload>\{.*\})/ as payload | json field=payload "user.name" as username | display username
json field=requestContext "identity.sourceIp" as caller_ip | stats count(*) by caller_ip