apacheのログからアクセス傾向を調べたりすることがちょいちょいあるのですが、その際に使うコマンドをいちいち書くのがめんどくさくなってきたのでメモ。
awkで何番目持ってくるんだっけとか、cutでどこ削るんだっけとか数える手間。
私が使っている環境はだいたいdailyでログローテートするように設定しているので、他の環境だと日付でgrepして絞り込む必要がありそう。
(デフォルト設定だとweeklyだったはず)
// IPごと上位5件 cat access_log | awk '{print $1}' | sort | uniq -c | sort | tail -5 // リクエストごと上位5件 cat access_log | awk -F\" '{print $2}' | sort | uniq -c | sort | tail -5 // リファラごと上位5件 cat access_log | awk -F\" '{print $4}' | sort | uniq -c | sort | tail -5
// 時間ごと cat access_log | awk '{print $5}' | grep "2017:..:..:.." | cut -b 14-15 | sort | uniq -c // 分ごと cat access_log | awk '{print $5}' | grep "2017:10:..:.." | cut -b 17-18 | sort | uniq -c // 秒ごと cat access_log | awk '{print $5}' | grep "2017:10:10:.." | cut -b 20-21 | sort | uniq -c
よく使うのはこの辺。
ログファイルをパイプで流し込まずにawkで直接開かせてもいいのですが、コマンドの先頭で明示的にファイル開いた方が視認性良かったり対象変更しやすかったりで楽に思うのでこんな感じで。
リクエスト毎、リファラ毎はダブルクォーテーションで括られているので取り出しやすくて良い感じ。
逆に他の要素拾ってこようとすると面倒くさそう。あまり必要になったこともないですけど。
時間ごとはdailyローテートでやってるので横着してますが、weeklyローテートだと 03/Oct/2017:mm:ss といった形でgrepかけないと日付特定できなくていやん。
今度使う時はここからコピペしよう。
ログの吐き出し方が違っている環境に入った時も少し弄るだけでなんとかなるはず。