您可以使用的處理器 - Amazon CloudWatch Logs

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

您可以使用的處理器

本節包含您可以在日誌事件轉換器中使用的每個處理器的相關資訊。處理器可以分類為剖析器、字串變動器、JSON 變動器和日期處理器。

可設定的剖析器類型處理器

parseJSON

parseJSON 處理器會剖析 JSON 日誌事件,並在目的地下方插入擷取的 JSON 鍵值對。如果您未指定目的地,處理器會將索引鍵/值對放在根節點下方。

原始@message內容不會變更,新的金鑰會新增至訊息。

欄位 描述 是否為必要? 預設 限制

source

日誌事件中要剖析的欄位路徑。使用點符號來存取子欄位。例如 store.book

@message

長度上限:128

巢狀金鑰深度上限:3

目的地

剖析 JSON 的目的地欄位

Parent JSON node

長度上限: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 比對至 的欄位路徑

@message

長度上限:128

巢狀金鑰深度上限:3

match

要比對日誌事件的 grok 模式。支援的 grok 模式列於本節結尾。

長度上限:128

最多 5 個 grok 模式。 grok 模式不支援類型轉換。

對於常見日誌格式模式 (APACHE_ACCESS_LOG、NGINX_ACCESS_LOG、SYSLOG5424),在常見日誌模式之後僅支援包含 GREEDYDATA 或 DATA 模式。

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" }
範例 2

範例日誌:

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" }
範例 3:使用 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" }

支援的 grok 模式

下表列出grok處理器支援的模式。

一般 grok 模式

模式 範例 描述

USERNAME 或 USER

輸入: user123.name-TEST

模式:%{USERNAME:name}

輸出: {"name": "user123.name-TEST"}

符合一個或多個字元,可包含小寫字母 (a-z)、大寫字母 (A-Z)、數字 (0-9)、點 (.)、底線 (_) 或連字號 (-)

INT

輸入: -456

模式:%{INT:num}

輸出: {"num": "-456"}

比對選用的加號或減號,後面接著一或多個數字。

BASE10NUM

輸入: -0.67

模式:%{BASE10NUM:num}

輸出: {"num": "-0.67"}

將整數或浮點數與選用的符號和小數點配對。

BASE16NUM

輸入: +0xA1B2

模式:%{BASE16NUM:num}

輸出: {"num": "+0xA1B2"}

將小數位和十六進位數字與選用的符號 (+ 或 -) 和選用的 0x 字首進行比對。

POSINT

輸入: 123

模式:%{POSINT:num}

輸出: {"num": "123"}

比對沒有前導零的完整正整數,包含一或多個數字 (1-9 後接 0-9)。

NONNEGINT

輸入: 008

模式:%{NONNEGINT:num}

輸出: {"num": "008"}

符合任何整數 (包含一或多個數字 0-9),包括零和開頭為零的數字。

WORD

輸入: abc def

模式:%{WORD:user}

輸出: {"user": "user_123"}

比對由一或多個單字字元 (\w) 組成的完整單字,包括字母、數字和底線。

NOTSPACE

輸入: hello_world123

模式:%{NOTSPACE:msg}

輸出: {"msg": "hello_world123"}

符合一或多個非空格字元。

SPACE

輸入: " "

模式:%{SPACE:extra}

輸出: {"extra": " "}

符合零個或多個空格字元。

DATA

輸入: abc def

模式:%{DATA:data}

輸出: {"data": "abc def"}

符合任何字元 (新行除外) 零次或多次,不歡迎。

GREEDYDATA

輸入: abc def

模式:%{GREEDYDATA:data}

輸出: {"data": "abc def"}

符合任何字元 (新行除外) 零次或多次,歡迎。

QUOTEDSTRING

輸入: "Hello, world!

模式:%{QUOTEDSTRING:msg}

輸出: {"msg": "Hello, world!"}

將引號字串 (單引號或雙引號) 與逸出字元相符。

UUID

輸入: 550e8400-e29b-41d4-a716-446655440000

模式:%{UUID:id}

輸出: {"id": "550e8400-e29b-41d4-a716-446655440000"}

符合標準 UUID 格式:8 個十六進位字元,後面接著 3 個 4 個十六進位字元群組,結尾為 12 個十六進位字元,全部以連字號分隔。

URN

輸入: urn:isbn:0451450523

模式:%{URN:urn}

輸出: {"urn": "urn:isbn:0451450523"}

符合統一資源名稱 (URN) 語法。

AWS grok 模式

模式 範例 描述

ARN

輸入: arn:aws:iam:us-east-1:123456789012:user/johndoe

模式:%{ARN:arn}

輸出: {"arn": "arn:aws:iam:us-east-1:123456789012:user/johndoe"}

比對 AWS Amazon Resource Name (ARNs)aws-cn、擷取分割區 (aws、 或 aws-us-gov)、服務、區域、帳戶 ID,以及最多 5 個以斜線分隔的階層資源識別符。它將不符合冒號之間缺少資訊的 ARNs。

網路grok 模式

模式 範例 描述

CISCOMAC

輸入: 0123.4567.89AB

模式:%{CISCOMAC:MacAddress}

輸出: {"MacAddress": "0123.4567.89AB"}

符合 4-4-4 十六進位格式的 MAC 地址。

WINDOWSMAC

輸入: 01-23-45-67-89-AB

模式:%{WINDOWSMAC:MacAddress}

輸出: {"MacAddress": "01-23-45-67-89-AB"}

將十六進位格式的 MAC 地址與連字號比對。

COMMONMAC

輸入: 01:23:45:67:89:AB

模式:%{COMMONMAC:MacAddress}

輸出: {"MacAddress": "01:23:45:67:89:AB"}

將十六進位格式的 MAC 地址與冒號比對。

MAC

輸入: 01:23:45:67:89:AB

模式:%{MAC:m1}

輸出: {"m1": "01:23:45:67:89:AB"}

符合任何 CISCOMACWINDOWSMACCOMMONMAC 模式。

IPV6

輸入: 2001:db8:3333:4444:5555:6666:7777:8888

模式:%{IPV6:ip}

輸出: {"ip": "2001:db8:3333:4444:5555:6666:7777:8888"}

符合 IPv6 地址,包括壓縮表單和 IPv4-mapped IPv6 地址。

IPV4

輸入: 192.168.0.1

模式:%{IPV4:ip}

輸出: {"ip": "192.168.0.1"}

符合 IPv4 地址。

IP

輸入: 192.168.0.1

模式:%{IP:ip}

輸出: {"ip": "192.168.0.1"}

符合 IPV6IPv6 模式支援的 IPv6 地址或 IPV4 模式支援的 IPv4 地址。 IPV4

HOSTNAME 或 HOST

輸入: server-01.internal-network.local

模式:%{HOST:host}

輸出: {"host": "server-01.internal-network.local"}

符合網域名稱,包括子網域。

IPORHOST

輸入: 2001:db8:3333:4444:5555:6666:7777:8888

模式:%{IPORHOST:ip}

輸出: {"ip": "2001:db8:3333:4444:5555:6666:7777:8888"}

比對 HOSTNAME 模式支援的主機名稱或 IP 模式支援的 IP 地址。

HOSTPORT

輸入: 192.168.0.1:8080

模式:%{HOSTPORT:ip}

輸出: {"ip":"192.168.0.1:8080","PORT":"8080"}

符合 IPORHOST 模式支援的 IP 地址或主機名稱,後面接著冒號和連接埠號碼,在輸出中擷取連接埠做為「PORT」。

URIHOST

輸入: example.com:443 10.0.0.1

模式:%{URIHOST:host} %{URIHOST:ip}

輸出: {"host":"example.com:443","port":"443","ip":"10.0.0.1"}

將 IP 地址或主機名稱與 IPORHOST 模式支援相符,選擇性地後面接著冒號和連接埠號碼,如果有的話,擷取連接埠做為「連接埠」。

路徑雜湊模式

模式 範例 描述

UNIXPATH

輸入: /search?q=regex

模式:%{UNIXPATH:path}

輸出: {"path":"/search?q=regex"}

符合 URL 路徑,可能包括查詢參數。

WINPATH

輸入: C:\Users\John\Documents\file.txt

模式:%{WINPATH:path}

輸出: {"path": "C:\\Users\\John\\Documents\\file.txt"}

符合 Windows 檔案路徑。

PATH

輸入: /search?q=regex

模式:%{PATH:path}

輸出: {"path":"/search?q=regex"}

符合 URL 或 Windows 檔案路徑。

TTY

輸入: /dev/tty1

模式:%{TTY:path}

輸出: {"path":"/dev/tty1"}

比對終端機和虛擬終端機的 Unix 裝置路徑。

URIPROTO

輸入: web+transformer

模式:%{URIPROTO:protocol}

輸出: {"protocol":"web+transformer"}

