CloudWatch Logs Insights のクエリ構文についてメモ

そもそもCloudWatch Logs Insightsとは?
CloudWatch Logsのログデータをクエリ言語を利用して簡単に検索したり分析ができるサービス
CloudWatch Logs Insights では、クエリ言語を使用してロググループに対するクエリの実行します。クエリ構文は、一般的な関数、算術演算と比較演算、正規表現など、さまざまな関数とオペレーションをサポートしています。複数のコマンドを含むクエリを作成します。コマンドはパイプ文字 (|) で区切ります。コメントを含むクエリを作成します。ハッシュ文字 (#) を使用してコメントを開始します。

CloudWatch Logs Insights クエリコマンド
display
display
を使用して、クエリ結果の特定のフィールドを表示します。
fields
fields
を使用して、クエリ結果の特定のフィールドを表示します。
filter
filter
を使用して、1 つ以上の条件に一致するログイベントを取得します。
個人的にはこれはよく使っています(これぐらいしか使えていない)
こんな感じで指定可能 (range の値が 3000 より大きいすべてのログイベントを返すクエリの例)
fields @timestamp, @message
| filter (range>3000)
| sort @timestamp desc
| limit 20
複数の条件を組み合わせる際はand
やor
が利用できる
フィルターコマンドで正規表現を使う
-
キーワード
in
-
in
の後に対象の配列を配置することで、集合要素関係をテストできる。 -
in
を使用するクエリを作成して、フィールドに文字列の一致があるログイベントを返すことができます。 - フィールドは完全な文字列である必要がある。
# 例 fields @timestamp, @message | filter logGroup in ["example_group"]
-
-
キーワード
like
(not like
)- 部分文字列を一致させることができます。
- 部分文字列を正規表現の演算子と一致させるには、一致させたい部分文字列をスラッシュで囲みます。
# 例 部分文字列を like と一致させる fields f1, f2, f3 | filter f1 like "Exception"
# 例 部分文字列を正規表現と一致させる fields f1, f2, f3 | filter f1 like /Exception/
≒ where f1 like '%Exception%'
のイメージ
# ピリオド記号(.)を正規表現のワイルドカードとして使用可能
# 例は f1 の値が文字列 ServiceLog で始まる一致を返す
fields f1, f2, f3
| filter f1 like /ServiceLog./
# 大文字と小文字を区別しないパターンで部分文字列を一致させる
# 例は、f1 に単語 Exception または exception が含まれるログベントを返す
fields f1, f2, f3
| filter f1 like /(?i)Exception/
こんな感じで使えそう
@messageに文字列「error」(大文字と小文字を区別しない)が含まれるログを、タイムスタンプの順に20件取得する
fields @timestamp, @message
| filter @message like /(?i)error/
| sort @timestamp desc
| limit 20
stats (todo)
stats
を使用して、ログフィールド値で集約統計を計算します。
関数はavg()
、sum()
、count()
、,min()
、max()
などがサポートされています。
またstatsとbyを使うことでSQLのGroup byのように値を集約することもできます。
filter @message
| stats count(f1) by f1
sort
sort
を使用して、ログイベントを昇順 (asc
) または降順 (desc
) で表示します。
limit
limit
を使用して、クエリで返すログイベントの数を指定します。
parse (todo)
parse
を使用して、ログフィールドからデータを抽出し、クエリで処理できるエフェメラルフィールドを作成します。
ネストされた JSON フィールドは正規表現で解析できます。

Log Fields
次の5つのログフィールドはAmazon CloudWatch Logs に送信されるすべてのログにおいて自動的に生成されます。
-
@message
⋯ 生の未解析ログイベント。ログのメッセージ本文 -
@timestamp
⋯ ログのタイムスタンプ -
@ingestionTime
⋯ログイベントが CloudWatch Logs によって受信された時間 -
@logStream
⋯ ログストリームの名前 -
@log
⋯ロググループ識別子
参考:

参考になった記事