Apache ログ解析 URLの出現回数を数える
やりたいこと
Apacheのログから各URLの出現回数を数えたい
ログが分析環境などに入ってなく、サーバから3ヶ月分のログを取得して実施
割と地道にやっていくしかないが、同じような作業が発生した際の参考にしてもらえれば。
・アクセスログ(1ファイル およそ100万行 x 90)
IPアドレス、日付、リクエスト、リファラーがある
この中のURLリクエストの数を数えたい (以下の /TEST/xxx/xxxxxx/
)
111.11.1.111 - - [25/Dec/2020:00:00:00 +0900] "GET /TEST/xxx/xxxxxx/ HTTP/1.1" 200 12364 "https://xxxx" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36" 54089
方法
調べると、apachelogを読み込むツールなどもあるみたいだが、今回はシンプルにコマンドで頑張ってみる。
sedコマンドを利用して不要な部分を取り除いていくだけ。
1.URLだけ出力できるようにsedコマンドの置換で頑張る
cat access.log | sed -e "s/.*\] \"//" | sed -e "s/ HTTP.*$//" | sed -e "s/POST //" | sed -e "s/GET //"
(accesslogがgz形式などで圧縮されているときは、解凍せずにgzcat
で出力するとローカルのディスク容量も安心。)
2.1.が目的の形でできるようになったらそれをファイルに出力する
cat access.log | sed -e "s/.*\] \"//" | sed -e "s/ HTTP.*$//" | sed -e "s/POST //" | sed -e "s/GET //" > out.txt
3.件数を数える
cat out.txt | awk '{count[$0]++}END{for(i in count)print count[i], i}'
awkを利用してgroup byのような感じで検索できる
https://qiita.com/oshiro/items/11b6833aa41627723059
上記はコマンドの例だが、90日分のファイルでまぁまぁでかいので、その後さらに踏み込んだ調査などをしたいケースを踏まえるとHIVEやRedshiftなどのデータウェアハウスの環境があるのであればそこにImportすると良い。
Author And Source
この問題について(Apache ログ解析 URLの出現回数を数える), 我々は、より多くの情報をここで見つけました https://qiita.com/yukiyoshimura/items/4bb468a59e0eaebd6051著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .