ブール、比較、数値、日時、その他の関数 - Amazon CloudWatch Logs

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ブール、比較、数値、日時、その他の関数

CloudWatch Logs Insights は、以下のセクションで説明するように、クエリ内の他の多くの演算や関数をサポートしています。

算術演算子

算術演算子は、数値データ型を引数として受け入れ、数値結果を返します。算術演算子は、filter コマンドと fields コマンドで使用します。また、他の関数の引数としても使用します。

Operation 説明

a + b

加算

a - b

減算

a * b

乗算

a / b

除算

a ^ b

指数 (2 ^ 38 を返します)

a % b

残余または剰余 (10 % 31 を返します)

ブール演算子

ブール演算子 andor、および not を使用します。

注記

ブール演算子は、TRUE または FALSE の値を返す関数でのみ使用します。

比較演算子

比較演算子は、すべてのデータ型を引数として受け入れ、ブール値の結果を返します。比較オペレーションは、filter コマンドで使用します。また、他の関数の引数としても使用します。

演算子 説明

=

Equal

!=

Not equal

<

Less than (より小さい)

>

Greater than (より大きい)

<=

以下

>=

以上

数値演算子

数値オペレーションは、数値データ型を引数として受け入れ、数値結果を返します。数値オペレーションは、filter コマンドと fields コマンドで使用します。また、他の関数の引数としても使用します。

Operation 結果タイプ 説明

abs(a: number)

数値

絶対値

ceil(a: number)

数値

上限 (a の値より大きい最小整数) に切り上げられます。

floor(a: number)

数値

下限 (a の値より小さい最大整数) に切り下げられます。

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

数値

最大値を返します

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

数値

最小値を返します

log(a: number)

数値

自然対数

sqrt(a: number)

数値

平方根

構造タイプ

マップまたはリストは、CloudWatch Logs Insights の構造タイプであり、クエリの属性にアクセスして使用できます。

例: マップまたはリストを取得するには

jsonParse を使用して、JSON 文字列であるフィールドをマップまたはリストに解析します。

fields jsonParse(@message) as json_message
例: 属性にアクセスするには

ドットアクセス演算子 (map.attribute) を使用して、マップ内の項目にアクセスします。マップ内の属性に特殊文字が含まれている場合は、バックティックを使用して属性名 (map.attributes.`special.char`) を囲みます。

fields jsonParse(@message) as json_message | stats count() by json_message.status_code

ブラケットアクセス演算子 (list[index]) を使用して、リスト内の特定の位置にある項目を取得します。

fields jsonParse(@message) as json_message | filter json_message.users[1].action = "PutData"

キー名に特殊文字が含まれている場合は、特殊文字をバックティック (``) でラップします。

fields jsonParse(@message) as json_message | filter json_message.`user.id` = "123"
例: 空の結果

マップとリストは、文字列、数値、および日時関数では null として扱われます。

fields jsonParse(@message) as json_message | display toupper(json_message)

マップとリストを他のフィールドと比較すると、 になりますfalse

注記

deduppattern、および でのマップsortとリストstatsの使用はサポートされていません。

日時関数

日時関数

日時関数は、fields コマンドと filter コマンドで使用します。また、他の関数の引数としても使用します。これらの関数では、集計関数を使用してクエリの時間バケットを作成します。数値と次のいずれかで構成される期間を使用します。

  • ms はミリ秒

  • s は秒

  • m は分

  • h は時間

たとえば、10m は 10 分、1h は 1 時間です。

注記

日時関数に最適な時間単位を使用します。CloudWatch Logs は、選択した時間単位に従ってリクエストを制限します。例えば、s を使用するすべてのリクエストの最大値として 60 を上限とします。したがって、bin(300s) を指定すると、CloudWatch Logs はこれを 60 秒として実際に実装します。60 は 1 分間の秒数であるため、CloudWatch Logs は s で 60 を超える数値を使用しません。5 分間のバケットを作成するには、代わりに bin(5m) を使用します。

