Management Tools (wwwstat and MHonArc)

 ここではサーバーとして稼働しているシステムを管理するツールについて解説します。誤りがあれば、掲示板などでお知らせいただくと助かります。

1.wwwstat
 Webでログを監視できる機能を提供してくれる[wwwstat]にチャレンジしてみました。wwwerrsがまだ正常に動作しておりませんが、セットアップについては以下の通りです。尚このソースは「汎用」ですので、Linuxに限らずWindowsWebサーバーでも応用は可能であるようです。

 一般的にはApacheの[access_log]には、以下のCLF(Common Logfile Format)形式でログが出力されます。
210.162.247.75 - - [02/Feb/2000:23:05:27 +0900] "GET /~user/image/webbbspic/info.html HTTP/1.1" 200 262
210.162.247.75 - - [02/Feb/2000:23:05:27 +0900] "GET /~user/image/webbbspic/bcg_cat4.gif HTTP/1.1" 200 1846
210.162.247.75 - - [02/Feb/2000:23:05:28 +0900] "GET /~user/image/webbbspic/a_bbs.gif HTTP/1.1" 200 2278
 これに手を加えると

duskin6.duskinhkr.co.jp - - [07/Jun/2000:00:22:42 +0900] "GET /~user/cgi-bin/sphinx/sphinx.cgi? HTTP/1.1" 200 21585 "http://www2.duskinhkr.co.jp/~a_nakayama/index.htm" "Mozilla/4.0 (compatible; MSIE 5.01; Windows 95)"
duskin6.duskinhkr.co.jp - - [07/Jun/2000:00:23:13 +0900] "POST /~user/cgi-bin/sphinx/sphinx.cgi HTTP/1.1" 200 22301 "http://www.duskinhkr.co.jp/~user/cgi-bin/sphinx/sphinx.cgi" "Mozilla/4.0 (compatible; MSIE 5.01; Windows 95)"
duskin6.duskinhkr.co.jp - - [07/Jun/2000:00:26:59 +0900] "POST /~user/cgi-bin/sphinx/sphinx.cgi HTTP/1.1" 200 22090 "http://pc6.duskin-h-unet.ocn.ne.jp/~user/cgi-bin/sphinx/sphinx.cgi" "Mozilla/4.0 (compatible; MSIE 5.01; Windows 95)"
 のように出力されるようになります。Apache1.3以降(未確認)では、httpd.confの[HostnameLookups]を[on]にするとIPアドレスでは無く、ホスト名で記録します。上記のログはその他にREFERERとUSER_AGENTを記録しています。これもhttpd.confにて、
CustomLog /usr/local/apache/var/log/referer_log referer
CustomLog /usr/local/apache/var/log/agent_log agent
 と設定することで、refere_logとagent_logが作成されます。しかし、ログファイルが分かれると管理が面倒になると考え、これらをaccess_logに統合しています。

CustomLog /usr/local/apache/var/log/access_log combined
 これでaccess_logにすべての情報が格納されます。

 では、こうやって記録されたログをWebから随時監視する方法として[wwwstat]を導入してみましょう。

 インストール方法は、インターネットで検索するとたくさん見つかりますが、簡単に説明します。
 ツールの入手は、http://www.ics.uci.edu/pub/websoft/wwwstat/などから行います。ダウンロードサイトにはFTPとHTTPのリンクが出されている場合が多いですが、極力FTPを利用します。通常は複数のファイルが圧縮されて格納されているファイルが存在するので、適宜選択しダウンロードします。今回のパッケージはパッチを含まない[wwwstat-2.0.tar.gz]でした。これとは別に2.01へのパッチ[patch-2.01.txt]もダウンロードします。
 ダウンロードファイルをLinuxへ転送した後、解凍します。

 注意:以下の解説では[root]で処理しているように記述しますが、必ずしもrootになる必要があるとは限りません。一般ユーザーで可能な部分は、作業用のユーザーで処理することをおすすめします。

