やりたいこと
クローラーの中には、すでに存在しないURLに対して一定の間隔で機械的にアクセスを繰り返すものがある。
その場合、大量の404エラーが発生し、サーバに負荷がかかることがある。
そこで、アクセスログから404アクセスを繰り返すクローラーがいるか確認する。
手順
前提
さくらのレンタルサーバはApache HTTP Serverを使用しており、以下の仕様でログが保存される。
保存周期 | 午前0時頃に前日のアクセスログを保存 |
---|---|
保存場所 | /home/アカウント名/log/access_log_[日付] |
保存ファイル形式 | テキスト形式(前日のログはgzipで圧縮されます) |
https://help.sakura.ad.jp/360000208561/#02
またアクセスログには、サブドメインを含め自身が管理する全サイトのログが以下形式で出力される。
echo-s.net 114.119.156.225 - - [19/Jun/2021:22:37:53 +0900] "GET /xxx/xxx.jpg HTTP/1.1" 404 39129 "-" "Mozilla/5.0 (Linux; Android 7.0;) AppleWebKit/537.36 (KHTML, like Gecko) Mobile Safari/537.36 (compatible; PetalBot;+https://webmaster.petalsearch.com/site/petalbot)" pg.echo-s.net 114.119.156.225 - - [19/Jun/2021:22:37:54 +0900] "GET /xxx/xxx.jpg HTTP/1.1" 404 39129 "-" "Mozilla/5.0 (Linux; Android 7.0;) AppleWebKit/537.36 (KHTML, like Gecko) Mobile Safari/537.36 (compatible; PetalBot;+https://webmaster.petalsearch.com/site/petalbot)"
そこでサイト別にユーザーエージェントを集計する。
コマンド
zgrep -h "404 " ~/log/access_log_202106* | cut -d " " -f 1,13- | sort | uniq -c
zgrep
gz圧縮ファイルに対してgrepによる検索を行うコマンド。
今回は2021年6月の全アクセスログファイルを対象に、404エラーを返した行を検索する。
オプションに -h を指定するとファイル名を非表示にできる。
以下例のようにアクセスログファイルには日付が付いている。
log/access_log_20210619:echo-s.net 147.92.153.4 - - [19/Jun/2021:23:59:51 +0900] "GET /xxx.jpg HTTP/1.1" 404 39129 "-" "Mozilla/5.0 (compatible; Linespider/1.1; +https://lin.ee/4dwXkTH)"
-h オプションを付けることで、uniqコマンドにより日付跨ぎで数をカウントできるようにする。
cut
文字列の一部分を指定して切り出すコマンド。
-d は区切る文字を指定するオプションで、この場合は半角スペースで区切る。
-f は切り出す部分を指定するオプションで、数字に – を追加すると範囲を指定できる。
この場合は1番目と13番目以降を指定している。
sort
行を整列するためのコマンド。
重複行をまとめるuniqコマンドのため使用する。
オプションを指定すると並び順や並び替えのルールを指定できるが、今回は並び替えできれば良いため指定しない。
uniq
前後の重複行を一行にまとめるコマンド。
-c を指定すると重複行数を付加できる。
結果
抜粋して記載。
1322 echo-s.net "Mozilla/5.0 (Linux; Android 7.0;) AppleWebKit/537.36 (KHTML, like Gecko) Mobile Safari/537.36 (compatible; PetalBot;+https://webmaster.petalsearch.com/site/petalbot)" 52 www.echo-s.net "Mozilla/5.0 (Linux; Android 7.0;) AppleWebKit/537.36 (KHTML, like Gecko) Mobile Safari/537.36 (compatible; PetalBot;+https://webmaster.petalsearch.com/site/petalbot)" 2 www.pg.echo-s.net "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0"
PetalBotが増加しているため、以下手順に記載の方法でアクセス頻度を制御する。