比對字母,選擇性地後面加上加號 (+) 字元和其他字母或加號 (+) 字元。

URIPATH

輸入: /category/sub-category/product_name

模式:%{URIPATH:path}

輸出: {"path":"/category/sub-category/product_name"}

符合 URI 的路徑元件。

URIPARAM

輸入: ?param1=value1&param2=value2

模式:%{URIPARAM:url}

輸出: {"url":"?param1=value1&param2=value2"}

符合 URL 查詢參數。

URIPATHPARAM

輸入: /category/sub-category/product?id=12345&color=red

模式:%{URIPATHPARAM:path}

輸出: {"path":"/category/sub-category/product?id=12345&color=red"}

選擇性比對 URI 路徑,後面接著查詢參數。

URI

輸入: https://user:password@example.com/path/to/resource?param1=value1&param2=value2

模式:%{URI:uri

輸出: {"path":"https://user:password@example.com/path/to/resource?param1=value1&param2=value2"}

符合完整的 URI。

日期和時間 grok 模式

模式 範例 描述

MONTH

輸入: Jan

模式:%{MONTH:month}

輸出: {"month":"Jan"}

輸入: January

模式:%{MONTH:month}

輸出: {"month":"January"}

將英文的完整或縮寫月份名稱配對為整數。

MONTHNUM

輸入: 5

模式:%{MONTHNUM:month}

輸出: {"month":"5"}

輸入: 05

模式:%{MONTHNUM:month}

輸出: {"month":"05"}

將月份數字從 1 配對至 12,單位數月份可選擇前導零。

MONTHNUM2

輸入: 05

模式:%{MONTHNUM2:month}

輸出: {"month":"05"}

從 01 到 12 配對兩位數的月數。

星期一

輸入: 31

模式:%{MONTHDAY:monthDay}

輸出: {"monthDay":"31"}

將月份中的某天從 1 配對到 31,並加上選用的前導零。

YEAR

輸入: 2024

模式:%{YEAR:year}

輸出: {"year":"2024"}

輸入: 24

模式:%{YEAR:year}

輸出: {"year":"24"}

符合兩位數或四位數格式的年份。

DAY

輸入: Tuesday

模式:%{DAY:day}

輸出: {"day":"Tuesday"}

符合完整或縮寫的日名稱。

HOUR

輸入: 22

模式:%{HOUR:hour}

輸出: {"hour":"22"}

以 24 小時格式比對小時數,以及選用的前導零 (0)0-23。

MINUTE

輸入: 59

模式:%{MINUTE:min}

輸出: {"min":"59"}

符合分鐘數 (00-59)。

SECOND

輸入: 3

模式:%{SECOND:second}

輸出: {"second":"3"}

輸入: 30.5

模式:%{SECOND:fractionalSeconds}

輸出: {"minSec":"30.5"}

輸入: 30:5

模式:%{SECOND:fractionalSeconds}

輸出: {"minSec":"30:5"}

比對代表秒數 (0)0-60 的數字,選擇性地後面接著小數點或冒號,以及一或多個數字表示小數秒。

TIME

輸入: 09:45:32

模式:%{TIME:time}

輸出: {"time":"09:45:32"}

將時間格式與小時、分鐘和秒相符,其中 HOUR 模式與小時相符,MINUTE 模式與分鐘相符,而 SECOND 模式與秒相符,通常是格式 (H)H:mm:(s)s。秒包括閏秒 (0)0-60。

DATE_US

輸入: 11/23/2024

模式:%{DATE_US:date}

輸出: {"date":"11/23/2024"}

輸入: 1-01-24

模式:%{DATE_US:date}

輸出: {"date":"1-01-24"}

符合 (M)M/(d)d/(yy)yy或 格式的日期(M)M-(d)d-(yy)yy,其中 MONTHNUM 模式符合月份,MONTHDAY 模式符合日期,YEAR 模式符合年份。

DATE_EU

輸入: 23/11/2024

模式:%{DATE_EU:date}

輸出: {"date":"23/11/2024"}

輸入: 1-01-24

模式:%{DATE_EU:date}

輸出: {"date":"1.01.24"}

d)d/(M)M/(yy)yy(d)d-(M)M-(yy)yy或 的格式比對日期(d)d.(M)M.(yy)yy,其中 MONTHNUM 模式符合月份、MONTHDAY 模式符合日期,而 YEAR 模式符合年份。

DATE

輸入: 11/29/2024

模式:%{DATE:date}

