28:Apacheアクセスログ解析(AWStats)のインストール

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
同じ場所にある 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

です。

フジマル について

1947年生れ、東京電機大学二部電気通信工学科卒、最後はスリランカ航空で営業だったのですが2018年に㈱インパック・ジャパンに再就職。趣味:登山、スキー、車いじり、コンピューター
カテゴリー: 省エネサーバー製作(CentOS 6) パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください