ALBのアクセスログをS3に保存して中身を読み解いてみる

ALBのアクセスログをS3に保存して、ログファイルの中身を読み解いてみました。(初心者向け)
2020.01.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

大阪オフィスのYuiです。

ALBのアクセスログをS3に保存するということを初めてやってみたので手順をメモ&せっかくなのでログの中身を読んでみたいと思います(`・ω・´)

やってみた

ログを保存したいALBを選択し、説明タブの一番下の「属性の編集」をクリックする

「ロードバランサーの属性の編集」というウィンドウが表示されるので、「アクセスログの有効化」にチェックを入れる

「S3の場所」に作成したいS3のバケット名を入力し、「この場所の作成」にチェックを入れる

「保存」をクリックして作業完了!

S3からログを確認する

ALBのアクセスログのディレクトリは以下のようになっています。

[バケット名]/AWSLogs/[AWSアカウントID]/elasticloadbalancing/region/yyyy/mm/dd/aws-account-id_elasticloadbalancing_region_load-balancer-id_end-time_ip-address_random-string.log.gz

S3にバケットが作成されていることを確認する

バケット名をクリックして中身を確認すると前述のディレクトリ内にログが保存されていることが確認できます。

ログを読んでみる

ファイル名をクリックするとファイルのディレクトリからログファイルをダウンロードできるので、ログの中身を読み解いてみます。

以下がログファイルの1行分です。

http 2020-01-28T09:13:45.350130Z app/test-web-alb/85ed29ca355d3c5e xx.xx.xx.xx:58886 xx.xx.xx.xx:80 0.001 0.001 0.000 200 200 478 312 "GET http://test-web-alb-700350318.ap-northeast-1.elb.amazonaws.com:80/ HTTP/1.1" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36" - - arn:aws:elasticloadbalancing:ap-northeast-1:818419231448:targetgroup/test-web-tg/7fee5ba2d0aa6b31 "Root=1-5e2ffb49-b36867310f47acbc77cfe749" "-" "-" 0 2020-01-28T09:13:45.348000Z "forward" "-" "-" "10.1.10.76:80" "200"

半角スペース区切りで項目が列挙されているので、どういう項目があるのかを調べてみました。

http [リクエストタイプ]
2020-01-28T09:13:45.350130Z [レスポンスの生成時刻]
app/test-web-alb/85ed29ca355d3c5e [ロードバランサーのリソースID]
xx.xx.xx.xx:58886 [クライアントのIPアドレス:ポート番号]
xx.xx.xx.xx:80 [このリクエストを処理したターゲットのIPアドレス]
0.001 [ロードバランサーがリクエストを受け取った時点からターゲットに送信するまでの合計経過時間]
0.001 [ロードバランサーがターゲットにリクエストを送信した時点から、そのターゲットが応答ヘッダーの送信を開始した時点までの合計経過時間]
0.000 [ロードバランサーがターゲットから応答ヘッダーを受け取った時点から、クライアントへの応答の送信を開始した時点までの合計経過時間]
200 [ロードバランサーからの応答のステータスコード]
200 [ターゲットから応答のステータスコード]
478 [クライアントから受け取ったリクエストのサイズ (バイト単位)]
312 [クライアントに返される応答のサイズ(バイト単位)]
"GET http://test-web-alb-xxxxxxxx.ap-northeast-1.elb.amazonaws.com:80/ HTTP/1.1" [クライアントからのリクエスト]
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/xxx.xxx (KHTML, like Gecko) Chrome/xxx.xxx.xxx Safari/xxx.xxx" [リクエスト元のクライアントを特定する User-Agent 文字列]
- [HTTPSリスナーのSSL暗号(今回はHTTPのみのため無し)]
- [HTTPSリスナーのSSLプロトコル(今回はHTTPのみのため無し)]
arn:aws:elasticloadbalancing:ap-northeast-1:(AWSアカウントID):targetgroup/test-web-tg/7fee5ba2d0aa6b31 [ターゲットグループのAmazonリソースネーム(ARN)]
"Root=1-5e2ffb49-b36867310f47acbc77cfe749" []
"-" [(HTTPSリスナーのみ) TLS ハンドシェイク中にクライアントから提供されるSNIドメイン]
"-" [(HTTPSリスナー) クライアントに提示される証明書のARN]
0 [リクエストに一致したルールの優先度の値]
2020-01-28T09:13:45.348000Z [ロードバランサーがクライアントからリクエストを受け取った時刻]
"forward" [リクエストの処理時に実行されるアクション]
"-" [HTTPレスポンスのロケーションヘッダーのリダイレクトターゲットのURL]
"-" [エラー理由コード]
"xx.xx.xx.xx:80" [このリクエストを処理したターゲットのIPアドレスとポート]
"200" [ターゲットの応答からのステータスコード]

以上です。

最後に

ALBのアクセスログをS3に保存して中身を読み解いてみました。
ロードバランサーのログファイルを扱うのが初めてだったので楽しかったです。 この記事がどなたかのお役に立てれば幸いです。

以上、大阪オフィスのYuiでした(`・ω・´)

参考サイト

Application Load Balancerのアクセスログ