AWS の EC2 に溜まったログ
現在のサービスでは, アクセスログが logs ディレクトリ以下に access.log-20190101.gz
といったように日付などで記録されています。
中身は, 以下のような構成になっていました。
gz なので, zcatコマンドで確認できます。
その前に root ユーザーでログインしてからのほうがいいですね
sudo -s
zcat access.log-20190101.gz
の結果です。
172.1*.**.* - - [01/Jan/2019:13:29:31 +0000] "GET /index HTTP/1.1" 200 16
172.1*.**.* - - [01/Jan/2019:13:29:31 +0000] "GET /done HTTP/1.1" 200 16
172.2*.**.* - - [01/Jan/2019:13:29:31 +0000] "GET /index HTTP/1.1" 200 16
172.2*.**.* - - [01/Jan/2019:13:29:31 +0000] "GET /menu HTTP/1.1" 200 16
172.2*.**.* - - [01/Jan/2019:13:29:31 +0000] "GET /lp HTTP/1.1" 200 16
今回このデータの中から欲しかったログは, doneページまでたどり着いたユーザーの確認がしたいため, プライベートIPアドレスと日付と referer が必要です。
ログの吐き出し
今回は, 複数のログを確認したいため, ログを一つずつ実行していきます。
for log in `find logs/ -name access.log*.gz`;do ........
次にアクセスログの中から done ページまでたどり着いた特定の ip を抽出します。awk コマンドでプライベート ip アドレスと referer のセットを作成し, referer から /done にたどり着いたユーザーの ip アドレスを $ip に格納していきます。
for ip in `zcat $log | awk '{print $1,$5}' | 'grep /done' | awk print'{$1}'`;do .....
上記を用いてそれぞれのログから, それぞれの /done にたどり着いた ip アドレスの行動を収集します。その結果を root ディレクトリ内の result.log に吐き出します。
for log in `find logs/ -name access.log*.gz`;do for ip in `zcat $log | awk '{print $1,$5}' | 'grep /done' | awk print'{$1}'`;do zcat $log | awk '{print $4,$1,$5}' | grep $ip;done;done > ~/result.log
サーバーのファイルをローカルに持ってくる
最後にローカル側で scp コマンドを使ってファイルをダウンロードしてきます。詳しい情報はぐぐってみてください。
scp インスタンス情報:~/result.log ./
お疲れさまでした。一文でできるのは快適ですが, 普通にシェルスクリプト作成してもよかったかもですね〜