Preelabora i dati con gli agenti - Amazon Data Firehose

La distribuzione di stream Amazon Data Firehose ad Apache Iceberg Tables in Amazon S3 è in anteprima ed è soggetta a modifiche.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Preelabora i dati con gli agenti

L'agente può preelaborare i record analizzati dai file monitorati prima di inviarli allo stream Firehose. È possibile abilitare questa funzionalità aggiungendo le impostazioni di configurazione dataProcessingOptions al flusso di file. Si possono aggiungere una o più opzioni di elaborazione, che verranno eseguite nell'ordine specificato.

L'agente supporta le seguenti opzioni di elaborazione. Poiché l'agente è open source, è possibile sviluppare ulteriormente e ampliare le opzioni di elaborazione. Puoi scaricare l'agente da Kinesis Agent.

Opzioni di elaborazione
SINGLELINE

Converte un record a più righe in un record a riga singola rimuovendo i caratteri di nuova riga, gli spazi iniziali e finali.

{ "optionName": "SINGLELINE" }
CSVTOJSON

Converte un record dal formato separato da delimitatori al formato. JSON

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

[Obbligatorio] I nomi dei campi usati come chiavi in ogni JSON coppia chiave-valore. Ad esempio, se specifichi ["f1", "f2"], il record "v1, v2" viene convertito in {"f1":"v1","f2":"v2"}.

delimiter

La stringa utilizzata come delimitatore nel record. L'impostazione predefinita è una virgola (,).

LOGTOJSON

Converte un record da un formato di registro a un JSON altro. I formati di log supportati sono Apache Common Log, Apache Combined Log, Apache Error Log e RFC3164 Syslog.

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

[Obbligatorio] Il formato di inserimento dei log. I seguenti sono i valori possibili:

  • COMMONAPACHELOG - Il formato Apache Common Log. Ogni voce di log ha il seguente modello come impostazione predefinita: "%{host} %{ident} %{authuser} [%{datetime}] \"%{request}\" %{response} %{bytes}".

  • COMBINEDAPACHELOG: il formato Apache Combined Log. Ogni voce di log ha il seguente modello come impostazione predefinita: "%{host} %{ident} %{authuser} [%{datetime}] \"%{request}\" %{response} %{bytes} %{referrer} %{agent}".

  • APACHEERRORLOG: il formato Apache Error Log. Ogni voce di log ha il seguente modello come impostazione predefinita: "[%{timestamp}] [%{module}:%{severity}] [pid %{processid}:tid %{threadid}] [client: %{client}] %{message}".

  • SYSLOG— Il formato RFC3164 Syslog. Ogni voce di log ha il seguente modello come impostazione predefinita: "%{timestamp} %{hostname} %{program}[%{processid}]: %{message}".

matchPattern

Ignora il modello predefinito per il formato di log specificato. Utilizza questa impostazione per estrarre valori dalle voci di log se utilizzano un formato personalizzato. Se si specifica matchPattern, è necessario specificare anche customFieldNames.

customFieldNames

I nomi dei campi personalizzati utilizzati come chiavi in ogni coppia JSON chiave-valore. Puoi utilizzare questa impostazione per definire i nomi dei campi per i valori estratti da matchPattern oppure sovrascrivere i nomi dei campi predefiniti dei formati di log predefiniti.

Esempio : LOGTOJSON Configurazione

Ecco un esempio di LOGTOJSON configurazione per una voce di Apache Common Log convertita in JSON formato:

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

Prima della conversione:

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

Dopo la conversione:

{"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"}
Esempio : LOGTOJSON Configurazione con campi personalizzati

Ecco un altro esempio di configurazione LOGTOJSON:

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

Con questa impostazione di configurazione, la stessa voce di Apache Common Log dell'esempio precedente viene convertita nel JSON formato seguente:

{"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"}
Esempio : convertire la voce Apache Common Log

La seguente configurazione di flusso converte una voce di Apache Common Log in un record a riga singola nel formato: JSON

{ "flows": [ { "filePattern": "/tmp/app.log*", "deliveryStream": "my-delivery-stream", "dataProcessingOptions": [ { "optionName": "LOGTOJSON", "logFormat": "COMMONAPACHELOG" } ] } ] }
Esempio : convertire record a più righe

La seguente configurazione del flusso analizza i record a più righe la cui prima riga inizia con "[SEQUENCE=". Ogni record viene convertito in un record a riga singola. Quindi, i valori vengono estratti dal record in base a un delimitatore di schede. I valori estratti vengono mappati su customFieldNames valori specificati per formare un record a riga singola in formato. JSON

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

Ecco un esempio di LOGTOJSON configurazione per una voce di Apache Common Log convertita in JSON formato, con l'ultimo campo (byte) omesso:

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

Prima della conversione:

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

Dopo la conversione:

{"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"}