輸出: {"date":"11/29/2024"}

輸入: 29.11.2024

模式:%{DATE:date}

輸出: {"date":"29.11.2024"}

符合美國格式或歐洲格式的日期,如 DATE_USDATE_EU 模式。

DATESTAMP

輸入: 29-11-2024 14:30:00

模式:%{DATESTAMP:dateTime}

輸出: {"dateTime":"29-11-2024 14:30:00"}

符合 DATE 模式,後面接著 TIME 模式,以空格或連字號分隔。

TZ

輸入: PDT

模式:%{TZ:tz}

輸出: {"tz":"PDT"}

符合常用時區縮寫 (PST、PDT、MST、MDT、CST CDT、EST、EDT、UTC)。

ISO8601_TIMEZONE

輸入: +05:30

模式:%{ISO8601_TIMEZONE:tz}

輸出: {"tz":"+05:30"}

輸入: -530

模式:%{ISO8601_TIMEZONE:tz}

輸出: {"tz":"-530"}

輸入: Z

模式:%{ISO8601_TIMEZONE:tz}

輸出: {"tz":"Z"}

以此格式將 UTC 偏移 'Z' 或時區偏移與選用冒號相符:[+-](H)H(:)mm此處的 HOUR 模式符合小時,而 MINUTE 模式符合分鐘。

ISO8601_SECOND

輸入: 60

模式:%{ISO8601_SECOND:second}

輸出: {"second":"60"}

比對代表秒數 (0)0-60 的數字,選擇性地後面接著小數點或冒號,以及一或多個數字表示小數秒。

TIMESTAMP_ISO8601

輸入: 2023-05-15T14:30:00+05:30

模式:%{TIMESTAMP_ISO8601:timestamp}

輸出: {"timestamp":"2023-05-15T14:30:00+05:30"}

輸入: 23-5-1T1:25+5:30

模式:%{TIMESTAMP_ISO8601:timestamp}

輸出: {"timestamp":"23-5-1T1:25+5:30"}

輸入: 23-5-1T1:25Z

模式:%{TIMESTAMP_ISO8601:timestamp}

輸出: {"timestamp":"23-5-1T1:25Z"}

將 ISO8601 日期時間格式(yy)yy-(M)M-(d)dT(H)H:mm:((s)s)(Z|[+-](H)H:mm)與選用的秒和時區配對。

DATESTAMP_RFC2822

輸入: Mon, 15 May 2023 14:30:00 +0530

模式:%{DATESTAMP_RFC2822:dateTime}

輸出: {"dateTime":"Mon, 15 May 2023 14:30:00 +0530"}

輸入: Monday, 15 Jan 23 14:30:00 Z

模式:%{DATESTAMP_RFC2822:timestamp}

輸出: {"dateTime":"Monday, 15 Jan 23 14:30:00 Z"}

符合 RFC2822 日期時間格式: Day, (d)d MonthName (yy)yy (H)H:mm:(s)s Z|[+-](H)H:mm

Day 模式用於比對完整或縮寫日,例如「星期一」或「星期一」。MonthName模式用於比對完整或縮寫英文月份名稱,例如「一月」或「一月」。Timezone模式用於比對 UTC 偏移 (Z) 或時區偏移與選用冒號。

DATESTAMP_OTHER

輸入: Mon May 15 14:30:00 PST 2023

模式:%{DATESTAMP_OTHER:dateTime}

輸出: {"dateTime":"Mon May 15 14:30:00 PST 2023"}

符合下列格式的日期和時間: Day MonthName (d)d (H)H:mm:(s)s Timezone (yy)yy

模式用於比對完整或縮寫日,例如「星期一」或「星期一」。MonthName 模式用於比對完整或縮寫英文月份名稱,例如「1 月」或「1 月」。Day模式用於比對完整或縮寫日,例如「星期一」或「星期一」。MonthName模式用於比對完整或縮寫英文月份名稱,例如「1 月」或「1 月」。Timezone模式會比對 TZ grok 模式支援的任何時區。

DATESTAMP_EVENTLOG

輸入: 20230515143000

模式:%{DATESTAMP_EVENTLOG:dateTime}

輸出: {"dateTime":"20230515143000"}

符合不含分隔符號的精簡日期時間格式: (yy)yyMM(d)d(H)Hmm(s)s

Log grok 模式

模式 範例 描述

LOGLEVEL

輸入: INFO

模式:%{LOGLEVEL:logLevel}

輸出: {"logLevel":"INFO"}

