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
Wird verwendetparse, um Daten aus einem Protokollfeld zu extrahieren und extrahierte Felder zu erstellen, die Sie in Ihrer Abfrage verarbeiten können. Der parse Befehl unterstützt vier Modi: Glob-Ausdrücke, reguläre Ausdrücke, logfmt und CSV.
Wenn weggelassen fieldName wird, @message wird es standardmäßig verwendet. Sie können aus jedem benannten Feld eine Analyse durchführen, indem Sie den Feldnamen als erstes Argument angeben.
Wenn ein Protokollereignis nicht dem angegebenen Muster entspricht, wird es immer noch 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 zu. as
Syntax
parsefieldName"pattern" asalias1,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 extrahierte Feld anschließend 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 Capture-Gruppen, um Felder zu extrahieren. Hinweise zur Syntax regulärer Ausdrücke finden Sie unterUnterstützte Syntax für reguläre Ausdrücke (Regex).
Syntax
parsefieldName/regex/
Verwenden Sie benannte Capture-Gruppen(?<, um extrahierte Felder zu definieren.name>...)
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 Capture-Gruppe, um die ENI aus einem VPC-Flow-Protokoll zu extrahieren
parse @message /(?<NetworkInterface>eni-.*?) / | display NetworkInterface, @message
Multi-match mode
Verwenden Sie den Multi-Match-Modus, um alle Übereinstimmungen eines regulären Ausdrucks aus einem Feld zu extrahieren und so mehrere Zeilen pro Protokollereignis zu erzeugen. Fügen Sie das Schlüsselwort multi nach dem Regex-Muster hinzu.
Syntax
parsefieldName/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 Logzeilen im Logfmt-Format in Schlüssel-Wert-Paare zu zerlegen. Logfmt ist ein strukturiertes Logging-Format, bei dem jede Zeile durch Leerzeichen getrennte Paare enthält. key=value
Syntax
parsefieldNamelogfmt asalias
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 zerlegen. Jeder durch Kommas getrennte Wert wird dem entsprechenden Alias zugewiesen.
Syntax
parsefieldNamecsv asalias1,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
JSON-Feldextraktion
Wird json field= 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 analysieren zu müssen.fieldName
Syntax
json field=fieldName"key.subkey" asalias
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