http://www.starplatinum.jp/awstats/awstats70/を参考にしました。このページの "AWStats Ver.7.0完全日本語版のダウンロード” からダウンロードし、解凍をしておきます。(/Download/Awstats/AWStats70_Jpn に解凍) 私はvirtualhostで数個のWEBを動かすつもりなのでプログラム(.pl)は共通に出来るが、設定ファイルは独立していなければならない。と言う事で データーとプログラムは /webdata/awstatsに置く。設定ファイルは /etc/awstats/awstats.www,kinryokai.net.conf とする プログラムをコピーしrenameする。 # cp -pr /Download/Awstats/AWStats70_Jpn/wwwroot/cgi-bin/ /webdata/awstats icon関連をコピーしますが、私はデフォルト(/var/www/icons)では無く /webdata/icons にしていますので # cp -pr /Download/awstats/AWStats70_Jpn/wwwroot/icon/ /webdata/icons/ 後で、必要になるファイルを/usr/share/perl5にコピー # cp /Download/awstats/AWStats70_Jpn/tools/awstats_updateall.pl /usr/share/perl5/ # cp /Download/awstats/AWStats70_Jpn/tools/awstats_buildstaticpages.pl /usr/share/perl5/ awstatsを動かすにはCustomlog をcombined にしなくてはならないが、前の /etc/httpd/conf.d/virtualhost.confの設定で CustomLog logs/kinryokai_access_log combined env=!no_log にしているので問題ない。 /etc/awstats/awstats.www,kinryokai.net.conf の設定をしますがサンプルがありますのでそれを変更します。 # mkdir /etc/awstats # mv /webdata/awstats/awstats.model_jp.conf /etc/awstats/awstats.www,kinryokai.net.conf wwwの次は本当は . でカンマでない(XOOPSが勝手にリンクを張る為)この後も同じでwww.と解釈してください。 同じ場所にある awstats.model.confは使いませんので削除しておきます。 # gedit /etc/awstats/awstats.www,kinryokai.net.conf
LogFile="/var/log/httpd/kinryokai_access_log"
SiteDomain="www,kinryokai.net"
HostAliases="localhost 127.0.0.1 REGEX[kinryokai\.net$]"
DirData="/webdata/awstats"
DirCgi="/awstats"
DirIcons="/icon"
上記は変更した部分のみ書き出してあります。 次に jcode.pm をインストールしますが、yumから出来ます。 # yum -y install perl-Jcode で、/usr/share/perl5/Jcode.pm にインストールされた。 と、ここで困ったことになった。と言うのは私はプログラムはvirtualhost全部で同じプログラム(perl)を使おうとしているが、utf8_decode.plの中にホスト名前を設定する所がある。そうするとプログラムが共通にならない。 utf8_decode.plをハックして、ホスト分のチェックをするようにしてもいいが(実は私はperlをあまり理解していないので大変そう)、この数年のWEBのログを見てみると(完全に見た訳ではないが)全角で記録されている部分が見あたらなった。このutf8_decode.plと言うものは(多分)ログに全角がある時に使うと思うので、私はこの変換をしないことにした。 と言う事はawstatsだけならJcode.pmはインストールしなくてもよかったが、わざわざ消すこともないのでそのままにする。/etc/awstats/にあるconfファイルはvirtualhost分用意をするので、プログラムは共通化出来る。 なので、http://www.starplatinum.jp/awstats/awstats70/の3、4、5はやらない。 今はテストでapacheを動かしているので、ログは無いに等しいので、現在アクティブなWEBからログをコピーする。前回はNFSでコピーしたが、今回はrsyncでコピーする。 まず、/etc/rsyncd.conf の修正
[ht-log]
path = /var/log/httpd
auth users = root
secrets file = /etc/rsyncd.secrets
read only = no
を最後に追加し、CentOSはxinetd経由で動かしているので、 # service xinetd restart ***************** ここからはコピー元のホストで # rsync -av --delete --password-file=/etc/rsync.passwd /var/log/httpd/ rsync;//コピー先のIP/ht-log (; は 本当は : )でデーターをコピーします。 ***************** ここで設定中のホストに戻ります。 私の場合はサーバーのマイグレーションなので、既にawstatsのデーターは元のサーバーで出来ており、これはすでにrsyncで/webdataをコピーした時に終わっている。 初期データーの作成はhttp://centossrv.com/awstats.shtmlの(1)AWStatsデータベース初期作成を参考にしてください。 /etc/httpd/conf.d/awstats.confに
Alias /icon/ /webdata/icons/
ScriptAlias /awstats/ /webdata/awstats/
<Directory /webdata/awstats/>
DirectoryIndex awstats.pl
Options ExecCGI
order deny,allow
deny from all
allow from all
#allow from 192.168
</Directory>
と記入し、httpd を再起動して設定ファイルを読み込ませる。この設定はすべてのホストから見れてしまう設定になっています。 テストをしたいが、www,kinryokai.net としてもアクティブなWEBを参照し、このテストのWEBには来ないので、/etc/hosts の "192.168.xxx.xxx www,kinryokai.net www" のIPをこのテスト用のサブホストのIPに変更し、ブラウザで www,kinryokai.net/awstats/awstats.pl にアクセスすると表示される筈. ここからはまだ確認が終わっておりませんので、間違えがあるかも httdのログの内容をawstatsに反映させてからロテイトするように、/etc/logrotate.d/httpd を
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
prerotate ←ここから
`/usr/share/perl5/awstats_updateall\.pl` now -confdir="/etc/awstats" \
-awstatsprog="/webdata/awstats/awstats\.pl >/dev/null
endscript ←ここまで追記
#delaycompress ←圧縮はしないのでコメントアウト
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript
}
1時間毎にawstatsを更新する為に /etc/cron.hourly/awstats を作成
/usr/share/perl5/awstats_updateall.pl now -confdir="/etc" \
awstatsprog="/webdata/awstats/awstats.pl" >/dev/null
perlプログラムへのパスは各自の環境に合わせて下さい。 静的なHTMLのデータの作成 まずは/etc/httpd/conf.d/awstats.conf の最後に
Alias /awreport /webdata/awreport/kinryo
1日1回データーを作ります。そのスクリプトは
#!/bin/sh
site=$1
DirReport=$2
reportbuild() {
# AWStatsデータベース更新中断時ロックファイル残存対処(ここから)
if [ -f /tmp/awstats.$site.lock ]; then
ps -p `cat /tmp/awstats.$site.lock |awk '{print $6}'`
if [ $? -ne 0 ]; then
echo /tmp/awstats.$site.lock removed >&2
rm -f /tmp/awstats.$site.lock
fi
fi
# AWStatsデータベース更新中断時ロックファイル残存対処(ここまで)
/usr/share/perl5/awstats_buildstaticpages.pl \
-awstatsprog=/webdata/awstats/awstats.pl\
-config=$site -update -lang=jp -dir=$DirReport \
-year=$YEAR -month=$MONTH -builddate=$YEAR$MONTH
# 個別ページリンク切れ対処(ここから)
sed -i "s/href=\"${site}/href=\"awstats.${site}/g" \
$DirReport/$YEAR$MONTH.html
# 個別ページリンク切れ対処(ここまで)
if [ "$YEAR$MONTH" = $(date +%Y%m) ]; then
mv $DirReport/awstats.$site.$YEAR$MONTH.html $DirReport/index.html
else
mv $DirReport/awstats.$site.$YEAR$MONTH.html $DirReport/$YEAR$MONTH.html
fi
}
ls $DirReport/* > /dev/null 2>&1
if [ $? -eq 0 ]; then
YEAR=`date --date '1 days ago' +%Y`
MONTH=`date --date '1 days ago' +%m`
for site in `ls -l /etc/awstats |grep -v ~$|cut -d' ' -f 11|sed -e '/^$/d'|cut -d . -f 2-4`
# ↑ 全virtual host名を抽出する
do
DirReport=/webdata/awreport/`echo $site|cut -d . -f 2`
reportbuild
done
else
DirAwstats=`grep ^DirData /etc/awstats/awstats.$site.conf|awk -F= '{print $2}'|tr -d \"`
# ↑ awstatsのデーターがあるdirectoryを抽出
for log in `ls $DirAwstats/awstats*.$site.txt`
do
YEAR=`echo $log|cut -d / -f 6|cut -d . -f 1|sed -e 's/awstats..\([^ ]*\)/\1/p' -e d`
MONTH=`echo $log|cut -d / -f 6|cut -d . -f 1|sed -e 's/awstats\([^ ]*\)..../\1/p' -e d`
reportbuild
done
fi
私の環境はvrtualhostが5個も走っているので、色々参考に考えましたが、まだ検証していないので、このスクリプトはまったく自信がありません。多分数ヶ所間違えていると思います。検証をしたら、この一文を取ります。 これをawstatsreport.shとして/rootにしまい、パーミッションを変更し、毎日零時にHTML作成スクリプトを走らせます。 # chmod 700 awstatsreport.sh # echo "00 00 * * * root /root/awstatsreport.sh > /dev/null" > /etc/cron.d/awstatsreport 最後にhttp://centossrv.com/referer_spam.shtmlを参考にリファラースパムの設定をしておくが、virtual webが5つも動いており、図部手のwebに設定すると時間がかかりそうなので、apacheとawstatsのログからリファラースパムを除去するスクリプトは作っておきません。スパムを発見したら、/etc/httpd/conf.d/referer_spam.confに追記し、apacheをreloadすれば以降は記録されません。また追加したスパムはSetEnvIfNoCase Referer (\.|/)sportliga\.net no_log
SetEnvIfNoCase Referer (\.|/)sugarkun\.com no_log
SetEnvIfNoCase Referer (\.|/)lorazepam\.pw no_log
SetEnvIfNoCase Referer (\.|/)alprazolam\.pw no_log
SetEnvIfNoCase Referer (\.|/)blesktatu\.ru no_log
SetEnvIfNoCase Referer (\.|/)tyudon\.com no_log
SetEnvIfNoCase Referer (\.|/)bag77\.ru no_log
SetEnvIfNoCase Referer (\.|/)mxhack\.ru no_log
SetEnvIfNoCase Referer (\.|/)error404\.000webhost\.com no_log
SetEnvIfNoCase Referer (\.|/)berrymall\.ru no_log
SetEnvIfNoCase Referer (\.|/)trazodone\.pw no_log
SetEnvIfNoCase Referer (\.|/)buyviagraonlineprof\.com no_log
SetEnvIfNoCase Referer (\.|/)fluoxetine\.pw no_log
SetEnvIfNoCase Referer (\.|/)randecan\.com no_log
SetEnvIfNoCase Referer (\.|/)telesvoboda\.ru no_log
SetEnvIfNoCase Referer (\.|/)kochanelli\.com no_log
SetEnvIfNoCase Referer (\.|/)alkorpkf\.ru no_log
SetEnvIfNoCase Referer (\.|/)pornotubexxx\.name no_log
SetEnvIfNoCase Referer (\.|/)chimiver\.info no_log
SetEnvIfNoCase Referer (\.|/)zolotoy-lis\.ru no_log
SetEnvIfNoCase Referer (\.|/)lovecs\.ru no_log
です。
|