[root@server /]# tar zxvf wwwstat-2.0.tar.gz
wwwstat-2.0/
wwwstat-2.0/Changes
wwwstat-2.0/FAQ
wwwstat-2.0/INSTALL
   ↓  ↓
wwwstat-2.0/wwwstat.ps
wwwstat-2.0/wwwstat.rc
[root@server /]#

 続いてパッチを当てます。
[root@server /]# cd wwwstat-2.0
[root@server /]# patch < ../patch-2.01.txt
patching file 'Change'
patching file 'wwwstat.pl'
[root@server /]#

 makeします。
[root@server /]# make
 ここでできあがる[wwwstat]を実行すれば、分析結果ファイルがhtmlファイル形式でできあがります。が、環境によって書き直しが必要な部分もあります。
 [wwwstat]はPerlスクリプトですので、エディタで開き編集します。viでも簡単に出来ます。

 まず、対象となるログファイルの存在する場所を指定します。

$DefaultLog = '/usr/local/etc/httpd/logs/access_log';

 次に分析結果ファイルのタイトル部分に入れるサーバー名。これは任意です。

$AppendToLocalhost = '.no_where.com';

 他にも見出しで使われる部分の設定がありますが、適宜日本語で記述しても良いでしょう。ただし、ユーザーエージェントによっては日本語を正しく表示できない可能性があるので、アクセスする端末で確認の上、適宜ヘッダに修正を加えて頂きたい。基本的には原文通りに利用されるのが良いと考えます。
 また、wwwstatがPerlスクリプトであることから、スクリプトの先頭行に、
#!/usr/local/bin/Perl
などと記述があります。これはサーバーのPerlへのパスを確認し、正しく記述します。

 テストしましょう。
[root@server /]# ./wwwstat > test.html
 エラーが表示されず、test.htmlが出来ていれば成功。htmlファイルを調べて下さい。

 「これで完了」と言う訳にはいきません。wwwstatは自動実行されるわけでは無いので、crontabへ設定を登録します。
 /etc/crontab へスケジュールを追加します。
00 0 * * * root /xxxx/xxxx/wwwstat-2.0/wwwstat/ > /xxxx/xxxx/wwwstat.html
 これは毎日午前0時0分になると自動的に実行されます。ただし、Apacheでのログの切り替えは通常月曜日なってしばらくしてから切り替わるため、空っぽのログに対して実行されてしまう可能性があります。そこで、時間をずらして別のファイルにコピーする設定にしておくと便利です。
02 0 * * 0 root cp /xxxx/xxxx/wwwstat.html /xxxx/xxxx/temp.html

 さて、wwwstat-2.0には、この他にmonthlyとwwwerrorsなどが含まれます。まだ同梱されているスクリプトもありますが、とりあえず管理用としてはあとこの二つがあれば十分かと思います。前者はwwwstatで作成されて蓄積される分析結果を月ごとのファイルにまとめて残してくれるスクリプト、後者はログファイルからエラーだけを取り出し、結果を評価できるhtmlに出力するスクリプトです。
 
 monthlyについての注意点としては、以下の部分
# Compression command and extension

$zcommand = 'gzip -9';
$zextension = '.gz';

$wstatcmd = '/usr/local/www/cgi-bin/wwwstat-2.0/wwwstat';

# Set up the filenames to be used

$ServerRoot = '/usr/local/www';

$NewLog = $ServerRoot . '/logs/access_log'; # Current logfile
$OldLog = $NewLog . '.old'; # and temp location

$PidFile = $ServerRoot . '/logs/httpd.pid'; # Server's PID file
$ErrorLog = $ServerRoot . '/logs/error_log'; # Server's Error Log

$TempLog = "/tmp/templog-$$.txt"; # Temporary file for last month's log

print "Got the defaults\n";

# ==========================================================================
# Figure out the archive name


$ArcName = "/usr/local/www/htdocs/stat/%M_access_log" . $zextension;

