LoginSignup
1
1

More than 3 years have passed since last update.

コマンドで linux サーバー内の溜まったログから必要なデータを一括で抽出

Posted at

AWS の EC2 に溜まったログ

現在のサービスでは, アクセスログが logs ディレクトリ以下に access.log-20190101.gz といったように日付などで記録されています。
中身は, 以下のような構成になっていました。
gz なので, zcatコマンドで確認できます。
その前に root ユーザーでログインしてからのほうがいいですね

sudo -s

zcat access.log-20190101.gzの結果です。

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 ./

お疲れさまでした。一文でできるのは快適ですが, 普通にシェルスクリプト作成してもよかったかもですね〜

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1