V-antena and Tanimoto's page

谷本の備忘録・雑記帳・work

>

apacheログ削減とアクセスtop10送信

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

入力エリアすべてが必須項目です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。