はじめに
みなさん、CloudWatch Logs Insightsを利用されているでしょうか?
CloudWatch Logs Insightsを使用すると、Amazon CloudWatch Logsのログデータをインタラクティブに検索し分析することが可能になります。
今回は、Lambdaのログを想定して、便利なクエリ言語 stats
でいろいろ可視化してみました。
便利なクエリ構文 stats
stats
を使用すると、ログデータを棒グラフ、折れ線グラフ、積み上げ面グラフなどで視覚化できます。
ログデータのパターンを効率的に可視化できます。
1つ以上の集計関数を使用します。
公式ドキュメント クエリ構文 – stats
集計して可視化してみた
複数のコマンドを含むクエリを作成するときは、コマンドをパイプ文字 (|) で区切ります
例) ログメッセージに特定の文字列を含むログデータ数を集計する
filter
構文で条件によってログデータを絞り込み、その数をカウントします
filter @message like /Exception/ | stats count(*)
例) ログメッセージに特定の文字列を含むログデータの一定時間あたりの数を集計する
bin
関数を利用して1時間ごとの特定の文字列を含むログデータ数を集計します
filter @message like /Exception/ | stats count(*) by bin(1h)
結果
bin(1h) | count(*) |
---|---|
2023-09-14T13:00:00.000+09:00 | 10 |
2023-09-14T12:00:00.000+09:00 | 16 |
2023-09-14T11:00:00.000+09:00 | 0 |
tips1: filterは複数条件も設定できる
フィルターする条件は and
or
で連結できる
filter (@message like /Exception/ and @message not like /AccessDenied/) | stats count(*) by bin(1h)
tips2: filterを使わない方法もある
stats sum(@message like /Exception/ and @message not like /AccessDenied/) by bin(1h)
tips3: bin(xx)をJST基準にする
bin(xx)はUTC基準で集計されています。
JST基準で集計するにはdateFloor
を使用して以下のようにします。
filter @message like /Exception/ stats count(*) by dateFloor(@timestamp + 9 * 60 * 60 * 1000, 1h)
例) 特定のキーの値でグルーピングして集計する
ログデータがJSON形式で出力されていることが前提です。
例として、ログデータにstatus
というキーがあるとすると、status
の値単位でグルーピングして集計できます。
{"status": "200"} {"status": "200"} {"status": "401"} {"status": "200"} .....
以下のクエリでstatus
の値単位でグルーピングして集計できます。
stats count(*) by status
結果
status | count(*) |
---|---|
200 | 18 |
401 | 2 |
例) 表示結果をきれいにしたい
表のヘッダー名や並べ方を調整したい場合は、display
、 as
などを使用します。
以下は、公式ドキュメントにあるLambda ログのクエリ を少し変えて、1時間ごとの値を集計するようにしました。
as
で集計結果の項目に任意で名前をつけることができますdisplay
で指定した項目だけ出力されます。また、左から順の表示になりますstats
は,
区切りで複数設定できます
filter @type = "REPORT" | stats max(@memorySize / 1000 / 1000) as provisonedMemoryMB, min(@maxMemoryUsed / 1000 / 1000) as smallestMemoryRequestMB, avg(@maxMemoryUsed / 1000 / 1000) as avgMemoryUsedMB, max(@maxMemoryUsed / 1000 / 1000) as maxMemoryUsedMB, provisonedMemoryMB - maxMemoryUsedMB as overProvisionedMB by bin(1h) | display overProvisionedMB, avgMemoryUsedMB, provisonedMemoryMB, maxMemoryUsedMB
結果
overProvisionedMB | avgMemoryUsedMB | provisonedMemoryMB | maxMemoryUsedMB |
---|---|---|---|
13 | 110.4655 | 128 | 115 |
13 | 110.5456 | 128 | 115 |
13 | 111.0041 | 128 | 115 |
おわりに
以上、stats
で集計して可視化してみました。
今後のログ調査や運用で役に立ちそうだなと思いました!