本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
您可以使用的處理器
本節包含您可以在日誌事件轉換器中使用的每個處理器的相關資訊。處理器可以分類為剖析器、字串變動器、JSON 變動器和日期處理器。
內容
可設定的剖析器類型處理器
parseJSON
parseJSON 處理器會剖析 JSON 日誌事件,並在目的地下插入擷取的 JSON 鍵值對。如果您未指定目的地,處理器會將索引鍵/值對放在根節點下方。使用 parseJSON
做為第一個處理器時,您必須使用 @message
做為來源欄位來剖析整個日誌事件。在初始 JSON 剖析之後,您可以在後續處理器中操作特定欄位。
原始@message
內容不會變更,新的金鑰會新增至訊息。
欄位 | 描述 | 是否為必要? | 預設 | 限制 |
---|---|---|---|---|
source |
要剖析之日誌事件中 欄位的路徑。使用點符號來存取子欄位。例如 store.book |
否 |
|
長度上限:128 巢狀金鑰深度上限:3 |
目的地 |
剖析 JSON 的目的地欄位 |
否 |
|
長度上限:128 巢狀金鑰深度上限:3 |
範例
假設擷取的日誌事件如下所示:
{ "outer_key": { "inner_key": "inner_value" } }
然後,如果我們擁有此 parseJSON 處理器:
[ { "parseJSON": { "destination": "new_key" } } ]
轉換的日誌事件如下。
{ "new_key": { "outer_key": { "inner_key": "inner_value" } } }
grok
使用 grok 處理器來剖析和建構使用模式比對的非結構化資料。此處理器也可以從日誌訊息中擷取欄位。
欄位 | 描述 | 是否為必要? | 預設 | 限制 | 備註 |
---|---|---|---|---|---|
source |
在 上套用 Grok 比對的欄位路徑 |
否 |
|
長度上限:128 巢狀金鑰深度上限:3 |
|
match |
要比對日誌事件的 grok 模式 |
是 |
長度上限:512 grok 模式上限:20 某些 grok 模式類型具有個別用量限制。下列模式的任意組合最多可以使用五次:{URI, URIPARAM, URIPATHPARAM, SPACE, DATA, GREEDYDATA, GREEDYDATA_MULTILINE} Grok 模式不支援類型轉換。 對於常見日誌格式模式 (APACHE_ACCESS_LOG、NGINX_ACCESS_LOG、SYSLOG5424),在常見日誌模式之後僅支援 DATA、GREEDYDATA 或 GREEDYDATA_MULTILINE 模式。 |
Grok 模式的結構
這是支援的 grok 模式結構:
%{PATTERN_NAME:FIELD_NAME}
-
PATTERN_NAME:指符合特定資料類型的預先定義規則運算式。僅支援來自支援 grok 模式清單中的預先定義 grok 模式。不允許建立自訂模式。
-
FIELD_NAME:將名稱指派給擷取的值。
FIELD_NAME
是選用的,但如果您未指定此值,則會從轉換的日誌事件中捨棄擷取的資料。如果FIELD_NAME
使用虛線表示法 (例如 "parent.child"),則會將其視為 JSON 路徑。 -
類型轉換:不支援明確類型轉換。使用 TypeConverter 處理器來轉換 grok 擷取之任何值的資料類型。
若要建立更複雜的相符表達式,您可以結合多個 grok 模式。最多可結合 20 個 grok 模式以符合日誌事件。例如,此模式組合%{NUMBER:timestamp} [%{NUMBER:db} %{IP:client_ip}:%{NUMBER:client_port}] %{GREEDYDATA:data}
可用來從 Redis 慢速日誌項目擷取欄位,如下所示:
1629860738.123456 [0 127.0.0.1:6379] "SET" "key1" "value1"
Grok 範例
範例 1:使用 grok 從非結構化日誌中擷取欄位
範例日誌:
293750 server-01.internal-network.local OK "[Thread-000] token generated"
使用的轉換器:
[ { "grok": { "match": "%{NUMBER:version} %{HOSTNAME:hostname} %{NOTSPACE:status} %{QUOTEDSTRING:logMsg}" } } ]
輸出:
{ "version": "293750", "hostname": "server-01.internal-network.local", "status": "OK", "logMsg": "[Thread-000] token generated" }
範例日誌:
23/Nov/2024:10:25:15 -0900 172.16.0.1 200
使用的轉換器:
[ { "grok": { "match": "%{HTTPDATE:timestamp} %{IPORHOST:clientip} %{NUMBER:response_status}" } } ]
輸出:
{ "timestamp": "23/Nov/2024:10:25:15 -0900", "clientip": "172.16.0.1", "response_status": "200" }
範例 2:使用 grok 搭配 parseJSON 從 JSON 日誌事件擷取欄位
範例日誌:
{ "timestamp": "2024-11-23T16:03:12Z", "level": "ERROR", "logMsg": "GET /page.html HTTP/1.1" }
使用的轉換器:
[ { "parseJSON": {} }, { "grok": { "source": "logMsg", "match": "%{WORD:http_method} %{NOTSPACE:request} HTTP/%{NUMBER:http_version}" } } ]
輸出:
{ "timestamp": "2024-11-23T16:03:12Z", "level": "ERROR", "logMsg": "GET /page.html HTTP/1.1", "http_method": "GET", "request": "/page.html", "http_version": "1.1" }
範例 3:FIELD_NAME 中具有虛線註釋的 Grok 模式
範例日誌:
192.168.1.1 GET /index.html?param=value 200 1234
使用的轉換器:
[ { "grok": { "match": "%{IP:client.ip} %{WORD:method} %{URIPATHPARAM:request.uri} %{NUMBER:response.status} %{NUMBER:response.bytes}" } } ]
輸出:
{ "client": { "ip": "192.168.1.1" }, "method": "GET", "request": { "uri": "/index.html?param=value" }, "response": { "status": "200", "bytes": "1234" } }
支援的 grok 模式
下表列出grok
處理器支援的模式。
一般 grok 模式
Grok 模式 | 描述 | 模式上限 | 範例 |
---|---|---|---|
USERNAME 或 USER | 符合一個或多個字元,可包含小寫字母 (a-z)、大寫字母 (A-Z)、數字 (0-9)、點 (.)、底線 (_) 或連字號 (-) | 20 |
輸入: 模式: 輸出: |
INT | 符合選用的加號或減號,後面接著一個或多個數字。 | 20 |
輸入: 模式: 輸出: |
BASE10NUM | 比對整數或浮點數與選用的符號和小數點 | 20 |
輸入: 模式: 輸出: |
BASE16NUM | 將小數和十六進位數字與選用的符號 (+ 或 -) 和選用的 0x 字首進行比對 | 20 |
輸入: 模式: 輸出: |
POSINT | 比對不含前導零的整數,包含一或多個數字 (1-9 後接 0-9) | 20 |
輸入: 模式: 輸出: |
NONNEGINT | 符合任何整數 (包含一或多個數字 0-9),包括零和開頭為零的數字。 | 20 |
輸入: 模式: 輸出: |
WORD | 比對由一或多個單字字元 (\w) 組成的完整單字,包括字母、數字和底線 | 20 |
輸入: 模式: 輸出: |
NOTSPACE | 符合一或多個非空格字元。 | 5 |
輸入: 模式: 輸出: |
SPACE | 符合零或多個空格字元。 | 5 |
輸入: 模式: 輸出: |
DATA | 符合任何字元 (新行除外) 零次或多次,非貪婪。 | 5 |
輸入: 模式: 輸出: |
GREEDYDATA | 符合任何字元 (新行除外) 零次或多次,歡迎。 | 5 |
輸入: 模式: 輸出: |
GREEDYDATA_MULTILINE | 符合任何角色 (包括換行) 零次或多次,歡迎。 | 1 |
輸入:
模式: 輸出: |
QUOTEDSTRING | 將引號字串 (單引號或雙引號) 與逸出字元相符。 | 20 |
輸入: 模式: 輸出: |
UUID | 符合標準 UUID 格式:8 個十六進位字元,後面接著三個 4 個十六進位字元的群組,並以 12 個十六進位字元結尾,全部以連字號分隔。 | 20 |
輸入: 模式: 輸出: |
URN | 符合 URN (統一資源名稱) 語法。 | 20 |
輸入: 模式: 輸出: |
AWS grok 模式
模式 | 描述 | 模式上限 | 範例 |
---|---|---|---|
ARN |
比對 AWS Amazon Resource Name (ARNs) |
5 |
輸入: 模式: 輸出: |
網路 grok 模式
Grok 模式 | 描述 | 模式上限 | 範例 |
---|---|---|---|
CISCOMAC | 符合 4-4-4 十六進位格式的 MAC 地址。 | 20 |
輸入: 模式: 輸出: |
WINDOWSMAC | 將十六進位格式的 MAC 地址與連字號相符 | 20 |
輸入: 模式: 輸出: |
COMMONMAC | 比對十六進位格式的 MAC 地址與冒號。 | 20 |
輸入: 模式: 輸出: |
MAC | 符合其中一個 CISCOMAC、WINDOWSMAC 或 COMMONMAC grok 模式 | 20 |
輸入: 模式: 輸出: |
IPV6 | 符合 IPv6 地址,包括壓縮表單和 IPv4-mapped IPv6 地址。 | 5 |
輸入: 模式: 輸出: |
IPV4 | 符合 IPv4 地址。 | 20 |
輸入: 模式: 輸出: |
IP | 符合 %{IPv6IPv6} 支援的 IPv6 地址或 %{IPv4} 支援的 IPv4 地址IPv4 | 5 |
輸入: 模式: 輸出: |
HOSTNAME 或 HOST | 符合網域名稱,包括子網域 | 5 |
輸入: 模式: 輸出: |
IPORHOST | 符合主機名稱或 IP 地址 | 5 |
輸入: 模式: 輸出: |
HOSTPORT | 符合 %{IPORHOST} 模式支援的 IP 地址或主機名稱,後面接著冒號和連接埠號碼,在輸出中擷取連接埠做為「PORT」。 | 5 |
輸入: 模式: 輸出: |
URIHOST | 符合 %{IPORHOST} 模式支援的 IP 地址或主機名稱,選擇性地後面接著冒號和連接埠號碼,如果有的話,擷取連接埠為「連接埠」。 | 5 |
輸入: 模式: 輸出: |
路徑grok 模式
Grok 模式 | 描述 | 模式上限 | 範例 |
---|---|---|---|
UNIXPATH | 符合 URL 路徑,可能包括查詢參數。 | 20 |
輸入: 模式: 輸出: |
WINPATH | 符合 Windows 檔案路徑。 | 5 |
輸入: 模式: 輸出: |
PATH | 符合 URL 或 Windows 檔案路徑 | 5 |
輸入: 模式: 輸出: |
TTY | 比對終端機和虛擬終端機的 Unix 裝置路徑。 | 20 |
輸入: 模式: 輸出: |
URIPROTO | 符合字母,選擇性後接加號 (+) 字元和其他字母或加號 (+) 字元 | 20 |
輸入: 模式: 輸出: |
URIPATH | 符合 URI 的路徑元件 | 20 |
輸入: 模式: 輸出: |
URIPARAM | 符合 URL 查詢參數 | 5 |
輸入: 模式: 輸出: |
URIPATHPARAM | 選擇性地比對 URI 路徑,後面接著查詢參數 | 5 |
輸入: 模式: 輸出: |
URI | 符合完整的 URI | 5 |
輸入: 模式: 輸出: |
日期和時間 grok 模式
Grok 模式 | 描述 | 模式上限 | 範例 |
---|---|---|---|
MONTH | 將完整或縮寫的英文月份名稱配對為完整單字 | 20 |
輸入: 模式: 輸出: 輸入: 模式: 輸出: |
MONTHNUM | 比對從 1 到 12 的月份編號,單位數月份的選用前導零。 | 20 |
輸入: 模式: 輸出: 輸入: 模式: 輸出: |
MONTHNUM2 | 符合從 01 到 12 的兩位數月編號。 | 20 |
輸入: 模式: 輸出: |
週一 | 比對月份中從 1 到 31 的日期,以及選用的前導零。 | 20 |
輸入: 模式: 輸出: |
YEAR | 符合兩或四位數的年份 | 20 |
輸入: 模式: 輸出: 輸入: 模式: 輸出: |
DAY | 符合完整或縮寫的日名稱。 | 20 |
輸入: 模式: 輸出: |
HOUR | 符合 24 小時格式的小時數與選用的前導零 (0)0-23。 | 20 |
輸入: 模式: 輸出: |
MINUTE | 符合分鐘數 (00-59)。 | 20 |
輸入: 模式: 輸出: |
SECOND | 比對代表秒數 (0)0-60 的數字,選擇性地後接小數點或冒號,以及小數分鐘的一個或多個數字 | 20 |
輸入: 模式: 輸出: 輸入: 模式: 輸出: 輸入: 模式: 輸出: |
TIME | 以小時、分鐘和秒的格式 (H)H:mm:(s) 比對時間格式。秒包括閏秒 (0)0-60。 | 20 |
輸入: 模式: 輸出: |
DATE_US | 符合 (M)M/(d)d/(yy)yy 或 (M)M-(d)d-(yy)yy 格式的日期。 | 20 |
輸入: 模式: 輸出: 輸入: 模式: 輸出: |
DATE_EU | 符合 (d)d/(M)M/(yy)yy、(d)d-(M)M-(yy)yy 或 (d)d.(M)M.(yy)yy。 | 20 |
輸入: 模式: 輸出: 輸入: 模式: 輸出: |
ISO8601_TIMEZONE | 將 UTC 位移 'Z' 或時區位移與選用冒號比對,格式為 【+-】(H)H(:)mm。 | 20 |
輸入: 模式: 輸出: 輸入: 模式: 輸出: 輸入: 模式: 輸出: |
ISO8601_SECOND | 比對代表秒數 (0)0-60 的數字,選擇性地後接小數點或冒號,以及小數秒的一個或多個數字 | 20 |
輸入: 模式: 輸出: |
TIMESTAMP_ISO8601 | 比對 ISO8601 日期時間格式 (yy)yy-(M)M-(d)dT(H)H:mm:((s)s)(Z|【+-】(H)H:mm) 與選用的秒和時區。 | 20 |
輸入: 模式: 輸出: 輸入: 模式: 輸出: 輸入: 模式: 輸出: |
DATE | 使用 %{DATE_US} 比對美國格式的日期,或使用 %{DATE_EU} 比對歐洲格式的日期 | 20 |
輸入: 模式: 輸出: 輸入: 模式: 輸出: |
DATESTAMP | 符合 %{DATE} 後接 %{TIME} 模式,以空格或連字號分隔。 | 20 |
輸入: 模式: 輸出: |
TZ | 符合常用時區縮寫 (PST、PDT、MST、MDT、CST CDT、EST、EDT、UTC)。 | 20 |
輸入: 模式: 輸出: |
DATESTAMP_RFC822 | 符合格式的日期和時間:Day MonthName (D)D (YY)YY (H)H:mm:(s)s 時區 | 20 |
輸入: 模式: 輸出: 輸入: 模式: 輸出: |
DATESTAMP_RFC2822 | 符合 RFC2822 日期時間格式:Day, (d)d MonthName (yy)yy (H)H:mm:(s)s Z|【+-】(H)H:mm | 20 |
輸入: 模式: 輸出: 輸入: 模式: 輸出: |
DATESTAMP_OTHER | 符合格式的日期和時間:Day MonthName (d)d (H)H:mm:(s)s Timezone (yy)yy | 20 |
輸入: 模式: 輸出: |
DATESTAMP_EVENTLOG | 符合不含分隔符號的精簡日期時間格式:(yy)yyMM(d)d(H)Hmm(s)s | 20 |
輸入: 模式: 輸出: |
日誌 grok 模式
Grok 模式 | 描述 | 模式上限 | 範例 |
---|---|---|---|
LOGLEVEL | 符合不同大寫和縮寫中的標準日誌層級,包括下列項目:Alert/ALERT 、Trace/TRACE 、Debug/DEBUG 、Notice/NOTICE Info/INFO 、Warn/Warning/WARN/WARNING 、Err/Error/ERR/ERROR 、Crit/Critical/CRIT/CRITICAL 、Fatal/FATAL 、 Severe/SEVERE Emerg/Emergency/EMERG/EMERGENCY |
20 |
輸入: 模式: 輸出: |
HTTPDATE | 符合日誌檔案中常用的日期和時間格式。格式:(d)d/MonthName/(yy)yy:(H)H:mm:(s)s 時區 MonthName: 符合完整或縮寫的英文月份名稱 (範例:「Jan」或「January」) 時區: 符合 %{INT} grok 模式 | 20 |
輸入: 模式: 輸出: |
SYSLOGTIMESTAMP | 符合 MonthName (d)d (H)H:mm:(s)s MonthName 的日期格式:符合完整或縮寫的英文月份名稱 (範例:「1 月」或「1 月」) | 20 |
輸入: 模式: 輸出: |
PROG | 符合由字母、數字、點、底線、正斜線、百分比符號和連字號字元組成的程式名稱。 | 20 |
輸入: 模式: 輸出: |
SYSLOGPROG | 選擇性地比對 PROG grok 模式,後面接著方括號中的程序 ID。 | 20 |
輸入: 模式: 輸出: |
SYSLOGHOST | 符合 %{HOST} 或 %{IP} 模式 | 5 |
輸入: 模式: 輸出: |
SYSLOGFACILITY | 符合十進位格式的 syslog 優先順序。值應該以角括號括住 (<>)。 | 20 |
輸入: 模式: 輸出: |
常見日誌 grok 模式
您可以使用預先定義的自訂 grok 模式來比對 Apache、NGINX 和 Syslog Protocol (RFC 5424) 日誌格式。當您使用這些特定模式時,它們必須是相符組態中的第一個模式,而且前面沒有其他模式。此外,您只能使用一個 DATA 來追蹤它們。GREEDYDATA 或 GREEDYDATA_MULTILINE 模式。
Grok 模式 | 描述 | 模式上限 |
---|---|---|
APACHE_ACCESS_LOG |
符合 Apache 存取日誌 |
1 |
NGINX_ACCESS_LOG |
符合 NGINX 存取日誌 |
1 |
SYSLOG5424 |
符合 Syslog 通訊協定 (RFC 5424) 日誌 |
1 |
以下顯示使用這些常見日誌格式模式的有效和無效範例。
"%{NGINX_ACCESS_LOG} %{DATA}" // Valid "%{SYSLOG5424}%{DATA:logMsg}" // Valid "%{APACHE_ACCESS_LOG} %{GREEDYDATA:logMsg}" // Valid "%{APACHE_ACCESS_LOG} %{SYSLOG5424}" // Invalid (multiple common log patterns used) "%{NGINX_ACCESS_LOG} %{NUMBER:num}" // Invalid (Only GREEDYDATA and DATA patterns are supported with common log patterns) "%{GREEDYDATA:logMsg} %{SYSLOG5424}" // Invalid (GREEDYDATA and DATA patterns are supported only after common log patterns)
常見日誌格式範例
Apache 日誌範例
範例日誌:
127.0.0.1 - - [03/Aug/2023:12:34:56 +0000] "GET /page.html HTTP/1.1" 200 1234
轉換器:
[ { "grok": { "match": "%{APACHE_ACCESS_LOG}" } } ]
輸出:
{ "request": "/page.html", "http_method": "GET", "status_code": 200, "http_version": "1.1", "response_size": 1234, "remote_host": "127.0.0.1", "timestamp": "2023-08-03T12:34:56Z" }
NGINX 日誌範例
範例日誌:
192.168.1.100 - Foo [03/Aug/2023:12:34:56 +0000] "GET /account/login.html HTTP/1.1" 200 42 "https://www.amazon.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"
轉換器:
[ { "grok": { "match": "%{NGINX_ACCESS_LOG}" } } ]
輸出:
{ "request": "/account/login.html", "referrer": "https://www.amazon.com/", "agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36", "http_method": "GET", "status_code": 200, "auth_user": "Foo", "http_version": "1.1", "response_size": 42, "remote_host": "192.168.1.100", "timestamp": "2023-08-03T12:34:56Z" }
Syslog 通訊協定 (RFC 5424) 日誌範例
範例日誌:
<165>1 2003-10-11T22:14:15.003Z mymachine.example.com evntslog - ID47 [exampleSDID@32473 iut="3" eventSource= "Application" eventID="1011"][examplePriority@32473 class="high"]
轉換器:
[ { "grok": { "match": "%{SYSLOG5424}" } } ]
輸出:
{ "pri": 165, "version": 1, "timestamp": "2003-10-11T22:14:15.003Z", "hostname": "mymachine.example.com", "app": "evntslog", "msg_id": "ID47", "structured_data": "exampleSDID@32473 iut=\"3\" eventSource= \"Application\" eventID=\"1011\"", "message": "[examplePriority@32473 class=\"high\"]" }
parseToOCSF
parseToOCSF 處理器會將日誌轉換為開放網路安全結構描述架構 (OCSF)
原始@message
內容不會變更,新的金鑰會新增至訊息。
欄位 | 描述 | 是否為必要? | 預設 | 限制 |
---|---|---|---|---|
eventSource |
產生將使用此處理器轉換之日誌事件的服務或程序。有效值如下:
|
是 |
- |
- |
ocsfVersion |
用於轉換日誌事件的 OCSF 結構描述版本。目前唯一支援的值是 V1.1 |
是 |
|
- |
範例
下列範例會將 Amazon VPC 流程日誌轉換為 OCSF 格式。
[ "parseToOCSF": { eventSource: "VPCFlow", version: "V1.1" } ]
csv
csv 處理器會將逗號分隔值 (CSV) 從日誌事件剖析為資料欄。
欄位 | 描述 | 是否為必要? | 預設 | 限制 |
---|---|---|---|---|
source |
要剖析之日誌事件中 欄位的路徑 |
否 |
|
長度上限:128 巢狀金鑰深度上限:3 |
分隔符號 |
用來分隔原始逗號分隔值日誌事件中每個資料欄的字元 |
否 |
|
長度上限:1 |
quoteCharacter |
用作單一資料欄文字限定詞的字元 |
否 |
|
長度上限:1 |
欄 |
要用於轉換日誌事件中資料欄的名稱清單。 |
否 |
|
CSV 資料欄上限:100 長度上限:128 巢狀金鑰深度上限:3 |
範例
假設擷取日誌事件的一部分如下所示:
'Akua Mansa',28,'New York, USA'
假設我們僅使用 csv 處理器:
[ "csv": { "delimiter": ",", "quoteCharacter": ":"" } ]
轉換的日誌事件如下。
{ "column_1": "Akua Mansa", "column_2": "28", "column_3": "New York: USA" }
parseKeyValue
使用 parseKeyValue 處理器將指定的欄位剖析為鍵/值對。您可以使用下列選項自訂處理器來剖析欄位資訊。
欄位 | 描述 | 是否為必要? | 預設 | 限制 |
---|---|---|---|---|
source |
要剖析之日誌事件中 欄位的路徑 |
否 |
|
長度上限:128 巢狀金鑰深度上限:3 |
目的地 |
要將擷取的鍵/值對放入其中的目的地欄位 |
否 |
長度上限:128 |
|
fieldDelimiter |
在原始日誌事件的鍵值對之間使用的欄位分隔符號字串 |
否 |
|
長度上限:128 |
keyValueDelimiter |
在轉換日誌事件中每對索引鍵和值之間使用的分隔符號字串 |
否 |
|
長度上限:128 |
nonMatchValue |
當鍵/值對未成功分割時,要插入結果中值欄位的值。 |
否 |
長度上限:128 |
|
keyPrefix |
如果您想要新增字首所有轉換的金鑰,請在此處指定它。 |
否 |
長度上限:128 |
|
overwriteIfExists |
如果目的地金鑰已存在,是否覆寫該值 |
否 |
|
範例
採用下列範例日誌事件:
key1:value1!key2:value2!key3:value3!key4
假設我們使用下列處理器組態:
[ { "parseKeyValue": { "destination": "new_key", "fieldDelimiter": "!", "keyValueDelimiter": ":", "nonMatchValue": "defaultValue", "keyPrefix": "parsed_" } } ]
轉換的日誌事件如下。
{ "new_key": { "parsed_key1": "value1", "parsed_key2": "value2", "parsed_key3": "value3", "parsed_key4": "defaultValue" } }
已 AWS 佈建日誌的內建處理器
parseWAF
使用此處理器來剖析 AWS WAF 付費日誌,它會取得 的內容,httpRequest.headers
並從每個標頭名稱建立具有對應值的 JSON 金鑰。它也會對 執行相同的動作labels
。這些轉換可讓您更輕鬆地查詢 AWS WAF 日誌。如需 AWS WAF 日誌格式的詳細資訊,請參閱 Web ACL 流量的日誌範例。
此處理器僅接受 @message
做為輸入。
重要
如果您使用此處理器,它必須是轉換器中的第一個處理器。
範例
採用下列範例日誌事件:
{ "timestamp": 1576280412771, "formatVersion": 1, "webaclId": "arn:aws:wafv2:ap-southeast-2:111122223333:regional/webacl/STMTest/1EXAMPLE-2ARN-3ARN-4ARN-123456EXAMPLE", "terminatingRuleId": "STMTest_SQLi_XSS", "terminatingRuleType": "REGULAR", "action": "BLOCK", "terminatingRuleMatchDetails": [ { "conditionType": "SQL_INJECTION", "sensitivityLevel": "HIGH", "location": "HEADER", "matchedData": ["10", "AND", "1"] } ], "httpSourceName": "-", "httpSourceId": "-", "ruleGroupList": [], "rateBasedRuleList": [], "nonTerminatingMatchingRules": [], "httpRequest": { "clientIp": "1.1.1.1", "country": "AU", "headers": [ { "name": "Host", "value": "localhost:1989" }, { "name": "User-Agent", "value": "curl/7.61.1" }, { "name": "Accept", "value": "*/*" }, { "name": "x-stm-test", "value": "10 AND 1=1" } ], "uri": "/myUri", "args": "", "httpVersion": "HTTP/1.1", "httpMethod": "GET", "requestId": "rid" }, "labels": [{ "name": "value" }] }
處理器組態如下:
[ { "parseWAF": {} } ]
轉換的日誌事件如下。
{ "httpRequest": { "headers": { "Host": "localhost:1989", "User-Agent": "curl/7.61.1", "Accept": "*/*", "x-stm-test": "10 AND 1=1" }, "clientIp": "1.1.1.1", "country": "AU", "uri": "/myUri", "args": "", "httpVersion": "HTTP/1.1", "httpMethod": "GET", "requestId": "rid" }, "labels": { "name": "value" }, "timestamp": 1576280412771, "formatVersion": 1, "webaclId": "arn:aws:wafv2:ap-southeast-2:111122223333:regional/webacl/STMTest/1EXAMPLE-2ARN-3ARN-4ARN-123456EXAMPLE", "terminatingRuleId": "STMTest_SQLi_XSS", "terminatingRuleType": "REGULAR", "action": "BLOCK", "terminatingRuleMatchDetails": [ { "conditionType": "SQL_INJECTION", "sensitivityLevel": "HIGH", "location": "HEADER", "matchedData": ["10", "AND", "1"] } ], "httpSourceName": "-", "httpSourceId": "-", "ruleGroupList": [], "rateBasedRuleList": [], "nonTerminatingMatchingRules": [] }
parsePostgres
使用此處理器來剖析 Amazon RDS for PostgreSQL 付費日誌、擷取欄位,並將它們轉換為 JSON 格式。如需 RDS for PostgreSQL 日誌格式的詳細資訊,請參閱 RDS for PostgreSQL 資料庫日誌檔案。
此處理器僅接受 @message
做為輸入。
重要
如果您使用此處理器,它必須是轉換器中的第一個處理器。
範例
採用下列範例日誌事件:
2019-03-10 03:54:59 UTC:10.0.0.123(52834):postgres@logtestdb:[20175]:ERROR: column "wrong_column_name" does not exist at character 8
處理器組態如下:
[ { "parsePostgres": {} } ]
轉換的日誌事件如下。
{ "logTime": "2019-03-10 03:54:59 UTC", "srcIp": "10.0.0.123(52834)", "userName": "postgres", "dbName": "logtestdb", "processId": "20175", "logLevel": "ERROR" }
parseCloudfront
使用此處理器來剖析 Amazon CloudFront 付費日誌、擷取欄位,並將它們轉換為 JSON 格式。編碼的欄位值會解碼。整數和雙數的值會被視為這樣。如需 Amazon CloudFront 日誌格式的詳細資訊,請參閱設定和使用標準日誌 (存取日誌)。
此處理器僅接受 @message
做為輸入。
重要
如果您使用此處理器,它必須是轉換器中的第一個處理器。
範例
採用下列範例日誌事件:
2019-12-04 21:02:31 LAX1 392 192.0.2.24 GET d111111abcdef8.cloudfront.net /index.html 200 - Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/78.0.3904.108%20Safari/537.36 - - Hit SOX4xwn4XV6Q4rgb7XiVGOHms_BGlTAC4KyHmureZmBNrjGdRLiNIQ== d111111abcdef8.cloudfront.net https 23 0.001 - TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 Hit HTTP/2.0 - - 11040 0.001 Hit text/html 78 - -
處理器組態如下:
[ { "parseCloudfront": {} } ]
轉換的日誌事件如下。
{ "date": "2019-12-04", "time": "21:02:31", "x-edge-location": "LAX1", "sc-bytes": 392, "c-ip": "192.0.2.24", "cs-method": "GET", "cs(Host)": "d111111abcdef8.cloudfront.net", "cs-uri-stem": "/index.html", "sc-status": 200, "cs(Referer)": "-", "cs(User-Agent)": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36", "cs-uri-query": "-", "cs(Cookie)": "-", "x-edge-result-type": "Hit", "x-edge-request-id": "SOX4xwn4XV6Q4rgb7XiVGOHms_BGlTAC4KyHmureZmBNrjGdRLiNIQ==", "x-host-header": "d111111abcdef8.cloudfront.net", "cs-protocol": "https", "cs-bytes": 23, "time-taken": 0.001, "x-forwarded-for": "-", "ssl-protocol": "TLSv1.2", "ssl-cipher": "ECDHE-RSA-AES128-GCM-SHA256", "x-edge-response-result-type": "Hit", "cs-protocol-version": "HTTP/2.0", "fle-status": "-", "fle-encrypted-fields": "-", "c-port": 11040, "time-to-first-byte": 0.001, "x-edge-detailed-result-type": "Hit", "sc-content-type": "text/html", "sc-content-len": 78, "sc-range-start": "-", "sc-range-end": "-" }
parseRoute53
使用此處理器來剖析 Amazon Route 53 Public Data Plane 付費日誌、擷取欄位,並將它們轉換為 JSON 格式。編碼的欄位值會解碼。此處理器不支援 Amazon Route 53 Resolver 日誌。
此處理器僅接受 @message
做為輸入。
重要
如果您使用此處理器,它必須是轉換器中的第一個處理器。
範例
採用下列範例日誌事件:
1.0 2017-12-13T08:15:50.235Z Z123412341234 example.com AAAA NOERROR TCP IAD12 192.0.2.0 198.51.100.0/24
處理器組態如下:
[ { "parseRoute53": {} } ]
轉換的日誌事件如下。
{ "version": 1.0, "queryTimestamp": "2017-12-13T08:15:50.235Z", "hostZoneId": "Z123412341234", "queryName": "example.com", "queryType": "AAAA", "responseCode": "NOERROR", "protocol": "TCP", "edgeLocation": "IAD12", "resolverIp": "192.0.2.0", "ednsClientSubnet": "198.51.100.0/24" }
parseVPC
使用此處理器剖析 Amazon VPC 提供的日誌、擷取欄位,並將它們轉換為 JSON 格式。編碼的欄位值會解碼。
此處理器僅接受 @message
做為輸入。
重要
如果您使用此處理器,它必須是轉換器中的第一個處理器。
範例
採用下列範例日誌事件:
2 123456789010 eni-abc123de 192.0.2.0 192.0.2.24 20641 22 6 20 4249 1418530010 1418530070 ACCEPT OK
處理器組態如下:
[ { "parseVPC": {} } ]
轉換的日誌事件如下。
{ "version": 2, "accountId": "123456789010", "interfaceId": "eni-abc123de", "srcAddr": "192.0.2.0", "dstAddr": "192.0.2.24", "srcPort": 20641, "dstPort": 22, "protocol": 6, "packets": 20, "bytes": 4249, "start": 1418530010, "end": 1418530070, "action": "ACCEPT", "logStatus": "OK" }
字串變動處理器
lowerCaseString
lowerCaseString
處理器會將字串轉換為小寫版本。
欄位 | 描述 | 是否為必要? | 預設 | 限制 |
---|---|---|---|---|
withKeys |
要轉換為小寫的索引鍵清單 |
是 |
項目上限:10 |
範例
採用下列範例日誌事件:
{ "outer_key": { "inner_key": "INNER_VALUE" } }
轉換器組態是這樣,使用 lowerCaseString
搭配 parseJSON
:
[ { "parseJSON": {} }, { "lowerCaseString": { "withKeys":["outer_key.inner_key"] } } ]
轉換的日誌事件如下。
{ "outer_key": { "inner_key": "inner_value" } }
upperCaseString
upperCaseString
處理器會將字串轉換為其大寫版本。
欄位 | 描述 | 是否為必要? | 預設 | 限制 |
---|---|---|---|---|
withKeys |
要轉換為大寫的金鑰清單 |
是 |
項目上限:10 |
範例
採用下列範例日誌事件:
{ "outer_key": { "inner_key": "inner_value" } }
轉換器組態是如此,使用 upperCaseString
搭配 parseJSON
:
[ { "parseJSON": {} }, { "upperCaseString": { "withKeys":["outer_key.inner_key"] } } ]
轉換的日誌事件如下。
{ "outer_key": { "inner_key": "INNER_VALUE" } }
splitString
splitString
處理器是一種字串變動處理器,使用分隔字元將欄位分割為陣列。
欄位 | 描述 | 是否為必要? | 預設 | 限制 |
---|---|---|---|---|
項目 |
項目陣列。陣列中的每個項目都必須包含 source 和 delimiter 欄位。 |
是 |
項目上限:10 |
|
source |
要分割之欄位值的索引鍵 |
是 |
長度上限:128 |
|
分隔符號 |
要分割欄位值的分隔符號字串 |
是 |
長度上限:128 |
範例 1
採用下列範例日誌事件:
[ { "parseJSON": {} }, { "splitString": { "entries": [ { "source": "outer_key.inner_key", "delimiter": "_" } ] } } ]
轉換器組態是如此,使用 splitString
搭配 parseJSON
:
[ { "parseJSON": {} }, { "splitString": { "entries": [ { "source": "outer_key.inner_key", "delimiter": "_" } ] } } ]
轉換的日誌事件如下。
{ "outer_key": { "inner_key": [ "inner", "value" ] } }
範例 2
在 上分割字串的分隔符號長度可以是多個字元。
採用下列範例日誌事件:
{ "outer_key": { "inner_key": "item1, item2, item3" } }
轉換器組態如下所示:
[ { "parseJSON": {} }, { "splitString": { "entries": [ { "source": "outer_key.inner_key", "delimiter": ", " } ] } } ]
轉換的日誌事件如下。
{ "outer_key": { "inner_key": [ "item1", "item2", "item3" ] } }
substituteString
substituteString
處理器是一種字串變動處理器,會將索引鍵的值與規則表達式比對,並以取代字串取代所有比對。
欄位 | 描述 | 是否為必要? | 預設 | 限制 |
---|---|---|---|---|
項目 |
項目陣列。陣列中的每個項目必須包含 source 、 from 和 to 欄位。 |
是 |
項目上限:10 |
|
source |
要修改的欄位索引鍵 |
是 |
長度上限:128 巢狀金鑰深度上限:3 |
|
from |
要取代的規則表達式字串。使用雙引號時必須使用 \\ 逸出 【 和 】 等特殊規則運算式字元,使用單引號時或從 設定時必須使用 \ 逸出 AWS Management Console。如需詳細資訊,請參閱 Oracle 網站上的類別模式 您可以在 中包裝模式 |
是 |
長度上限:128 |
|
至 |
對於擷取群組的每個 from Backreference 配對,可以使用要取代的字串。將 $n 格式用於編號群組,例如 $1 ,並將 ${group_name} 用於具名群組,例如 ${my_group} 。> |
是 |
長度上限:128 最大反引數數:10 重複的反向參考數目上限:2 |
範例 1
採用下列範例日誌事件:
{ "outer_key": { "inner_key1": "[]", "inner_key2": "123-345-567", "inner_key3": "A cat takes a catnap." } }
轉換器組態是如此,使用 substituteString
搭配 parseJSON
:
[ { "parseJSON": {} }, { "substituteString": { "entries": [ { "source": "outer_key.inner_key1", "from": "\\[\\]", "to": "value1" }, { "source": "outer_key.inner_key2", "from": "[0-9]{3}-[0-9]{3}-[0-9]{3}", "to": "xxx-xxx-xxx" }, { "source": "outer_key.inner_key3", "from": "cat", "to": "dog" } ] } } ]
轉換的日誌事件如下。
{ "outer_key": { "inner_key1": "value1", "inner_key2": "xxx-xxx-xxx", "inner_key3": "A dog takes a dognap." } }
範例 2
採用下列範例日誌事件:
{ "outer_key": { "inner_key1": "Tom, Dick, and Harry", "inner_key2": "arn:aws:sts::123456789012:assumed-role/MyImportantRole/MySession" } }
轉換器組態是如此,使用 substituteString
搭配 parseJSON
:
[ { "parseJSON": {} }, { "substituteString": { "entries": [ { "source": "outer_key.inner_key1", "from": "(\w+), (\w+), and (\w+)", "to": "$1 and $3" }, { "source": "outer_key.inner_key2", "from": "^arn:aws:sts::(?P<account_id>\\d{12}):assumed-role/(?P<role_name>[\\w+=,.@-]+)/(?P<role_session_name>[\\w+=,.@-]+)$", "to": "${account_id}:${role_name}:${role_session_name}" } ] } } ]
轉換的日誌事件如下。
{ "outer_key": { "inner_key1": "Tom and Harry", "inner_key2": "123456789012:MyImportantRole:MySession" } }
trimString
trimString
處理器會從金鑰的開頭和結尾移除空格。
欄位 | 描述 | 是否為必要? | 預設 | 限制 |
---|---|---|---|---|
withKeys |
要修剪的金鑰清單 |
是 |
項目上限:10 |
範例
採用下列範例日誌事件:
{ "outer_key": { "inner_key": " inner_value " } }
轉換器組態是這樣,使用 trimString
搭配 parseJSON
:
[ { "parseJSON": {} }, { "trimString": { "withKeys":["outer_key.inner_key"] } } ]
轉換的日誌事件如下。
{ "outer_key": { "inner_key": "inner_value" } }
JSON 變動處理器
addKeys
使用addKeys
處理器將新的鍵/值對新增至日誌事件。
欄位 | 描述 | 是否為必要? | 預設 | 限制 |
---|---|---|---|---|
項目 |
項目陣列。陣列中的每個項目都可以包含 key 、 value 和 overwriteIfExists 欄位。 |
是 |
項目上限:5 |
|
金錀 |
要新增之新項目的索引鍵 |
是 |
長度上限:128 巢狀金鑰深度上限:3 |
|
value |
要新增的新項目值 |
是 |
長度上限:256 |
|
overwriteIfExists |
如果您將此設定為 true ,則如果事件中key 已存在,則會覆寫現有的值。預設值為 false 。 |
否 |
false |
沒有限制 |
範例
採用下列範例日誌事件:
{ "outer_key": { "inner_key": "inner_value" } }
轉換器組態是這樣,使用 addKeys
搭配 parseJSON
:
[ { "parseJSON": {} }, { "addKeys": { "entries": [ { "source": "outer_key.new_key", "value": "new_value" } ] } } ]
轉換的日誌事件如下。
{ "outer_key": { "inner_key": "inner_value", "new_key": "new_value" } }
deleteKeys
使用deleteKeys
處理器從日誌事件中刪除欄位。這些欄位可以包含鍵/值對。
欄位 | 描述 | 是否為必要? | 預設 | 限制 |
---|---|---|---|---|
withKeys |
要刪除的金鑰清單。 |
是 |
沒有限制 |
項目上限:5 |
範例
採用下列範例日誌事件:
{ "outer_key": { "inner_key": "inner_value" } }
轉換器組態是如此,使用 deleteKeys
搭配 parseJSON
:
[ { "parseJSON": {} }, { "deleteKeys": { "withKeys":["outer_key.inner_key"] } } ]
轉換的日誌事件如下。
{ "outer_key": {} }
moveKeys
使用moveKeys
處理器將金鑰從一個欄位移至另一個欄位。
欄位 | 描述 | 是否為必要? | 預設 | 限制 |
---|---|---|---|---|
項目 |
項目陣列。陣列中的每個項目都可以包含 source 、 target 和 overwriteIfExists 欄位。 |
是 |
項目上限:5 |
|
source |
要移動的金鑰 |
是 |
長度上限:128 巢狀金鑰深度上限:3 |
|
目標 |
要移至的金鑰 |
是 |
長度上限:128 巢狀金鑰深度上限:3 |
|
overwriteIfExists |
如果您將此設定為 true ,則如果事件中key 已存在,則會覆寫現有的值。預設值為 false 。 |
否 |
false |
沒有限制 |
範例
採用下列範例日誌事件:
{ "outer_key1": { "inner_key1": "inner_value1" }, "outer_key2": { "inner_key2": "inner_value2" } }
轉換器組態是這樣,使用 moveKeys
搭配 parseJSON
:
[ { "parseJSON": {} }, { "moveKeys": { "entries": [ { "source": "outer_key1.inner_key1", "target": "outer_key2" } ] } } ]
轉換的日誌事件如下。
{ "outer_key1": {}, "outer_key2": { "inner_key2": "inner_value2", "inner_key1": "inner_value1" } }
renameKeys
使用renameKeys
處理器重新命名日誌事件中的金鑰。
欄位 | 描述 | 是否為必要? | 預設 | 限制 |
---|---|---|---|---|
項目 |
項目陣列。陣列中的每個項目都可以包含 key 、 target 和 overwriteIfExists 欄位。 |
是 |
沒有限制 |
項目上限:5 |
金錀 |
要重新命名的金鑰 |
是 |
沒有限制 |
長度上限:128 |
目標 |
新的金鑰名稱 |
是 |
沒有限制 |
長度上限:128 巢狀金鑰深度上限:3 |
overwriteIfExists |
如果您將此設定為 true ,則如果事件中key 已存在,則會覆寫現有的值。預設值為 false 。 |
否 |
false |
沒有限制 |
範例
採用下列範例日誌事件:
{ "outer_key": { "inner_key": "inner_value" } }
轉換器組態是如此,使用 renameKeys
搭配 parseJSON
:
[ { "parseJSON": {} }, { "renameKeys": { "entries": [ { "key": "outer_key", "target": "new_key" } ] } } ]
轉換的日誌事件如下。
{ "new_key": { "inner_key": "inner_value" } }
copyValue
使用copyValue
處理器在日誌事件中複製值。您也可以使用此處理器,透過將下列中繼資料金鑰的值複製到日誌事件,將中繼資料新增至日誌事件:@logGroupName
、@logGroupStream
、@accountId
、@regionName
。這會在下列範例中說明。
欄位 | 描述 | 是否為必要? | 預設 | 限制 |
---|---|---|---|---|
項目 |
項目陣列。陣列中的每個項目都可以包含 source 、 target 和 overwriteIfExists 欄位。 |
是 |
項目上限:5 |
|
source |
要複製的金鑰 |
是 |
長度上限:128 巢狀金鑰深度上限:3 |
|
目標 |
將值複製到 的金鑰 |
是 |
沒有限制 |
長度上限:128 巢狀金鑰深度上限:3 |
overwriteIfExists |
如果您將此設定為 true ,則如果事件中key 已存在,則會覆寫現有的值。預設值為 false 。 |
否 |
false |
沒有限制 |
範例
採用下列範例日誌事件:
{ "outer_key": { "inner_key": "inner_value" } }
轉換器組態是這樣,使用 copyValue
搭配 parseJSON
:
[ { "parseJSON": {} }, { "copyValue": { "entries": [ { "source": "outer_key.new_key", "target": "new_key" }, { "source": "@logGroupName", "target": "log_group_name" }, { "source": "@logGroupStream", "target": "log_group_stream" }, { "source": "@accountId", "target": "account_id" }, { "source": "@regionName", "target": "region_name" } ] } } ]
轉換的日誌事件如下。
{ "outer_key": { "inner_key": "inner_value" }, "new_key": "inner_value", "log_group_name": "myLogGroupName", "log_group_stream": "myLogStreamName", "account_id": "012345678912", "region_name": "us-east-1" }
listToMap
listToMap
處理器會取得包含金鑰欄位的物件清單,並將其轉換為目標金鑰的映射。
欄位 | 描述 | 是否為必要? | 預設 | 限制 |
---|---|---|---|---|
source |
ProcessingEvent 中的金鑰,其中包含將轉換為映射的物件清單 |
是 |
長度上限:128 巢狀金鑰深度上限:3 |
|
金錀 |
要擷取為所產生映射中索引鍵的欄位索引鍵 |
是 |
長度上限:128 |
|
valueKey |
如果指定此值,您在此參數中指定的值將從source 物件中擷取,並放入產生的映射值中。否則,來源清單中的原始物件會放入產生的映射值中。 |
否 |
長度上限:128 |
|
目標 |
將存放所產生映射之欄位的索引鍵 |
否 |
根節點 |
長度上限:128 巢狀金鑰深度上限:3 |
flatten |
布林值,指出清單是否將平面化為單一項目,或產生的映射中的值是否將是清單。 根據預設,相符索引鍵的值會以陣列表示。 |
否 |
false |
|
flattenedElement |
如果您將 flatten 設定為 true ,請使用 flattenedElement 指定要保留的元素 last first 或 。 |
|
值只能為 first 或 last |
範例
採用下列範例日誌事件:
{ "outer_key": [ { "inner_key": "a", "inner_value": "val-a" }, { "inner_key": "b", "inner_value": "val-b1" }, { "inner_key": "b", "inner_value": "val-b2" }, { "inner_key": "c", "inner_value": "val-c" } ] }
使用案例 1 的轉換器: flatten
是 false
[ { "parseJSON": {} }, { "listToMap": { "source": "outer_key" "key": "inner_key", "valueKey": "inner_value", "flatten": false } } ]
轉換的日誌事件如下。
{ "outer_key": [ { "inner_key": "a", "inner_value": "val-a" }, { "inner_key": "b", "inner_value": "val-b1" }, { "inner_key": "b", "inner_value": "val-b2" }, { "inner_key": "c", "inner_value": "val-c" } ], "a": [ "val-a" ], "b": [ "val-b1", "val-b2" ], "c": [ "val-c" ] }
使用案例 2 的轉換器: flatten
是 true
, flattenedElement
是 first
[ { "parseJSON": {} }, { "listToMap": { "source": "outer_key" "key": "inner_key", "valueKey": "inner_value", "flatten": true, "flattenedElement": "first" } } ]
轉換的日誌事件如下。
{ "outer_key": [ { "inner_key": "a", "inner_value": "val-a" }, { "inner_key": "b", "inner_value": "val-b1" }, { "inner_key": "b", "inner_value": "val-b2" }, { "inner_key": "c", "inner_value": "val-c" } ], "a": "val-a", "b": "val-b1", "c": "val-c" }
使用案例 3 的轉換器: flatten
是 true
, flattenedElement
是 last
[ { "parseJSON": {} }, { "listToMap": { "source": "outer_key" "key": "inner_key", "valueKey": "inner_value", "flatten": true, "flattenedElement": "last" } } ]
轉換的日誌事件如下。
{ "outer_key": [ { "inner_key": "a", "inner_value": "val-a" }, { "inner_key": "b", "inner_value": "val-b1" }, { "inner_key": "b", "inner_value": "val-b2" }, { "inner_key": "c", "inner_value": "val-c" } ], "a": "val-a", "b": "val-b2", "c": "val-c" }
資料類型轉換器處理器
typeConverter
使用typeConverter
處理器將與指定索引鍵相關聯的值類型轉換為指定的類型。它是一種轉換處理器,可變更指定欄位的類型。值可以轉換為下列其中一種資料類型:integer
、 double
string
和 boolean
。
欄位 | 描述 | 是否為必要? | 預設 | 限制 |
---|---|---|---|---|
項目 |
項目陣列。陣列中的每個項目都必須包含 key 和 type 欄位。 |
是 |
項目上限:10 |
|
金錀 |
具有要轉換為不同類型之值的金鑰 |
是 |
長度上限:128 巢狀金鑰深度上限:3 |
|
type |
要轉換的類型。有效值為 integer 、 double string 和 boolean 。 |
是 |
範例
採用下列範例日誌事件:
{ "name": "value", "status": "200" }
轉換器組態是這樣,使用 typeConverter
搭配 parseJSON
:
[ { "parseJSON": {} }, { "typeConverter": { "entries": [ { "key": "status", "type": "integer" } ] } } ]
轉換的日誌事件如下。
{ "name": "value", "status": 200 }
datetimeConverter
使用datetimeConverter
處理器將日期時間字串轉換為您指定的格式。
欄位 | 描述 | 是否為必要? | 預設 | 限制 |
---|---|---|---|---|
source |
要套用日期轉換的金鑰。 |
是 |
項目上限:10 |
|
matchPatterns |
要比對 source 欄位的模式清單 |
是 |
項目上限:5 |
|
目標 |
存放結果的 JSON 欄位。 |
是 |
長度上限:128 巢狀金鑰深度上限:3 |
|
targetFormat |
用於目標欄位中轉換資料的日期時間格式。 |
否 |
|
長度上限:64 |
sourceTimezone |
來源欄位的時區。 如需可能值的清單,請參閱 Java 支援的區域 ID 和位移 |
否 |
UTC |
長度下限:1 |
targetTimezone |
目標欄位的時區。 如需可能值的清單,請參閱 Java 支援的區域 ID 和位移 |
否 |
UTC |
長度下限:1 |
locale |
來源欄位的地區設定。 如需可能值的清單,請參閱 Java 中的 Locale getAvailableLocales() 方法與範例 |
是 |
長度下限:1 |
範例
採用下列範例日誌事件:
{"german_datetime": "Samstag 05. Dezember 1998 11:00:00"}
轉換器組態是這樣,使用 dateTimeConverter
搭配 parseJSON
:
[ { "parseJSON": {} }, { "dateTimeConverter": { "source": "german_datetime", "target": "target_1", "locale": "de", "matchPatterns": ["EEEE dd. MMMM yyyy HH:mm:ss"], "sourceTimezone": "Europe/Berlin", "targetTimezone": "America/New_York", "targetFormat": "yyyy-MM-dd'T'HH:mm:ss z" } } ]
轉換的日誌事件如下。
{ "german_datetime": "Samstag 05. Dezember 1998 11:00:00", "target_1": "1998-12-05T17:00:00 MEZ" }