ms の上限は 1000、sm の上限は 60、h の上限は 24 です。

次の表は、クエリコマンドで使用できるさまざまな日付時刻関数のリストを示したものです。このリストには、各関数の結果タイプと説明が記載されています。

ヒント

クエリコマンドを作成するときに、時間間隔セレクタを使用してクエリの対象とする期間を選択できます。例えば、5~30 分間隔、1 時間、3 時間、12 時間間隔、またはカスタム時間枠の期間を設定できます。また、特定の日付の間で期間を指定することもできます。

関数 結果タイプ 説明

bin(period: Period)

Timestamp

@timestamp の値を特定の期間に切り上げ、次に切り詰めます。例えば、bin(5m)@timestamp の値を最も近い 5 分に四捨五入します。

これを使用して、複数のログエントリをクエリにまとめることができます。次の例では、1 時間あたりの例外の数を返します。

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

bin 関数では、次の時間単位と略語がサポートされています。複数の文字を含むすべての単位と略語では、s の複数形への追加がサポートされています。したがって、hr および hrs の両方とも時間を指定して機能します。

  • 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)

Timestamp

タイムスタンプを特定の期間に切り詰めます。たとえば、datefloor(@timestamp, 1h)@timestamp のすべての値を 1 時間の下限に切り詰めます。

dateceil(timestamp: Timestamp, period: Period)

タイムスタンプ

タイムスタンプを特定の期間に切り上げ、次に切り詰めます。たとえば、dateceil(@timestamp, 1h)@timestamp のすべての値を 1 時間の上限に切り詰めます。

fromMillis(fieldName: number)

タイムスタンプ

入力フィールドを Unix エポックからのミリ秒数として解釈し、タイムスタンプに変換します。

toMillis(fieldName: Timestamp)

数値

指定されたフィールドで見つかったタイムスタンプを、Unix エポックからのミリ秒を表す数値に変換します。例えば、toMillis(@timestamp) はタイムスタンプを 2022-01-14T13:18:031.000-08:00 から 1642195111000 に変換します。

now()

数値

クエリ処理が開始された時刻をエポック秒単位で返します。この関数は引数を取りません。

これを使用して、現在の時刻に従ってクエリ結果をフィルタリングできます。

たとえば、次のクエリは、過去 2 時間の 4xx エラーをすべて返します。

parse @message "Status Code: *;" as statusCode\n | filter statusCode >= 400 and statusCode <= 499 \n | filter toMillis(@timestamp) >= (now() * 1000 - 7200000)

次の の例では、 errorまたは という単語を含む過去 5 時間のすべてのログエントリを返します。 failure

fields @timestamp, @message | filter @message like /(?i)(error|failure)/ | filter toMillis(@timestamp) >= (now() * 1000 - 18000000)
注記

現在、CloudWatch Logs Insights では、可読性のあるタイムスタンプが記録されているログのフィルタリングをサポートしていません。

一般関数

一般関数

一般関数は、fields コマンドと filter コマンドで使用します。また、他の関数の引数としても使用します。

関数 結果タイプ 説明

ispresent(fieldName: LogField)

ブール値

フィールドが存在する場合は true を返します

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

LogField

リストから最初の null でない値を返します

JSON 関数

JSON 関数

fields および filter コマンドで JSON 関数を使用し、他の関数の引数として を使用します。

関数 結果タイプ 説明

jsonParse(fieldName: string)

マップ | リスト | 空

入力が JSON オブジェクトまたは JSON 配列の文字列表現である場合、マップまたはリストを返します。入力が表現の 1 つでない場合、空の値を返します。

jsonStringify(fieldName: Map | List)

String

マップまたはリストデータから JSON 文字列を返します。

IP アドレス文字列関数

IP アドレス文字列関数

IP アドレス文字列関数は、filter コマンドと fields コマンドで使用します。また、他の関数の引数としても使用します。

関数 結果タイプ 説明

isValidIp(fieldName: string)

ブール型

