ApacheなどのWebサーバのログ解析ツールではこんなのが有名らしい。
Analog
Webalizer
AWStats(Advanced Web Statistics)
Access Analyzer
Piwik
何となくAWStatsというのを使ってみた。
環境 CentOS7.6 + Apache2.4.6
公式サイト
AWStats - Open Source Log File Analyzer for advanced statistics (GNU GPL)
インストール、初期設定
主にここを参考にインストール、設定をすすめた
Setup AWStats (Apache Log Analyzer) on CentOS, RHEL & Fedora
[root@xxx ~]# yum install awstats
設定ファイル /etc/awstats/xxx.conf
/etc/awstats 以下にawstatsの設定ファイルがあるので、コピーして自分のファイルを1つ作る。
ドメイン名がhogehoge.comならawstats.hogehoge.com.conf
awstats.model.conf以外のconfファイルは、awstats_updateall.pl などで呼び出されてしまうので使わないconfファイルは消すか、名前を.conf以外にしておく。
編集した内容
LogFile="/var/log/httpd/access_log" SiteDomain="hogehoge.com" DNSLookup=1 LoadPlugin="tooltips"
ログ統計の作成 awstats.pl
awstats.pl に上で編集したconfファイルを指定して実行すると、awstatsの統計ファイルが作成される。一回目はログ全部読むのでけっこう時間がかかる。2回目以降は早い。
[root@xxx ~]# /usr/share/awstats/wwwroot/cgi-bin/awstats.pl -config=hogehoge.com -update
Apache側のアクセス制限等設定
以下のようなURLでブラウザからawstatにアクセスできる
https://hogehoge.com/awstats/awstats.pl?config=hogehoge.com
デフォルトのままだとブラウザからのアクセスは拒否される。こんなメッセージが表示される↓
Forbidden
You don't have permission to access /awstats/awstats.pl on this server.
awstat.confを編集して、とりあえず誰でもアクセスできるようにする。
以下のファイルを編集。以下を追加。Allow from allはApache2.2系の書き方でダメみたい。AWStatsの記事をググってると古い記事が多く、アクセスできなくてしばらくはまった。
/etc/httpd/conf.d/awstat.conf
<Directory "/usr/share/awstats/wwwroot"> Options None AllowOverride None Require all granted ...
Access Control - Apache HTTP Server Version 2.4
apacheを再起動すると、
[root@xxx ~]# systemctl restart httpd
アクセスできたぜ!
全公開だと何なので後でDigest認証かけといた。
定期実行
以下が作られており、デフォルト1時間おきに、統計ファイルが更新されるようになっている
/etc/cron.hourly/awstat
古いログも読ませる
何か順番?とかもあるようなので、一度以下の場所にある統計データを削除
/var/lib/awstats/xxx.txt
logresolvemerge.pl というツールを使って、apacheのaccess_logからはじまる名前のファイルを結合。その後、結合したファイルを指定してawstats.plを実行。処理にけっこう時間がかかる。
/usr/share/awstats/tools/logresolvemerge.pl /var/log/httpd/access_log* > /root/merged_access_log /usr/share/awstats/wwwroot/cgi-bin/awstats.pl -update -config="hogehoge.com" -LogFile="/root/merged_access_log"
AWStats Documentation - Other tools
awstats.pl の引数の-LogFileでlogresolvemerge.plを渡す方法↓もあるみたいだけど、これは何かうまく動かなかったので、上のように一度logresolvemerge.plでログを結合してから、次にawstats.pl を実行した。
/usr/share/awstats/wwwroot/cgi-bin/awstats.pl -update -config="hogehoge.com" -LogFile="/usr/share/awstats/tools/logresolvemerge.pl /var/log/httpd/access_log* |"
ログローテーション
apacheのアクセスログがローテーションすると、ログの取りこぼしがおこる。ローテーションをトリガーに、awstats.plを起動するようにしておく
以下のファイルに、prerotateでawstats.plを呼び出すように追記。(ちゃんと動いてるのか自信がない)
/etc/logrotate.d/http
/var/log/httpd/*log { missingok notifempty sharedscripts delaycompress prerotate /usr/share/awstats/wwwroot/cgi-bin/awstats.pl -config=hogehoge.com -update endscript postrotate /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true endscript }
Apacheのアクセス制限で少しはまって、古いログを読み込ませるのでも少しはまって、何だかんだ半日ぐらいかかった。
何か読み返してみても分かりにくいが、まぁいいか、忘備録ということで。
[PR]アンヘレスで愛人