符合不同大寫和縮寫中的標準日誌層級,包括下列項目:Alert/ALERTTrace/TRACE、、Debug/DEBUGNotice/NOTICEInfo/INFOWarn/Warning/WARN/WARNINGErr/Error/ERR/ERRORCrit/Critical/CRIT/CRITICALFatal/FATALSevere/SEVERE、、。 Emerg/Emergency/EMERG/EMERGENCY

HTTPDATE

輸入: 23/Nov/2024:14:30:00 +0640

模式:%{HTTPDATE:date}

輸出: {"date":"23/Nov/2024:14:30:00 +0640"}

符合日誌檔案中常用的日期和時間格式。格式:(d)d/MonthName/(yy)yy:(H)H:mm:(s)s Timezone

MonthName 符合完整或縮寫英文月份名稱,例如「1 月」或「1 月」,並Timezone符合 INT grok 模式。

SYSLOGTIMESTAMP

輸入: Nov 29 14:30:00

模式:%{SYSLOGTIMESTAMP:dateTime}

輸出: {"dateTime":"Nov 29 14:30:00"}

將日期格式與 相符MonthName (d)d (H)H:mm:(s)s

MonthName 符合完整或縮寫英文月份名稱,例如「1 月」或「1 月」

PROG

輸入: user.profile/settings-page

模式:%{PROG:program}

輸出: {"program":"user.profile/settings-page"}

比對由字母、數字、點、底線、正斜線、百分比符號和連字號字元組成的程式名稱。

SYSLOGPROG

輸入: user.profile/settings-page[1234]

模式:%{SYSLOGPROG:programWithId}

輸出: {"programWithId":"user.profile/settings-page[1234]","program":"user.profile/settings-page","pid":"1234"}

選擇性比對 PROG grok 模式,後面接著方形括號中的程序 ID。

SYSLOGHOST

輸入: 2001:db8:3333:4444:5555:6666:7777:8888

模式:%{SYSLOGHOST:ip}

輸出: {"ip": "2001:db8:3333:4444:5555:6666:7777:8888"}

符合 HOSTIP 模式。

SYSLOGFACILITY

輸入: <13.6>

模式:%{SYSLOGFACILITY:syslog}

輸出: {"syslog":"<13.6>","facility":"13","priority":"6"}

符合十進位格式的 syslog 優先順序。該值應該以角括號括住 (<>)。

常見日誌雜湊模式

您可以使用預先定義的自訂 grok 模式來比對 Apache、NGINX 和 Syslog Protocol (RFC 5424) 日誌格式。當您使用這些特定模式時,它們必須是相符組態中的第一個模式,而且沒有其他模式可以優先於它們。此外,您只能使用 GREEDYDATADATA 模式來追蹤它們。

模式 描述 match 欄位內的用量限制

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

輸出:

{ "remote_host": "127.0.0.1", "ident": "-", "auth_user": "-", "timestamp": "2023-08-03T12:34:56Z", "http_method": "GET", "request": "/page.html", "http_version": 1.1, "status_code": 200, "response_size": 1234 }
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}" } } ]

輸出:

{ "remote_host": "192.168.1.100", "ident": "-", "auth_user": "Foo", "timestamp": "2023-08-03T12:34:56Z", "http_method": "GET", "request": "/account/login.html", "http_version": 1.1, "status_code": 200, "response_size": 42, "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" }
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\"]" }

csv

csv 處理器會將逗號分隔值 (CSV) 從日誌事件剖析為資料欄。

欄位 描述 是否為必要? 預設 限制

source

日誌事件中要剖析的欄位路徑

@message

長度上限:128

巢狀金鑰深度上限:3

分隔符號

用來分隔原始逗號分隔值日誌事件中每個資料欄的字元

,

長度上限:1

quoteCharacter

用作單一資料欄文字限定詞的字元

"

長度上限:1

要用於轉換日誌事件中資料欄的名稱清單。

[column_1, column_2 ...]

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

日誌事件中要剖析的欄位路徑

@message

長度上限:128

巢狀金鑰深度上限:3

目的地

要將擷取的鍵值對放入其中的目的地欄位

長度上限:128

fieldDelimiter

原始日誌事件中金鑰/值對之間所使用的欄位分隔符號字串

&

長度上限:128

keyValueDelimiter

轉換日誌事件中每對索引鍵和值之間使用的分隔符號字串

=

長度上限:128

nonMatchValue

當鍵/值對未成功分割時,要插入結果中值欄位的值。

