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) 指定したフィールドの値の合計