はじめに
だいぶ前の話ですが、2018年11月に「Amazon CloudWatch Logs Insights」がリリースされました。
ざっくりいうと、SQLっぽいクエリでCloudWatch Logsを集計できる。というものです。
使い方
- AWS CloudWatchの右メニューから「インサイト」を選択
- ページトップにある虫眼鏡テキストから対象ログを選択、その右から期間を指定
- クエリ入力欄に集計条件を入力
- 「クエリの実行」ボタンを押下
今回はWebサーバのApacheログを指定し、実際に集計してみます。
fields @message
| parse '* * - - [*] "* * *" * * "*" "*" "*" "*" "*"' as ip1, ip2, time, httpVerb, url, protcol, statusCode, size, refer, ua, nanka1, nanka2, nanka3
| filter statusCode != 200
| stats count(*) as cnt by statusCode
| sort cnt desc
- 対象ログによって、フィールドが定義されています。利用できるフィールドは画面右側の「クエリのヘルプ」から確認できます。今回はApacheログそのものが入っている
@message
をfields句で指定します。 - 指定したフィールドのフォーマットをparse句で指定します。サーバーによってログフォーマットが異なると思いますのでご注意を。
- filter句で抽出条件があるなら指定します。
- stats句で集計方法および集計対象(SQLで言うところのgroup by句)を指定します。
- ソート指定があればsort句で。limitも使えます。
実行結果はこんな感じ
指定した時間内でHTTPステータス(200以外)の件数を集計しています。
おわりに
APIも提供されているので応用すれば、Lambdaとかと組み合わて色々できるハズです!