はじめに
障害時にALBのアクセスログを素早く分析できるようになりたいと思い手を動かしながら解説していきます。
やること
S3に保存したALBのアクセスログを、Athenaを使って分析する。
必要な工程
大きく分けると以下になります。
- データベースを作成する
- テーブルを作成する
- クエリする
正直公式の解説が丁寧すぎたので解説は必要ないかもなのですが、実施してみてわかりにくかったことをいくつか書いていきます。
データベースを作成する
これはAthenaで使用するデータベースを作成します。
次に作成するテーブルをこのデータベースの中に作成することになります。
この時、保存先のS3に対しての設定で、
”Assign bucket owner full control over query results”
というチェックボックスにチェックを入れないとクエリ結果が正しくS3に保存されないので注意が必要です。
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/step-1-create-a-database.html
テーブルを作成する
これは公式がALB用のクエリを用意してくれているのでそのまま使用しました。
S3に保存されているALBのアクセスログのデータをクエリする際に必要なカラムを用意してくれます。
location,account id,regionを自身の環境に合わせて編集すればそのまま使用できます。
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/create-alb-access-logs-table-partition-projection.html
クエリする
SELECT COUNT(request_verb) AS
count,
request_verb,
client_ip
FROM alb_access_logs
GROUP BY request_verb, client_ip
LIMIT 100;
とりあえず上記のクエリで、HTTPメソッドと、クライアントIPの上位100でクエリを叩いたところいくつかメソッド毎にクライアントIPも表示されました。
終わりに
正直今回の練習では、公式の解説どおりに実行しただけなので、じゃあこれを実際の障害発生時にどうやって活かそうか?みたいなところまで理解できていないので、次回にいろいろなパターンでクエリを叩いてみて検証してみようと思います。