LoginSignup
0
1

More than 3 years have passed since last update.

Apache ログ解析 URLの出現回数を数える

Last updated at Posted at 2021-02-07

やりたいこと

Apacheのログから各URLの出現回数を数えたい
ログが分析環境などに入ってなく、サーバから3ヶ月分のログを取得して実施
割と地道にやっていくしかないが、同じような作業が発生した際の参考にしてもらえれば。

・アクセスログ(1ファイル およそ100万行 x 90)
IPアドレス、日付、リクエスト、リファラーがある
この中のURLリクエストの数を数えたい (以下の /TEST/xxx/xxxxxx/)

access.log
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すると良い。

0
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
0
1