WordPressを運用しているとどこにアクセスが多いか気になる。一方、スパムが多い。 それで、アクセスログ解析を行いたいが、関係ないアクセスログも多い。 そこで、アクセスログの削減を行うとともに、アクセスのトップ10をメール通知する様にした。
前提条件
- apacheをweb serverとして使っている
- lan内メールサーバーが構築済み
- (raspberry pi OS : ubuntuやdebianでも同じと思う)
ログ削減
lan内からのアクセスやcssファイル等の読み込みはログに残さないようにする。
/etc/apache2/sites-enabled/000-default.conf 及び /etc/apache2/sites-enabled/default-ssl.conf のCustomlog 部分を以下の様に編集する。
# CustomLog ${APACHE_LOG_DIR}/access.log combined
SetEnvIf Remote_Addr 127.0.0.1 nolog
SetEnvIf Remote_Addr 192.168.0. nolog
SetEnvIf Remote_Addr 192.168.2. nolog
SetEnvIf Request_URI "\.(gif|jpg|png|css|js|ico)$" nolog
CustomLog ${APACHE_LOG_DIR}/access.log combined env=!nolog
もし、JPG等大文字のものがログに現れた場合は、SetEnvIF部分をSetEnvIfNoCaseに換える。
注:スペルミスがありましたので修正しました(no_log => nolog) 2021/03/20
再起動
sudo systemctl restart apache2
top10作成及びメール文作成用のシェルの準備
以下のシェルスクリプト(mytools/webtop10.sh)を作成
#!/bin/bash
echo from: wp_server@ktanimoto.net
echo to: wp_server@ktanimoto.net
echo subject: raspi web server accecc top10
echo Content-Type: text/plain;charset="UTF-8"
echo
echo ------ access IP top 10 ----------
cat /var/log/apache2/access.log |cut -f 1 -d ' ' | sort |uniq -c|sort -nr|head -10
echo
echo ----- access page top10 -----------
cat /var/log/apache2/access.log |cut -f 7 -d ' ' | sort |uniq -c|sort -nr|head -10
echo
echo ------- actual access top 10 -----------
cat /var/log/apache2/access.log |grep 200 |cut -f 7 -d ' ' | sort |uniq -c|sort -nr|head -10
echo
cronの設定
rootが所有者になる様にしてcron設定ファイルを作成する(webtop10とここではする)
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""
HOME=/home/pi
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,$
# | | | | |
# * * * * * user-name command to be executed
50 7 * * * pi /home/pi/mytools/webtop10.sh | sendmail -i -t
Leave a Comment