MacOSX AWStats

ログ解析ソフトAWStatsのインストール手順

[環境] MacOSX Server 10.4.8 Mac min(PPC)

[導入手順] 以下のとおり

  1. Apacheの設定ファイル変更
  2. AWStatsのダウンロード
  3. CGIファイルのアップロード
  4. Perlのディレクトリの確認
  5. iconファイルのアップロード
  6. .confファイルの設定
  7. Jcode.pmのインストール
  8. .plの実行
  9. アクセス制限
  10. cronの設定

1.Apacheの設定ファイル変更

Apacheのhttpd.confを変更(/etc/httpd/httpd.conf)。バーチャルホストで運用している場合は、/sitesの”000xany” のファイルを変更。CustomLogをcommonからcombinedへ。nanoかサーバー管理ツールを使って書き換え。実際のログ設定は↓ CustomLog '|/usr/sbin/rotatelogs "/var/log/httpd/access_log" 2678400' "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""

2. AWStatsのダウンロード

AWStatsから最新版をDL(2007/03/05: awstats-6.6.tar.gz)。

3. CGIファイルのアップロード

tarファイルを解凍後、wwwroot/cgi-bin/以下をCGIディレクトリにアップロード(デフォルト: /Library/WebServer/CGI-Executables/)。今回は、/awstatsのディレクトリを作成。そこに以下をアップ。plのパーミッションに注意。

  • awredir.pl
  • awstats.model.conf
  • awstats.pl
  • lang/
  • lib/
  • plugins/

4. Perlディレクトリの確認

awstats.plの先頭にある#!/usr/bin/perlの確認。パスが違う場合は、それぞれのパスに書き換え。MacOSXは問題なし。

5. iconファイルのアップロード

wwwroot/iconを公開サーバーのディレクトリにアップロード(デフォルト: /Library/WebServer/Documents/)。これが鬼門だった鴨。Virtual Hostでいくつかサイトを公開している。で、それぞれの公開ディレクトリにアップロードするのも何かしっくりこず、CGIディレクトリにアップして.confファイルのDirIconsを(後述)を書き換えてみたが、うまくいかず。Oops….結局、各ディレクトリにアップするハメに:’-)

このiconファイルもCGIファイル同様、/直下に”awstats”フォルダを作成してそこにサクっとアップ。

6. .confファイルの設定

awstats.model.confを環境にあわせて変更。”model”を”サーバー名”に。

$mv awstats.model.conf awstats.www.thinksell.net.conf

バーチャルホストで運用していて、解析したいホストがあるならそのホスト分を用意。続いてパラメータ設定。 最低限の設定は、

  • LogFile
  • DirIcons
  • SiteDomain
  • DirData

$nano awstats.www.thinksell.net.conf

  • LogFile=”/var/log/httpd/access_log”(VirtualHostの場合access_log.10桁の数字)
  • DirIcons=”/awstats/icon”(絶対パスではなく公開されたディレクトリからのパス)
  • SiteDomain=”www.thinksell.net”
  • DirData=”DirData=”./data”(分析結果を書き出すディレクトリ “.”のままだとcgi-binファイルと同じディレクトリに書き込まれる)

7. Jcode.pmのインストール

UTF-8なのでEUCの検索キーワードやフレーズは文字化けして全滅。CPAN Jcode.pmをDLしてインストールで解決。すごく便利、深謝 > danさん

$ perl Makefile.PL $ make

make install

インストール完了。

8. .plの実行

いよいよawstats.plを実行したいところだけど、その前に少し編集。awstats.plファイルにJcodeに変換するように記述。以下のとおり。

——Search Keyword Jcode——

Jcode使用の宣言を追加(#!/usr/bin/perlより後、use *;とある最後に追加) use Jcode; DecodeEncodedString関数の書き換え。

[original awstats.pl] sub DecodeEncodedString { my $stringtodecode=shift; $stringtodecode =~ tr/+/ /s; $stringtodecode =~ s/%([A-F0-9][A-F0-9])/pack("C", hex($1))/ieg; return $stringtodecode; }

[change awstats.pl] sub DecodeEncodedString { my $stringtodecode=shift; $stringtodecode =~ tr/+/ /s; $stringtodecode =~ s/%([A-F0-9][A-F0-9])/pack("C", hex($1))/ieg; + Jcode::convert(\$stringtodecode, "utf8"); return $stringtodecode; }

——Date——

awstats.pl 8845行目を書き換える

[original awstats.pl] print ($MonthRequired eq 'all'?"$Message[6] $YearRequired":"$Message[5] ".$MonthNumLib{$MonthRequired}." $YearRequired");

[change awstats.pl] print ($MonthRequired eq 'all'?"$YearRequired $Message[6]":"$YearRequired $Message[6]".$MonthNumLib{$MonthRequired});

実行

./awstats.pl -config=HOSTNAME -update

HOSTNAMEのところは適時代入。

9. アクセス制限

パブリックからアクセスする必要がなければプライベート空間からだけアクセス可能に変更。awstats.www.thinksell.net.confから以下のパラメーターを検索して書き換え。

AllowAccessFromWebToFollowingIPAddresses="127.0.0.1 192.168.1.1-192.168.1.255"

10. cronの設定

ログ解析をcronからたたく。 */15 * * * * /Library/WebServer/CGI-Executables/awstats/awstats.pl -config=www.thinksell.net -update > /dev/null 2>&1 ブラウザからhttp://HOSTNAME/cgi-bin/awstats.plをたたいて表示できれば吉。

[注意] .plをたたいたとき、次のようなエラーメッセジーがかえってきたらログファイルの形式をうたがってみる。

AWStats did not find any valid log lines that match your LogFormat parameter, in the 50th first non commented lines read of your log. Your log file /private/var/log/httpd/medicalcomicaccesslog must have a bad format or LogFormat parameter setup does not match this format. Your AWStats LogFormat parameter is: … Setup (‘./awstats.www.thinsell.net.conf’ file, web server or permissions) may be wrong. Check config file, permissions and AWStats documentation (in ‘docs’ directory).

この場合、「ログの形式が間違ってるよ」という警告なので”common”から”combined”へ変更しているか確認。ありがちなケースは

AWStats導入前は”common”、導入後”combined”に変更したとき、”common”と”combined”が混在していてAWStatsがうまく解析できない

がある鴨。その場合、

  • Apacheを停止
  • ログファイルをリネーム
  • Apacheを起動

をためしてみる。