Daten mit Agenten vorverarbeiten - Amazon Data Firehose

Die Bereitstellung von Amazon Data Firehose-Streams an Apache Iceberg Tables in Amazon S3 befindet sich in der Vorschauversion und kann sich ändern.

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.

Daten mit Agenten vorverarbeiten

Der Agent kann die aus den überwachten Dateien analysierten Datensätze vorverarbeiten, bevor er sie an Ihren Firehose-Stream sendet. Sie können dieses Feature aktivieren, indem Sie Ihrem Dateifluss die Konfigurationseinstellung dataProcessingOptions hinzufügen. Sie können eine oder mehrere Verarbeitungsoptionen hinzufügen. Diese werden in der angegebenen Reihenfolge ausgeführt.

Der Agent unterstützt die folgenden Verarbeitungsoptionen. Der Agent ist ein Open-Source-Tool, sodass Sie dessen Verarbeitungsoptionen optimieren und erweitern können. Sie können den Agenten von Kinesis Agent herunterladen.

Verarbeitungsoptionen
SINGLELINE

Konvertiert einen mehrzeiligen Datensatz in einen einzeiligen Datensatz, indem Zeilenumbruchzeichen sowie vorangestellte und folgende Leerzeichen entfernt werden.

{ "optionName": "SINGLELINE" }
CSVTOJSON

Konvertiert einen Datensatz von einem durch Trennzeichen getrennten Format in ein Format. JSON

{ "optionName": "CSVTOJSON", "customFieldNames": [ "field1", "field2", ... ], "delimiter": "yourdelimiter" }
customFieldNames

[Erforderlich] Die Feldnamen, die als Schlüssel in jedem JSON Schlüssel-Wert-Paar verwendet werden. Wenn Sie beispielsweise ["f1", "f2"] angeben, wird der Datensatz „v1, v2“ in {"f1":"v1","f2":"v2"} konvertiert.

delimiter

Die Zeichenfolge, die als Trennzeichen im Datensatz verwendet wird. Standardmäßig wird ein Komma (,) verwendet.

LOGTOJSON

Konvertiert einen Datensatz von einem Protokollformat in ein JSON Format. Folgende Protokollformate werden unterstützt: Apache Common Log, Apache Combined Log, Apache Error Log und RFC3164 Syslog.

{ "optionName": "LOGTOJSON", "logFormat": "logformat", "matchPattern": "yourregexpattern", "customFieldNames": [ "field1", "field2", ] }
logFormat

[Erforderlich] Das Format des Protokolleintrags. Folgende Werte sind möglich:

  • COMMONAPACHELOG – Das Apache-Common-Log-Format. Jeder Protokolleintrag weist standardmäßig das folgende Muster auf: „%{host} %{ident} %{authuser} [%{datetime}] \"%{request}\" %{response} %{bytes}“.

  • COMBINEDAPACHELOG – Das Apache-Combined-Log-Format. Jeder Protokolleintrag weist standardmäßig das folgende Muster auf: „%{host} %{ident} %{authuser} [%{datetime}] \"%{request}\" %{response} %{bytes} %{referrer} %{agent}“.

  • APACHEERRORLOG – Das Apache-Error-Log-Format. Jeder Protokolleintrag weist standardmäßig das folgende Muster auf: „[%{timestamp}] [%{module}:%{severity}] [pid %{processid}:tid %{threadid}] [client: %{client}] %{message}“.

  • SYSLOG— Das RFC3164 Syslog-Format. Jeder Protokolleintrag weist standardmäßig das folgende Muster auf: „%{timestamp} %{hostname} %{program}[%{processid}]: %{message}“.

matchPattern

Überschreibt das Standardmuster für das angegebene Protokollformat. Verwenden Sie diese Einstellung, um Werte aus Protokolleinträgen zu extrahieren, wenn sie ein benutzerdefiniertes Format verwenden. Wenn Sie matchPattern angeben, müssen Sie auch customFieldNames angeben.

customFieldNames

Die benutzerdefinierten Feldnamen, die als Schlüssel in jedem JSON Schlüssel-Wert-Paar verwendet werden. Mit dieser Einstellung können Sie Feldnamen für Werte definieren, die aus matchPattern extrahiert wurden, oder die Standardfeldnamen von vordefinierten Protokollformaten überschreiben.