長度上限:128

keyPrefix

如果您想要新增字首至所有轉換的金鑰,請在此處指定。

長度上限:128

overwriteIfExists

如果目的地金鑰已存在,是否要覆寫該值

false

範例

採用下列範例日誌事件:

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 格式。編碼的欄位值會解碼。

此處理器僅接受 @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 Route 53 Public Data Plane VPC vended 日誌、擷取欄位,並將它們轉換為 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 處理器使用分隔字元將欄位分割為陣列。

欄位 描述 是否為必要? 預設 限制

項目

項目陣列。陣列中的每個項目必須包含 sourcedelimiter 欄位。

項目上限:100

source

要分割的金鑰

長度上限:128

分隔符號

負責分割的分隔符號字元

長度上限:1

範例

採用下列範例日誌事件:

{ "outer_key": { "inner_key": "inner_value" } }

轉換器組態是這樣,使用 splitString搭配 parseJSON

[ "parseJSON": {}, "splitString": { "entries": [ { "source": "outer_key.inner_key", "delimiter": "_" } ] } ]

轉換的日誌事件如下。

{ "outer_key": { "inner_key": [ "inner", "value" ] } }

substituteString

substituteString 處理器會將索引鍵的值與規則運算式比對,並以取代字串取代所有比對。

欄位 描述 是否為必要? 預設 限制

項目

項目陣列。陣列中的每個項目必須包含 sourcefromto 欄位。

項目上限:10

source

要修改的金鑰

長度上限:128

巢狀金鑰深度上限:3

from

要取代的規則運算式字串。使用雙引號時,必須使用 \\ 逸出 【 和 】 等特殊規則字元,使用單引號時,必須使用 \ 逸出。如需詳細資訊,請參閱 Oracle 網站上的類別模式

長度上限:128

要取代每個相符項目的字串 from

長度上限:128

範例

採用下列範例日誌事件:

{ "outer_key": { "inner_key1": "[]", "inner_key2": "123-345-567" } }

轉換器組態是這樣,使用 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" } ] } ]

轉換的日誌事件如下。

{ "outer_key": { "inner_key1": "value1", "inner_key2": "xxx-xxx-xxx" } }

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處理器將新的鍵/值對新增至日誌事件。

欄位 描述 是否為必要? 預設 限制

項目

項目陣列。陣列中的每個項目都可以包含 keyvalueoverwriteIfExists 欄位。

項目上限: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處理器將金鑰從一個欄位移至另一個欄位。

欄位 描述 是否為必要? 預設 限制

項目

項目陣列。陣列中的每個項目都可以包含 sourcetargetoverwriteIfExists 欄位。

項目上限: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處理器重新命名日誌事件中的金鑰。

欄位 描述 是否為必要? 預設 限制

項目

項目陣列。陣列中的每個項目都可以包含 keytargetoverwriteIfExists 欄位。

項目上限: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。以下範例說明了這一點。

欄位 描述 是否為必要? 預設 限制

項目

項目陣列。陣列中的每個項目都可以包含 sourcetargetoverwriteIfExists 欄位。

項目上限: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

布林值,指出清單是否將扁平化為單一項目,或產生的對應中的值是否將是清單。

根據預設,相符索引鍵的值會以陣列表示。將 flatten設定為 true,根據 的值將陣列轉換為單一值flattenedElement

false

flattenedElement

如果您將 flatten設定為 true,請使用 flattenedElement指定last要保留的元素first或 。

設為 flatten 時為必要 true

值只能為 firstlast

範例

採用下列範例日誌事件:

{ "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 的轉換器: flattenfalse

[ "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 的轉換器: flattentrueflattenedElementfirst

[ "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 的轉換器: flattentrueflattenedElementlast

[ "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處理器將與指定索引鍵相關聯的值類型轉換為指定的類型。這是變更指定欄位類型的投射處理器。值可以轉換為下列其中一種資料類型:integerdoublestringboolean

欄位 描述 是否為必要? 預設 限制

項目

項目陣列。陣列中的每個項目必須包含 keytype 欄位。

項目上限:10

金錀

具有要轉換為不同類型之值的金鑰

長度上限:128

巢狀金鑰深度上限:3

type

要轉換的類型。有效值為 integerdoublestringboolean

範例

採用下列範例日誌事件:

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

目標欄位中轉換資料要使用的日期時間格式。

yyyy-MM-dd'T'HH:mm:ss.SSS'Z

長度上限: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" }