使用代理程式預處理資料 - Amazon 數據 Firehose

將亞馬遜資料 Firehose 串流交付到 Amazon S3 中的 Apache 冰山表格已處於預覽狀態,且可能會有所變更。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用代理程式預處理資料

代理程式可以預先處理從受監控檔案剖析的記錄,然後再將這些記錄傳送至 Firehose 串流。您可以將 dataProcessingOptions 組態設定新增到您的檔案流程以啟用此功能。可新增一個或多個處理選項,這些選項將依照指定的順序執行。

代理程式支援以下處理選項。由於代理程式是開放原始碼,因此您可進一步開發和擴展其處理選項。您可以從 Kinesis 代理程式下載代理程式。

處理選項
SINGLELINE

移除換行字元、前方空格及結尾空格,藉此將多列記錄轉換為單列記錄。

{ "optionName": "SINGLELINE" }
CSVTOJSON

將記錄從分隔符分隔格式轉換為格式JSON。

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

[必要] 用作每個JSON索引鍵值組中索引鍵的欄位名稱。例如,如果您指定 ["f1", "f2"],記錄「v1、v2」將轉換為 {"f1":"v1","f2":"v2"}

delimiter

在記錄做為分隔符號的字串。預設為逗號 (,)。

LOGTOJSON

將記錄從日誌格式轉換為JSON格式。支援的日誌格式為 Apache Common LogApache Combined LogApache Error Log、以及 RFC3164 Syslog

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

[必要] 日誌項目格式。以下是可能的值:

  • COMMONAPACHELOG – Apache Common Log 格式。根據預設,每個日誌項目皆有以下模式:「%{host} %{ident} %{authuser} [%{datetime}] \"%{request}\" %{response} %{bytes}」。

  • COMBINEDAPACHELOG – Apache Combined Log 格式。根據預設,每個日誌項目皆有以下模式:「%{host} %{ident} %{authuser} [%{datetime}] \"%{request}\" %{response} %{bytes} %{referrer} %{agent}」。

  • APACHEERRORLOG – Apache Error Log 格式。根據預設,每個日誌項目皆有以下模式:「[%{timestamp}] [%{module}:%{severity}] [pid %{processid}:tid %{threadid}] [client: %{client}] %{message}」。

  • SYSLOG— 系統RFC3164日誌格式。根據預設,每個日誌項目皆有以下模式:「%{timestamp} %{hostname} %{program}[%{processid}]: %{message}」。

matchPattern

覆寫指定日誌格式的預設模式。如果日誌項目使用自訂格式,則使用此設定從日誌項目擷取值。若您指定 matchPattern,您也必須指定 customFieldNames

customFieldNames

用作每JSON個鍵值對中鍵的自定義字段名稱。您可以使用此設定來定義從 matchPattern 擷取的值的欄位名稱,或覆寫預先定義的日誌格式的預設欄位名稱。

範例 : LOGTOJSON 配置

以下是轉換成JSON格式的 Apache 通用記錄項目的LOGTOJSON組態範例:

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

轉換前:

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

轉換後:

{"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"}
範例 :使用自訂欄位進行LOGTOJSON組態

以下是另一個 LOGTOJSON 組態範例:

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

使用此組態設定時,先前範例中相同的 Apache 通用記錄項目會轉換為JSON格式,如下所示:

{"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"}
範例 :轉換 Apache Common Log 項目

下列流程設定會以JSON格式將 Apache 通用記錄項目轉換為單行記錄:

{ "flows": [ { "filePattern": "/tmp/app.log*", "deliveryStream": "my-delivery-stream", "dataProcessingOptions": [ { "optionName": "LOGTOJSON", "logFormat": "COMMONAPACHELOG" } ] } ] }
範例 :轉換多列記錄

以下流程組態剖析第一行從「[SEQUENCE=」開始的多列記錄。每筆記錄都會先轉換為單列記錄。然後,根據定位鍵分隔符號從記錄中擷取值。擷取的值會對映至指定的customFieldNames值,以形成JSON格式的單行記錄。

{ "flows": [ { "filePattern": "/tmp/app.log*", "deliveryStream": "my-delivery-stream", "multiLineStartPattern": "\\[SEQUENCE=", "dataProcessingOptions": [ { "optionName": "SINGLELINE" }, { "optionName": "CSVTOJSON", "customFieldNames": [ "field1", "field2", "field3" ], "delimiter": "\\t" } ] } ] }
範例 :LOGTOJSON配置匹配模式

以下是轉換為JSON格式的 Apache 通用記錄項目的LOGTOJSON組態範例,最後一個欄位 (位元組) 省略:

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

轉換前:

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

轉換後:

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