布林值、比較、數值、日期時間和其他函數 - Amazon CloudWatch 日誌

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

布林值、比較、數值、日期時間和其他函數

CloudWatch 日誌見解支援查詢中的許多其他操作和功能,如以下各節所述。

算術運算子

算術運算子可接受以數值資料類型作為引數,而且會傳回數值結果。算術運算子可用於 filterfields 命令,也可以作為其他函數的引數使用。

作業 描述

a + b

加法

a - b

減法

a * b

乘法

a / b

除法

a ^ b

指數 (2 ^ 3 傳回 8)

a % b

餘數或模數 (10 % 3 傳回 1)

布林值運算子

使用布林值運算子 andornot

注意

布林值運算子僅限用於會傳回 TRUEFALSE 的函數。

比較運算子

比較運算子可接受以所有資料類型作為引數,而且會傳回布林值結果。比較運算子可用於 filter 命令,也可以作為其他函數的引數使用。

運算子 描述

=

等於

!=

不等於

<

小於

>

大於

<=

小於或等於

>=

大於或等於

數值運算子

數值運算接受數值資料類型作為引數,並傳回數值結果。數值運算可用於 filterfields 命令,也可以作為其他函數的引數使用。

作業 結果類型 描述

abs(a: number)

數字

絕對值

ceil(a: number)

number

無條件進位到上限 (大於 a 值的最小整數)

floor(a: number)

number

無條件捨去到下限 (小於 a 值的最大整數)

greatest(a: number, ...numbers: number[])

number

傳回最大值

least(a: number, ...numbers: number[])

number

傳回最小值

log(a: number)

number

自然對數

sqrt(a: number)

number

平方根

日期時間函數

日期時間函數

日期時間函數可用於 fieldsfilter 命令,也可以作為其他函數的引數使用。如果查詢中使用了彙總函數,您可以使用這些函數來建立時段。使用由數字和下列其中一項組成的時間週期:

  • ms毫秒

  • s幾秒鐘

  • m幾分鐘

  • h數小時

例如,10m 是 10 分鐘,1h 是 1 小時。

注意

為您的日期時間函數使用最合適的時間單位。 CloudWatch 記錄會根據您選擇的時間單位來限制您的要求。例如,它上限為 60 作為使用的任何請求的最大值s。因此,如果您指定bin(300s), CloudWatch Logs 實際上將其實現為 60 秒,因為 60 是一分鐘內的秒數,因此 CloudWatch 日誌不會使用大於 60 的數字s。若要建立 5 分鐘的值區,請bin(5m)改用。

的上限ms是 1000,s和的帽子m是 60,上限h是 24。

下表列出您可以在查詢命令中使用的不同日期時間函數。該表列出了每個函式的結果類型,並包含對每個函式的說明。

提示

建立查詢命令時,您可以使用時間間隔選擇器,來選取您要查詢的時間段。例如:您可以設定 5 分鐘到 30 分鐘的間隔;1 小時、3 小時和 12 小時的間隔;或是自訂的時間範圍。您也可以在特定日期之間設定時間段。

函式 結果類型 描述

bin(period: Period)

時間戳記

@timestamp 的值四捨五入到指定時間段,然後截斷。例如,bin(5m)@timestamp 的值四捨五入至最接近的 5 分鐘。

您可以使用此操作在查詢中將多筆日誌條目分組在一起。以下範例傳回每小時的例外情況計數。

filter @message like /Exception/ | stats count(*) as exceptionCount by bin(1h) | sort exceptionCount desc

bin 函數支援以下時間單位和縮寫。對於包含多個字元的所有單位和縮寫,支援加上 s 來表示複數。所以 hrhrs 皆可用來指定時數。

  • millisecond ms msec

  • second s sec

  • minute m min

  • hour h hr

  • day d

  • week w

  • month mo mon

  • quarter q qtr

  • year y yr

datefloor(timestamp: Timestamp, period: Period)

時間戳記

將時間戳記截斷為指定的期間。例如,datefloor(@timestamp, 1h)@timestamp 的所有值截斷為半點小時。

dateceil(timestamp: Timestamp, period: Period)

時間戳記

將時間戳記無條件進位到指定期間,然後截斷。例如,dateceil(@timestamp, 1h)@timestamp 的所有值截斷為整點小時。

fromMillis(fieldName: number)

時間戳記

解譯輸入欄位為自 Unix epoch 以來的毫秒數,並將其轉換為時間戳記。

toMillis(fieldName: Timestamp)

number