Beispiel : LOGTOJSON Konfiguration

Hier ist ein Beispiel für eine LOGTOJSON Konfiguration für einen Apache Common Log-Eintrag, der in ein JSON Format umgewandelt wurde:

{ "optionName": "LOGTOJSON", "logFormat": "COMMONAPACHELOG" }

Vor der Konvertierung:

64.242.88.10 - - [07/Mar/2004:16:10:02 -0800] "GET /mailman/listinfo/hsdivision HTTP/1.1" 200 6291

Nach der Konvertierung:

{"host":"64.242.88.10","ident":null,"authuser":null,"datetime":"07/Mar/2004:16:10:02 -0800","request":"GET /mailman/listinfo/hsdivision HTTP/1.1","response":"200","bytes":"6291"}
Beispiel : LOGTOJSON Konfiguration mit benutzerdefinierten Feldern

Im Folgenden ein weiteres Beispiel einer LOGTOJSON-Konfiguration:

{ "optionName": "LOGTOJSON", "logFormat": "COMMONAPACHELOG", "customFieldNames": ["f1", "f2", "f3", "f4", "f5", "f6", "f7"] }

Mit dieser Konfigurationseinstellung wird derselbe Apache Common Log-Eintrag aus dem vorherigen Beispiel wie folgt in JSON das Format konvertiert:

{"f1":"64.242.88.10","f2":null,"f3":null,"f4":"07/Mar/2004:16:10:02 -0800","f5":"GET /mailman/listinfo/hsdivision HTTP/1.1","f6":"200","f7":"6291"}
Beispiel : Konvertieren eines Apache Common Log-Eintrags

Die folgende Ablaufkonfiguration konvertiert einen Apache Common Log-Eintrag in einen einzeiligen Datensatz im JSON Format:

{ "flows": [ { "filePattern": "/tmp/app.log*", "deliveryStream": "my-delivery-stream", "dataProcessingOptions": [ { "optionName": "LOGTOJSON", "logFormat": "COMMONAPACHELOG" } ] } ] }
Beispiel : Konvertieren mehrzeiliger Datensätze

Bei der folgenden Ablaufkonfiguration werden mehrzeilige Datensätze analysiert, deren erste Zeile mit „[SEQUENCE=“ beginnt. Jeder Datensatz wird in einen einzeiligen Datensatz konvertiert. Anschließend werden Werte aus dem Datensatz basierend auf einem Tabulatortrennzeichen extrahiert. Extrahierte Werte werden bestimmten customFieldNames Werten zugeordnet, sodass ein einzeiliger Datensatz im Format entsteht. JSON

{ "flows": [ { "filePattern": "/tmp/app.log*", "deliveryStream": "my-delivery-stream", "multiLineStartPattern": "\\[SEQUENCE=", "dataProcessingOptions": [ { "optionName": "SINGLELINE" }, { "optionName": "CSVTOJSON", "customFieldNames": [ "field1", "field2", "field3" ], "delimiter": "\\t" } ] } ] }
Beispiel : LOGTOJSON Konfiguration mit Match Pattern

Hier ist ein Beispiel für eine LOGTOJSON Konfiguration für einen Apache Common Log-Eintrag, der in ein JSON Format konvertiert wurde, wobei das letzte Feld (Byte) weggelassen wurde:

{ "optionName": "LOGTOJSON", "logFormat": "COMMONAPACHELOG", "matchPattern": "^([\\d.]+) (\\S+) (\\S+) \\[([\\w:/]+\\s[+\\-]\\d{4})\\] \"(.+?)\" (\\d{3})", "customFieldNames": ["host", "ident", "authuser", "datetime", "request", "response"] }

Vor der Konvertierung:

123.45.67.89 - - [27/Oct/2000:09:27:09 -0400] "GET /java/javaResources.html HTTP/1.0" 200

Nach der Konvertierung:

{"host":"123.45.67.89","ident":null,"authuser":null,"datetime":"27/Oct/2000:09:27:09 -0400","request":"GET /java/javaResources.html HTTP/1.0","response":"200"}