フィールドが有効な IPv4 または IPv6 アドレスである場合、true を返します。

isValidIpV4(fieldName: string)

ブール型

フィールドが有効な IPv4 アドレスである場合、true を返します。

isValidIpV6(fieldName: string)

ブール型

フィールドが有効な IPv6 アドレスである場合、true を返します。

isIpInSubnet(fieldName: string, subnet: string)

ブール型

指定された v4 または v6 サブネット内でフィールドが有効な IPv4 または IPv6 アドレスである場合、true を返します。サブネットを指定するときは、192.0.2.0/24 または 2001:db8::/32 などの CIDR 表記を使用します。192.0.2.0 または 2001:db8:: は CIDR ブロックの開始アドレスです。

isIpv4InSubnet(fieldName: string, subnet: string)

boolean

指定された v4 サブネット内でフィールドが有効な IPv4 アドレスである場合、true を返します。サブネットを指定するときは、192.0.2.0/24 などの CIDR 表記を使用します。192.0.2.0 は CIDR ブロックの開始アドレスです。

isIpv6InSubnet(fieldName: string, subnet: string)

boolean

指定された v6 サブネット内でフィールドが有効な IPv6 アドレスである場合、true を返します。サブネットを指定するときは、2001:db8::/32 などの CIDR 表記を使用します。2001:db8:: は CIDR ブロックの開始アドレスです。

文字列関数

文字列関数

文字列関数は、fields コマンドと filter コマンドで使用します。また、他の関数の引数としても使用します。

関数 結果タイプ 説明

isempty(fieldName: string)

数値

フィールドが欠落しているか、空の文字列である場合、1 を返します。

isblank(fieldName: string)

数値

フィールドが欠落しているか、空の文字列であるか、空白が含まれている場合、1 を返します。

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

文字列

複数の文字列を連結します。

ltrim(str: string)

ltrim(str: string, trimChars: string)

文字列

関数に 2 番目の文字列引数がない場合、文字列の左側からホワイトスペースを削除します。関数に 2 番目の文字列引数がある場合、ホワイトスペースは削除されません。その場合、strの左から trimChars 個の文字が削除されます。たとえば、ltrim("xyZxyfooxyZ","xyZ")"fooxyZ" を返します。

rtrim(str: string)

rtrim(str: string, trimChars: string)

文字列

関数に 2 番目の文字列引数がない場合、文字列の右側からホワイトスペースを削除します。関数に 2 番目の文字列引数がある場合、ホワイトスペースは削除されません。その場合、strの右から trimChars 個の文字が削除されます。たとえば、rtrim("xyZfooxyxyZ","xyZ")"xyZfoo" を返します。

trim(str: string)

trim(str: string, trimChars: string)

文字列

関数に 2 番目の文字列引数がない場合、文字列の両方の端からホワイトスペースを削除します。関数に 2 番目の文字列引数がある場合、ホワイトスペースは削除されません。その場合、strの両方から trimChars 個の文字が削除されます。たとえば、trim("xyZxyfooxyxyZ","xyZ")"foo" を返します。

strlen(str: string)

数値

文字列の長さを Unicode コードポイントで返します。

toupper(str: string)

文字列

文字列を大文字に変換します。

tolower(str: string)

文字列

文字列を小文字に変換します。

substr(str: string, startIndex: number)

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

文字列

数値引数で指定されたインデックスから文字列の末尾までの部分文字列を返します。関数に 2 番目の数値引数がある場合、この引数には取得される部分文字列の長さが含まれます。たとえば、substr("xyZfooxyZ",3, 3)"foo" を返します。

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

文字列

searchValuefieldName: string のすべてのインスタンスを replaceValue に置き換えます。

例えば、関数 replace(logGroup,"smoke_test","Smoke") はフィールド logGroup に文字列値 smoke_test を含むログイベントを検索し、その値を文字列 Smoke に置き換えます。

strcontains(str: string, searchValue: string)

数値

strsearchValue が含まれている場合は 1 を返し、それ以外の場合は 0 を返します。