將指定欄位中找到的時間戳記轉換為數字,代表自 Unix epoch 以來的毫秒數。例如:toMillis(@timestamp) 會將時間戳記 2022-01-14T13:18:031.000-08:00 轉換為 1642195111000

注意

目前, CloudWatch 日誌深入解析不支援使用人類可讀的時間戳記篩選記錄。

一般函數

一般函數

一般函數可用於 fieldsfilter 命令,也可以作為其他函數的引數使用。

函式 結果類型 描述

ispresent(fieldName: LogField)

Boolean

如果欄位存在,傳回 true

coalesce(fieldName: LogField, ...fieldNames: LogField[])

LogField

傳回清單中的第一個非空值

IP 地址字串函數

IP 地址字串函數

IP 地址字串函數可用於 filterfields 命令,也可以作為其他函數的引數使用。

函式 結果類型 描述

isValidIp(fieldName: string)

布林值

如果欄位是有效的 IPv4 或 IPv6 地址,則會傳回 true

isValidIpV4(fieldName: string)

boolean

如果欄位是有效的 IPv4 地址,則傳回 true

isValidIpV6(fieldName: string)

boolean

如果欄位是有效的 IPv6 地址,則傳回 true

isIpInSubnet(fieldName: string, subnet: string)

boolean

如果欄位是指定 v4 或 v6 子網路內的有效 IPv4 或 IPv6 地址,則傳回 true。指定子網路時,請使用 CIDR 標記法,例如 192.0.2.0/242001:db8::/32,其中 192.0.2.02001:db8:: 是 CIDR 區塊的起始位置。

isIpv4InSubnet(fieldName: string, subnet: string)

boolean

如果欄位是指定 v4 子網路內的有效 IPv4 地址,則傳回 true。指定子網路時,請使用 CIDR 標記法,例如 192.0.2.0/24,其中 192.0.2.0 是 CIDR 區塊的起始位置。

isIpv6InSubnet(fieldName: string, subnet: string)

boolean

如果欄位是指定 v6 子網路內的有效 IPv6 地址,則傳回 true。指定子網路時,請使用 CIDR 標記法,例如 2001:db8::/32,其中 2001:db8:: 是 CIDR 區塊的起始位置。

字串函數

字串函數

字串函數可用於 fieldsfilter 命令,也可以作為其他函數的引數使用。

函式 結果類型 描述

isempty(fieldName: string)

Number

如果欄位遺失或是空白字串,傳回 1

isblank(fieldName: string)

Number

如果欄位遺失、是空白字串或只包含空格,傳回 1

concat(str: string, ...strings: string[])

string

串連字串。

ltrim(str: string)

ltrim(str: string, trimChars: string)

string

如果函數沒有第二個引數,則會移除字串左側的空格。如果函數有第二個字串引數,則不會移除空格。而是從 str 左側移除 trimChars 中的字元。例如,ltrim("xyZxyfooxyZ","xyZ") 傳回 "fooxyZ"

rtrim(str: string)

rtrim(str: string, trimChars: string)

string

如果函數沒有第二個引數,則會移除字串右側的空格。如果函數有第二個字串引數,則不會移除空格。而是從 str 右側移除 trimChars 的字元。例如,rtrim("xyZfooxyxyZ","xyZ") 傳回 "xyZfoo"

trim(str: string)

trim(str: string, trimChars: string)

string

如果函數沒有第二個引數,則會移除字串兩側的空格。如果函數有第二個字串引數,則不會移除空格。而是從 str 兩側移除 trimChars 的字元。例如,trim("xyZxyfooxyxyZ","xyZ") 傳回 "foo"

strlen(str: string)

number

以 Unicode 字碼指標傳回字串的長度。

toupper(str: string)

string

將字串轉換成大寫。

tolower(str: string)

string

將字串轉換成小寫。

substr(str: string, startIndex: number)

substr(str: string, startIndex: number, length: number)

string

傳回從數字引數指定的索引到字串結尾的子字串。如果函數有第二個數字引數,則是包含要擷取的子字串長度。例如,substr("xyZfooxyZ",3, 3) 傳回 "foo"

replace(fieldName: string, searchValue: string, replaceValue: string)

string

replaceValue 取代 fieldName: string 中出現的所有 searchValue

例如:函式 replace(logGroup,"smoke_test","Smoke") 搜尋欄位 logGroup 中包含字串值 smoke_test 的日誌事件,並將值替換為字串 Smoke

strcontains(str: string, searchValue: string)

number

如果 str 包含 searchValue,則傳回 1,否則傳回 0。