支援的規則運算式 (regex) 語法 - Amazon CloudWatch Logs

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

支援的規則運算式 (regex) 語法

當您需要超出確切文字比對的彈性模式比對時,請使用規則表達式。Regex 特別適用於:

  • 變數格式:比對不同格式的 IP 地址、時間戳記或 IDs

  • 部分相符:尋找文字中任何位置包含特定模式的日誌項目

  • 複雜條件:符合值範圍、選用字元或其他拼字

例如,使用 %\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}% 來比對任何 IP 地址格式,或%[Ee]rror|[Ff]ail%擷取日誌中的 "Error"/"error" 和 "Fail"/"fail"。

您可以使用以 % (regex 模式之前和之後的百分比符號) 括住的 regex 模式來比對日誌事件中的術語。下列範例顯示的篩選條件模式會傳回包含 AUTHORIZED 關鍵字的所有日誌事件:

%AUTHORIZED%

此篩選條件模式會傳回日誌事件訊息,例如:

  • [ERROR 401] UNAUTHORIZED REQUEST

  • [SUCCESS 200] AUTHORIZED REQUEST

展開下一節,以檢視 CloudWatch Logs 篩選模式中支援的特定 regex 運算子和語法規則的詳細資訊。

使用 regex 搜尋和篩選日誌資料時,必須用 % 括住運算式。

包含 regex 的篩選條件模式只能包括下列字元:

  • 英數字元 – 英數字元包含字母 (A 到 Z 或 a 到 z) 或數字 (0 到 9) 字元。

  • 支援的符號字元 – 這些字元包括:':'、'_'、'#'、'='、'@'、'/'、';'、',' 和 '-'。例如,由於不支援 '!',因此 %something!% 會遭拒。

  • 支援的運算子 - 包括:'^'、'$'、'?'、'['、']'、'{'、'}'、'|'、'\'、'*'、'+' 和 '.'。

不支援運算子 ()。您不可以使用括號來定義子模式。

不支援多位元組字元。

注意

配額

建立指標篩選條件或訂閱篩選條件時,每個日誌群組最多有 5 個包含 regex 的篩選條件模式。

在為指標篩選條件和訂閱篩選條件建立分隔或 JSON 篩選條件模式,或在篩選條件日誌事件或 Live Tail 時,每個篩選模式限制為 2 個 regex。

受支援運算子的使用

  • ^:將比對錨定到字串的開頭。例如,%^[hc]at% 比對 "hat" 和 "cat",但只比對字串的開頭。

  • $:將比對錨定到字串的結尾。例如,%[hc]at$% 比對 "hat" 和 "cat",但只比對字串的結尾。

  • ?:符合前一個字詞的零或一次出現。例如,%colou?r% 可同時比對 "color" 和 "colour"。

  • []:定義字元類別。比對包含在括號內的字元清單或字元範圍。例如,%[abc]% 比對 "a"、"b" 或 "c";%[a-z]% 比對從 "a" 到 "z" 的任何小寫字元;以及 %[abcx-z]% 比對 "a"、"b"、"c"、"x"、"y" 或 "z"。

  • {m, n}:比對前一個詞彙至少 m 次且不超過 n 次。例如,%a{3,5}% 僅比對 "aaa"、"aaaa" 和 "aaaaa"。

    注意

    如果您選擇不定義下限或上限,則可省略 mn

  • |:布林值 "Or",比對垂直列任一側的詞彙。例如:

    • %gra|ey% 可以比對「灰色」或「灰色」

    • %^starting|^initializing|^shutting down% 可以比對「開始 ...」或「初始化 ...」或「關閉」,但不符合「略過初始化 ...」

    • %abcc|ab[^c]$ 可以比對「abcc ...」和「aba ...」,但不符合「aac ...」

  • \:逸出字元,可讓您使用運算子的文字含義,而非其特殊含義。例如,因為括號被逸出,%\[.\]% 比對任何用 "[" 和 "]" 括住的單一字元,例如 "[a]"、"[b]"、"[7]"、"[@]"、"[]]" 和 "[ ]"。

    注意

    %10\.10\.0\.1% 是建立可比對 IP 地址 10.10.0.1 的 regex 的正確方法。

  • *:符合先前期限的零個或多個執行個體。例如, %ab*c% 可比對 "ac"、"abc" 和 "abbbc";%ab[0-9]*% 可比對 "ab"、"ab0" 和 "ab129"。

  • +:符合先前期限的一或多個執行個體。例如,%ab+c% 可比對 "abc"、"abbc" 和 "abbbc",而非 "ac"。

  • .:比對任一個單一字元。例如,%.at% 比對以 "at" 結尾的任意三個字串,包括 "hat"、"cat"、"bat"、"4at"、"#at" 和 "at" (以空格開始)。

    注意

    建立比對 IP 地址的 regex 時,逸出 . 運算子很重要。例如,%10.10.0.1% 可比對 "10010,051",這可能不是運算式的實際預期用途。

  • \d\D:比對數字/非數字字元。例如,%\d% 等於 %[0-9]%%\D% 等於 %[^0-9]%

    注意

    大寫運算子表示其對應小寫運算子的反轉。

  • \s\S:比對空白字元/非空白字元。

    注意

    大寫運算子表示其對應小寫運算子的反轉。空白字元包括 tab (\t)、空格 ( ) 和換行符 (\n) 字元。

  • \w\W:比對英數字元/非英數字元。例如,%\w% 等於 %[a-zA-Z_0-9]%%\W% 等於 %[^a-zA-Z_0-9]%

    注意

    大寫運算子表示其對應小寫運算子的反轉。

  • \xhh:比對兩位數十六進位字元的 ASCII 映射。\x 為逸出序列,表示下列字元代表 ASCII 的十六進位值。hh 指定指向 ASCII 資料表中某個字元的兩個十六進位數字 (0-9 和 A-F)。

    注意

    您可以使用 \xhh 來比對篩選條件模式不支援的符號字元。例如,%\x3A% 比對 :%\x28% 比對 (