@MoY = ('Jan','Feb','Mar','Apr','May','Jun',
'Jul','Aug','Sep','Oct','Nov','Dec');

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
if ($mon == 0) { $mon = 11; $year -= 1; }
else { $mon -= 1; }

$LastMonth = $MoY[$mon];

$ArcName =~ s/%M/$LastMonth$year/;
$y2k = $year + 1900;
$ArcStats = '/usr/local/www/htdocs/stat/stats-' . $y2k .
'/' . $LastMonth . '.wwwstats.html';
 これらのパスの部分やファイル名の取得ロジックなどが、書き換える部分です。

 また、readmeに明記されていますが、「毎月初旬に実行するように設定する事」とあります。こちらもcrontabへの設定が必要です。
 こちらでは、
00 3 1 * * root /usr/local/www/cgi-bin/wwwstat-2.0/monthly
 と追加しました。

 wwwerrorsについては、未だ正常に稼働しておりません。。。(^^ゞ
 設定方法については上記と同様スクリプトを修正してcrontabへ設定するだけなんですが・・・


2.MHonArc
 majordomoでメーリングリストの配信が進行すると、メールが蓄積されます。これらはindexコマンドを送信して個別にメッセージを取得する方法などがありますが、Webで閲覧できるとさらに便利に使いこなせるようになります。
 また、関連するメッセージをスレッド表示して、一連の書込を判別できるようにしてくれる便利なツールとしてMHonArcを紹介します。

 今回使用したバージョンは[2.4.6]です。[2.2.0]あたりでは「subjectが日本語を通さない」と言う話も聞いていたので、多少不安になりながらもインストールしてみます。
 解凍してソースとFAQなどを覗いていると
MHonArc supports the ISO-8859 character sets and the ISO-2022-JP character set.
の一文が見えます。おまけに[iso2022jp.pl]なんてソースも存在。「なんだ!日本語通るんだ」と一安心。。。

 では早速解凍から
[root@server /]#tar xvzf MHonArc2.4.6.tar.gz
 ディレクトリを移動してインストールします。
[root@server /]#cd MHonArc2.4.6
[root@server /MHonArc2.4.6]#perl install.me
 ここからインタラクティブなインストールが始まります。Perlへのパス、インストールする場所などです。
 インストールが終了したら、テストします。
[root@server /MHonArc2.4.6]#mhonarc -outdir /xxxx /yyyy
 /xxxxが出力ディレクトリ、/yyyyがmailボックスの存在するディレクトリです。
 ん?何だか表示が妙だが、ま、いっか。。。と実はここで失敗していたのですが、気がつかなかった。

 この後も数回の失敗を繰り返します。恥を忍んでメモしておきます。
 crontabには以下の通り記述しました。
02 1 * * 0 root mhonarc -add -outdir /usr/local/www/htdocs/testml /usr/local/majordomo/lists/testml.archive
 これは毎週金曜日の夜間に新規メッセージがあれば追加すると言う設定です。エラーがあればcronはrootにメールを送ります。
 最初のエラーは「パーミッションが違う」と言う内容のものでした。よく調べると、出力先の書込権限です。
 二回目のエラーも「パーミッションが違う」でした。「おかしいなぁ」とよくよく調べると、mhonarc自体の実行権限が・・・
 三度目の正直。
Reading database ...
Adding messages to /usr/local/www/htdocs/testml
Reading /usr/local/majordomo/lists/testml.archive ..........

Writing mail ..........
Writing /usr/local/www/htdocs/testml/maillist.html ...
Writing /usr/local/www/htdocs/testml/threads.html ...
Writing database ...
10 messages
 成功しました。(上記の記述では必要なフォルダを作成する作業などが抜けているかも知れません。)
 なお、rcfileにconvertする際の詳しいResource設定をまとめておく方法もあるそうです。

 ちなみに現在も毎週メールが届きます。mailinglistへ新規投稿が無いもので・・・(^^ゞ

トップへ戻る

26/June/2000