CloudWatch Logs Insightsでログを絞りこむ
CloudWatch logs Insights(インサイト)のクエリの使い方について調べました。
参考文献
基本的なコマンドの概要
| コマンド | 説明 |
|---|---|
| display | クエリ結果に表示するフィールドを指定します。 |
| fields | 指定したフィールドをログイベントから取得して表示します。 |
| filter | クエリの結果を 1 つ以上の条件に基づいてフィルタリングします。 |
| sort | 取得したログイベントをソートします。 |
| stats | ログフィールドの値に基づいて集約統計を計算します。 |
| limit | クエリから返されるログイベントの数を指定します。 |
| parse | ログフィールドからデータを抽出し、1 つ以上のエフェメラルフィールドを作成してクエリでさらに処理できるようにします。 |
コマンドの詳細(私がよく使う順)
fields
説明
- 指定したフィールドをログイベントから取得して表示します。
- fields コマンド内で関数とオペレーションを使用して、表示するフィールド値を変更したり、クエリの残りの部分で使用する新しいフィールドを作成したりできます。
例
# 基本的な記述 fields @timestamp, @message # `message`の中の`mesthod`と`path`を`-`でつなぎ、新たに`api`と命名する fields @timestamp, concat(message.method, '-', message.path) as api
sort
説明
- 取得したログイベントをソートします。
- 昇順 (asc) と降順 (desc) の両方がサポートされています。
例
# 基本的な記述(デフォルトは昇順) fields @timestamp, @message | sort @timestamp # 降順を指定 fields @timestamp, @message | sort @timestamp desc
limit
説明
- クエリから返されるログイベントの数を指定します。
- これを使用して、結果を小さい数値に制限し、関連する結果の小さいセットを表示することができます。
- さらに、limit で 1000 ~ 10,000 の数値を使用し、コンソールに表示されるクエリ結果の行数を、デフォルトの 1000 行より大きい数に増やすこともできます。
- 制限を指定しない場合、クエリにはデフォルトで最大 1000 行表示されます。
例
# 最新の25件を表示する fields @timestamp, @message | sort @timestamp desc | limit 25
filter
説明
- クエリの結果を 1 つ以上の条件に基づいてフィルタリングします。
- filter コマンドでは、さまざまな演算子や式を使用できます。
使用できる演算子・表現
例
# `message.duration`が`2000`より大きいもの、かつ`message.method`が`POST`
fields @timestamp, @message
| sort @timestamp desc
| limit 25
| filter (message.duration > 2000) and (message.method = 'POST')
# message.durationが2000より大きいもの
fields @timestamp, @message
| sort @timestamp desc
| limit 25
| filter @message like /("status":"5\d{2}")/
# statusCodeが配列要素のいずれかと完全一致する
fields @timestamp, @message
| sort @timestamp desc
| limit 25
| filter statusCode in [300,400,500]
stats
説明
- ログフィールドの値に基づいて集約統計を計算します。
statsとbyを併用すると、統計の計算時にデータをグループ化するための 1 つ以上の条件を指定できます。- 統計演算子として、
avg()、sum()、count()、min()、max()などがサポートされています。
例
# f2 の一意の値ごとに f1 の平均値を計算します。 stats avg (f1) by f2
display
説明
- クエリ結果に表示するフィールドを指定します。
- このコマンドをクエリで複数回指定すると、最後に指定したフィールドのみが使用されます。
例
# timestampのみを表示する display @timestamp
parse
説明
その他
クエリのコメントアウト
#文字を使用して、クエリの行をコメントアウトすることができます。#文字で始まる行は無視されます。
演算子・関数
- 比較演算子 (
=、!=、<、<=、>、>=) - ブール演算子 (
and、or、not) - 算術演算子(
+(加算),-(減算),*(乗算),/(除算),^(指数),%(剰余)) - 数値処理(
abs(絶対値),ceil(上限に切り上げられる),floor(下限に切り下げられる),greatest(最大値を返す),least(最小値を返す),log(自然対数),sqrt(平方根)) - 一般関数:省略
- 文字列関数:省略
- 日時関数:省略
- IPアドレス関数:省略
統計集計関数:一部
関数 説明 count() ログイベントをカウントする count(fieldName: LogField) 指定されたフィールド名を含むすべてのレコードをカウントする sum(fieldName: LogField) 指定したフィールドの値の合計 pct(fieldName: LogFieldValue, percent: number) 指定されたフィールドの値の標準偏差 stddev(fieldName: NumericLogField) 指定したフィールドの値の合計