CloudWatch Logs Insights のクエリ構文
CloudWatch Logs Insights は、ロググループに対するクエリの実行に使用できるクエリ言語をサポートしています。クエリ構文は、一般的な関数、算術演算と比較演算、正規表現など、さまざまな関数とオペレーションをサポートしています。クエリには複数のクエリコマンドを含めることができます。クエリ内のクエリコマンドは、Unix 形式のパイプ文字 (|) で区切ります。クエリ構文の詳細については、「サポートされているオペレーションと関数」を参照してください。
CloudWatch Logs Insights は、クエリ内でのコメントの使用をサポートしています。ハッシュ記号 (#) で始まる行は無視されます。CloudWatch Logs Insights は、多くのログタイプのフィールドを自動で検出し、@ シンボルで始まるフィールドを生成します。CloudWatch Logs が自動的に生成するフィールドの詳細については、「Amazon CloudWatch ユーザーガイド」の「サポートされるログと検出されるフィールド」を参照してください。
CloudWatch Logs Insights クエリコマンド
次の表は、サポートされている CloudWatch Logs Insights のクエリコマンドおよびベーシックな例のリストです。クエリとその他のログタイプの一般的なクエリの例については、「Amazon CloudWatch Logs ユーザーガイド」の「サンプルクエリ」を参照してください。
コマンド | 説明 | 例 |
---|---|---|
|
クエリ結果に表示するフィールドを指定します。このコマンドをクエリで複数回使用すると、クエリ結果には、最後に使用した |
次のクエリの例にはフィールド
|
|
指定したフィールドをログイベントから取得して表示します。クエリに |
次の例では、
次の例では、エフェメラルフィールド
|
|
クエリの結果を 1 つ以上の条件に基づいてフィルタリングします。 |
次の例では、
次の例は先ほどのクエリと似ていますが、クエリの結果には個別のフィールドが表示されません。代わりに、2 つ目のクエリでは duration が 2000 を超えるすべてのログイベントについて、
次の例では、
次の例では、
次の例では、
次の例では、
この最後の例では、値が「foo」、「bar」、または「1」の
|
|
ログフィールドの値で集計した統計を算出します。
|
次の例では、
次の例では、1 時間あたりの例外の数をカウントします。
この例では、エフェメラルフィールド [exceptionCount] のメッセージに [「Exception」] という単語が現れた合計回数が |
|
取得したログイベントをソートします。昇順 ( |
次の例では、返されたイベントを
|
|
クエリから返されるログイベントの数を指定します。 これを使用して、結果を小さい数値に制限し、関連する結果の小さいセットを表示することができます。さらに、 制限を指定しない場合、クエリにはデフォルトで最大 1000 行表示されます。 |
次の例では、
|
|
ログフィールドからデータを抽出し、1 つ以上のエフェメラルフィールドを作成してクエリでさらに処理できるようにします。
glob 表現の場合は、定数文字列 (一重引用符または二重引用符で囲まれた文字) を 正規表現をスラッシュ (/) で囲みます。式では、抽出される一致した文字列の各部が、名前付きキャプチャグループで囲まれます。名前付きキャプチャグループの例は |
この単一のログ行を例として使用します。
次の 2 つの
この単一のログ行を例として使用します。
次の例では、正規表現を使用して、ログフィールド
|
クエリコマンドを操作するためのガイドライン
クエリで指定されたログフィールドで、@
記号、ピリオド (.
)、英数字以外の文字を含むものは、バッククォートキー (`
) で囲む必要があります。例えば、ログフィールド foo-bar
では英数字以外の文字であるハイフン (`foo-bar`
) が含まれているため、バッククォート (-
) で囲む必要があります。
display
コマンドを使用して、クエリの結果で表示させたいフィールドを表示します。display
コマンドは、指定したフィールドだけを表示します。クエリに複数の display
コマンドが含まれている場合、クエリ結果には、最後の display
コマンドで指定したフィールドのみが表示されます。
fields
コマンドを as キーワードと共に使用すると、ログイベント内の関数とフィールドを使用してエフェメラルフィールドを作成できます。例えば、fields ispresent as isRes
はクエリの残りの部分で使用できる isRes
という名前のエフェメラルフィールドを作成します。
isRes
の値は 0 か 1 のどちらかになり、resolverArn
が検出されたフィールドであるかどうかによって変わります。クエリに複数の fields
コマンドがあり、display
コマンドが含まれない場合は、fields
コマンドで指定されたすべてのフィールドが表示されます。
フィルターコマンドの一致と正規表現
フィルターコマンドは、正規表現の使用をサポートします。以下の比較演算子 (=
、!=
、<
、<=
、>
、>=
) とブール演算子 (and
、or
、および not
) を使用できます。
ユーザーが正規表現に精通していることを前提としています。CloudWatch Logs Insights は、複数の正規表現マッチングライブラリである Hyperscan をサポートしています。ハイパースキャンの詳細については、ハイパースキャンのウェブサイト
キーワード in
を使用して集合要素関係をテストし、配列内の要素をチェックできます。配列の要素をチェックするには、in
の後に対象の配列を配置します。ブール演算子 not
および in
を使用できます。in
を使用するクエリを作成して、フィールドに文字列の一致があるログイベントを返すことができます。フィールドは完全な文字列でなければなりません。例えば、次のコードスニペットは、フィールド logGroup
が完全な文字列 example_group
であるログイベントを返すために in
を使用するクエリを示しています。
fields @timestamp, @message | filter logGroup in ["example_group"]
キーワードフレーズ like
および not like
を使用して、部分文字列を一致させることができます。正規表現の演算子 =~
を使用して部分文字列を一致させることができます。like
および not like
で部分文字列を一致させるには、単一引用符または二重引用符で一致させたい部分文字列を囲みます。正規表現パターンは、like
および not like
と共に使用できます。部分文字列を正規表現の演算子と一致させるには、一致させたい部分文字列をスラッシュで囲みます。次の例には、filter
コマンドを使用して部分文字列を照合する方法を示すコードスニペットが含まれます。
例: 部分文字列の一致
以下の例では、f1
に単語 Exception が含まれているログイベントを返します。これら 3 つの例すべてで、大文字と小文字が区別されます。
最初の例では、部分文字列を like
と一致させます。
fields f1, f2, f3 | filter f1 like "Exception"
2 番目の例では、部分文字列を like
および正規表現パターンと一致させます。
fields f1, f2, f3 | filter f1 like /Exception/
最後の例では、部分文字列を正規表現と一致させます。
fields f1, f2, f3 | filter f1 =~ /Exception/
例: 部分文字列をワイルドカードと一致させる
アスタリスク記号 (*
) を正規表現のワイルドカードとして使用して、部分文字列に一致させることができます。次の例は、f1
に文字 E で始まる単語が含まれているログイベントを返します。この例では大文字と小文字が区別されます。
fields f1, f2, f3 | filter f3 like /E*/
アスタリスク記号の前にピリオドを置いて (.*)、できるだけ多くの一致を返す貪欲な量指定子を作成することができます。
例: 一致から部分文字列を除外する
次の例は、f1
に Exception という単語が含まれないログイベントを返すクエリを示しています。この例では大文字と小文字が区別されます。
fields f1, f2, f3 | filter f1 not like "Exception"
例: 大文字と小文字を区別しないパターンで部分文字列を一致させる
大文字と小文字を区別しない部分文字列を、like
および正規表現と一致させることができます。次のパラメータ (?i) を、一致させる部分文字列の前に配置します。次の例は、f1
に単語 Exception または exception が含まれるログベントを返すクエリを示しています。
fields f1, f2, f3 | filter f1 like /(?i)Exception/
クエリでのエイリアスの使用
as
を使用してクエリに 1 つ以上のエイリアスを作成できます。エイリアスは、fields
コマンド、stats
コマンド、および sort
コマンドでサポートされています。
ログフィールドのエイリアスと、オペレーションや関数の結果のエイリアスを作成できます。
例
クエリコマンドでのエイリアスの使用例は以下のとおりです。
fields abs(myField) as AbsoluteValuemyField, myField2
myField
の絶対値を AbsoluteValuemyField
として返します。また、myField2
フィールドも返します。
stats avg(f1) as myAvgF1 | sort myAvgF1 desc
f1
の平均値を myAvgF1
として計算し、結果の値を降順で返します。
クエリでのコメントの使用
#
文字を使用して、クエリの行をコメントアウトすることができます。#
文字で始まる行は無視されます。この機能は、クエリに説明を追加したり、行を削除することなく 1 回の呼び出しで複雑なクエリの一部を一時的に無視したりする場合に役立ちます。
次の例では、クエリの 2 行目は無視されます。
fields @timestamp, @message # | filter @message like /delay/ | limit 20
サポートされているオペレーションと関数
クエリ言語は、以下の表に示すように、多数のタイプのオペレーションと関数をサポートしています。
比較オペレーション
比較オペレーションは、filter
コマンドで使用できます。また、他の関数の引数としても使用できます。比較オペレーションは、すべてのデータ型を引数として受け入れ、ブール値の結果を返します。
= != < <= > >=
ブール演算子
ブール演算子 and
、or
、および not
を使用できます。これらのブール演算子は、ブール値を返す関数でのみ使用できます。
算術演算
算術オペレーションは、filter
コマンドと fields
コマンドで使用できます。また、他の関数の引数としても使用できます。算術オペレーションは、数値データ型を引数として受け入れ、数値結果を返します。
オペレーション | 説明 |
---|---|
|
加算 |
|
減算 |
|
乗算 |
|
除算 |
|
指数。 |
|
残余または剰余。 |
数値演算子
数値オペレーションは、filter
コマンドと fields
コマンドで使用できます。また、他の関数の引数としても使用できます。数値オペレーションは、数値データ型を引数として受け入れ、数値結果を返します。
オペレーション | 結果タイプ | 説明 |
---|---|---|
|
数値 |
絶対値。 |
|
数値 |
上限 ( |
|
数値 |
下限 ( |
|
数値 |
最大値を返します。 |
|
数値 |
最小値を返します。 |
|
数値 |
自然対数。 |
|
数値 |
平方根。 |
一般関数
一般関数は、filter
コマンドと fields
コマンドで使用できます。また、他の関数の引数としても使用できます。
関数 | 結果タイプ | 説明 |
---|---|---|
|
ブール型 |
フィールドが存在する場合は |
|
LogField |
リストから最初の null でない値を返します。 |
文字列関数
文字列関数は、filter
コマンドと fields
コマンドで使用できます。また、他の関数の引数としても使用できます。
関数 | 結果タイプ | 説明 |
---|---|---|
|
数値 |
フィールドが欠落しているか、空の文字列である場合、 |
|
数値 |
フィールドが欠落しているか、空の文字列であるか、空白が含まれている場合、 |
|
文字列 |
複数の文字列を連結します。 |
|
文字列 |
関数に 2 番目の文字列引数がない場合、文字列の左側からホワイトスペースを削除します。関数に 2 番目の文字列引数がある場合、ホワイトスペースは削除されません。その場合、 |
|
文字列 |
関数に 2 番目の文字列引数がない場合、文字列の右側からホワイトスペースを削除します。関数に 2 番目の文字列引数がある場合、ホワイトスペースは削除されません。その場合、 |
|
文字列 |
関数に 2 番目の文字列引数がない場合、文字列の両方の端からホワイトスペースを削除します。関数に 2 番目の文字列引数がある場合、ホワイトスペースは削除されません。その場合、 |
|
数値 |
文字列の長さを Unicode コードポイントで返します。 |
|
文字列 |
文字列を大文字に変換します。 |
|
文字列 |
文字列を小文字に変換します。 |
|
文字列 |
数値引数で指定されたインデックスから文字列の末尾までの部分文字列を返します。関数に 2 番目の数値引数がある場合、この引数には取得される部分文字列の長さが含まれます。たとえば、 |
|
文字列 |
例えば、関数 |
|
number |
|
日時関数
日時関数は、filter
コマンドと fields
コマンドで使用できます。また、他の関数の引数としても使用できます。これらの関数では、集計関数を使用してクエリの時間バケットを作成できます。数字と m
(分) または h
(時間) で構成される期間も使用できます。たとえば、10m
は 10 分、1h
は 1 時間です。次の表は、クエリコマンドで使用できるさまざまな日付時刻関数のリストを示したものです。このリストには、各関数の結果タイプと説明が記載されています。
クエリコマンドを作成するときに、時間間隔セレクタを使用してクエリの対象とする期間を選択できます。例えば、5~30 分間隔、1 時間、3 時間、12 時間間隔、またはカスタム時間枠の期間を設定できます。また、特定の日付の間で期間を指定することもできます。クエリコマンドの実行方法については、「Amazon CloudWatch Logs ユーザーガイド」の「チュートリアル: サンプルクエリを実行および変更する」を参照してください。
関数 | 結果タイプ | 説明 |
---|---|---|
|
タイムスタンプ |
|
|
タイムスタンプ |
タイムスタンプを特定の期間に切り詰めます。たとえば、 |
|
タイムスタンプ |
タイムスタンプを特定の期間に切り上げ、次に切り詰めます。たとえば、 |
|
タイムスタンプ |
入力フィールドを Unix エポックからのミリ秒数として解釈し、タイムスタンプに変換します。 |
|
数値 |
指定されたフィールドで見つかったタイムスタンプを、Unix エポックからのミリ秒を表す数値に変換します。例えば、 |
現在、CloudWatch Logs Insights では、可読性のあるタイムスタンプが記録されているログのフィルタリングをサポートしていません。
IP アドレス関数
IP アドレス文字列関数は、filter
コマンドと fields
コマンドで使用できます。また、他の関数の引数としても使用できます。
関数 | 結果タイプ | 説明 |
---|---|---|
|
ブール型 |
フィールドが有効な IPv4 または IPv6 アドレスである場合、 |
|
ブール型 |
フィールドが有効な IPv4 アドレスである場合、 |
|
ブール型 |
フィールドが有効な IPv6 アドレスである場合、 |
|
ブール型 |
指定された v4 または v6 サブネット内でフィールドが有効な IPv4 または IPv6 アドレスである場合、 |
|
ブール型 |
指定された v4 サブネット内でフィールドが有効な IPv4 アドレスである場合、 |
|
ブール型 |
指定された v6 サブネット内でフィールドが有効な IPv6 アドレスである場合、 |
統計集計関数
集約関数は、stats
コマンドで使用できます。また、他の関数の引数としても使用できます。
関数 | 結果タイプ | 説明 |
---|---|---|
|
数値 |
指定したフィールドの値の平均。 |
|
数値 |
ログイベントをカウントします。 |
|
数値 |
フィールドの一意な値の数を返します。このフィールドの濃度が非常に高い場合 (一意な値が多数含まれている場合)、 |
|
LogFieldValue |
クエリを実行したログにおける、このログフィールドの値の最大数。 |
|
LogFieldValue |
クエリを実行したログにおける、このログフィールドの値の最小数。 |
|
LogFieldValue |
パーセンタイルは、データセットにおける値の相対的な位置を示します。たとえば、 |
|
数値 |
指定されたフィールドの値の標準偏差。 |
|
数値 |
指定したフィールドの値の合計。 |
統計非集計関数
非集約関数は、stats
コマンドで使用できます。また、他の関数の引数としても使用できます。
関数 | 結果タイプ | 説明 |
---|---|---|
|
LogField |
クエリを実行したうち最も早いタイムスタンプがあるログイベントから |
|
LogField |
クエリを実行したうち最も遅いタイムスタンプがあるログイベントから |
|
LogField |
クエリを実行したログをソートすると最初に来る |
|
LogField |
クエリを実行したログをソートすると最後に来る |