parse - Amazon CloudWatch -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

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.

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 von verschachtelten JSON-Feldern 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