S3に保存されているALBのアクセスログから4XX系だけを抜き出す

ALBのアクセスログがS3に吐かれている前提で、S3上にはデフォルトの設定通り、5分ごとのzipファイルが格納されています。
これの日付ファイルをDLして解凍して全ファイルを一つにつなぎ合わせて、4XX系だけ取り出す作業の手順を記載します。

事前準備

まずはクレデンシャルがdirenvで設定してあるディレクトリ配下に作業用ディレクトリを作成します。

$ mkdir log && cd log

以下のコマンドでクレデンシャルが正しいかをバケットリストを表示させることで確認します。

$ aws s3 ls

問題なければ作業を開始します。

作業手順

[前提情報]
・ALBのアクセスログのS3パス
s3://aws.sample.log.elb/sample-prd-web-alb/AWSLogs/XXXXXXXX/elasticloadbalancing/ap-northeast-1/日付

1. S3からの日付ファイルのDL

今回は以下の通り6月1日分のファイルを全てDLします。

$ aws s3 cp s3://aws.sample.log.elb/sample-prd-web-alb/AWSLogs/XXXXXXXX/elasticloadbalancing/ap-northeast-1/2020/06/01/ . --recursive
& ls -la

※ 例えば、特定の時間だけ指定したい場合は以下で可能です(全てexcludeして特定の時間だけincludeさせる)
以下では、日本時間で、2020/5/31の19時台のみ取得しています。(時間指定はGMTになりますので、−9時間した時間を指定すること)
 

$ aws s3 cp s3://aws.sample.log.elb/sample-prd-web-alb/AWSLogs/XXXXXXXX/elasticloadbalancing/ap-northeast-1/2020/05/31/ . --recursive --exclude "*" --include "*20200531T09*"

ファイルが全て格納されたか確認します。

2. zipファイルを解凍

全てのzipファイルを解凍します。

$ gunzip *.gz

3. 1つのファイルにまとめる

2で解凍されたログファイルを一つのファイルにまとめます。

$  *.log > all0601.log

4. 40Xのリクエスト抜き出し

ログファイルから40Xのリクエストのみを抜き出したファイル「0601-40x.log」を作成します。

$ awk '{if($9 ~ 40) print $0}' all0601.log > 0601-40x.log

5. エクセル形式に整える

4で作成したログをエクセルにDrag&Dropし、データ>区切り文字>スペースで整形します。
以下のように分けられたらOKでリクエスト元のIPとHTTPステータスコードが確認できるようになりました。

f:id:tomomiik:20200602125446p:plain

▼参考サイト

kenzo0107.hatenablog.com

今日もお疲れ様でした。