システム・ログ表示ツール、phpLogCon

  phpLogCon は、使いやすいWebインタフェースを備えたシステム・ログ表示ツールだ。LinuxシステムとWindowsシステムの両方のログを扱うことができるため、phpLogConサイトを1個所に用意すれば、そこからネットワーク上にあるすべてのマシンを監視することができる。

 phpLogConはUbuntu、openSUSE 11、Fedora 9のリポジトリーにはない。Fedora 10では提供される予定で、Fedora developmentリポジトリーにパッケージがある。今回は、i386 Fedora 9マシン上でphpLogCon version 2.3.9のソースをダウンロードしビルドした。

 構成の設定には、phpLogConに含まれているinstall.phpスクリプトを利用するのが便利だ。複数のステップから成り、ステップごとに構成設定に関する質問に回答していくとconfig.phpファイルができあがる。下に、install.phpファイルを含むphpLogConのPHPファイルをインストールするコマンドを示す。install.phpファイルは、構成設定の完了後削除してもよい。また、phpLogConで監視したいWebサーバーのsyslogファイルについては、そのWebサーバーの実行ユーザーが読めるようにアクセス権を設定しておく必要がある。

cd /usr/local
tar xzf /tmp/phplogcon-2.3.9.tar.gz
cd ./phplogcon*
cp -av src /var/www/html/phplogcon
cd /var/www/html/phplogcon

touch config.php
chown root.apache config.php
chmod g+w,o-rwx config.php
ls -l config.php
-rw-rw---- 1 root apache 0 2008-08-12 12:28 config.php

cd /var/log
chgrp apache messages
chmod g+r messages

phplogcon1_thumb.png
インストール画面

 インストールが終わったら、http://localhost/phplogconを開く。「致命的なエラー発生」「メインの構成ファイルがない」と告げるページが表示されるが、驚く必要はない。先ほど空のconfig.phpファイルを作り、Webサーバーの実行ユーザーで書き込みができるように(一時的に)アクセス権を設定した。これから、そのconfig.phpファイルの中身を作成するのだ。エラー・ページにあるリンクをクリックするとinstall.phpが起動する。install.phpは、まずconfig.phpファイルに書き込めることを確認する。先にinstall.phpは複数のステップから成ると述べたが、具体的には8つのステップがあり、ここまでがステップの1と2になる。

 ステップ3では、メイン・ビュー表示する1ページ当たりのメッセージ数や各メッセージの文字数など一般的なオプションをいくつか設定する。また、ここで詳細メッセージのポップアップとIPアドレスの自動解決を抑制することができる。

phplogcon2_thumb.jpg
インストールス テップ7

 一般的設定はデフォルトのままにして進み、ステップ7に入る。phpLogConはローカルにあるシステム・ログ情報だけでなく、リレーショナル・データベースにあるログ情報も読むことができる。MySQLのほか、PHP Data Objectsを介してその他のデータベース・サーバーもサポートしている。ここでは、ローカルにあるsyslogファイルだけを考えることにする。rsyslogを設定してシステム・ログをリレーショナル・データベースに保存している場合は、データベース名、ログ情報のスキーマ(monitorwareまたはsyslogng)、データベースに接続するためのユーザー名とパスワードを設定する。ここでは、簡単に、apacheのユーザーにシステム・ログ情報の読み込みアクセス許可を与えたが、本来は、それらのファイルが任意のPHPスクリプトに見えないようにするため、suphpを使ってシステム・ログ情報への読み込みアクセスを持つ特別なユーザーでphpLogConを動かすべきだ。

 ステップ8は最後のステップで、インストールが完了しphpLogConが使えるようになったことを知らせるページが表示される。ページにはサーバー上のphpLogConの場所へのリンクがあり、すぐにログを見ることができる。クリックすると、下に示したようなページが表示されるはずだ。

phplogcon3_thumb.jpg
メインページ

 ここでログ・エントリーが問題なく表示できたら、config.phpファイルを読み込み専用にし、install.phpをWebサーバーから削除することをお勧めする。これ以降構成ファイルを変更することはないので書き込み可能である必要ななく、設定は完了したのでもうinstall.phpファイルは使わないからだ。再構成などで必要になったとしても、/usr/localのPHPファイルは先ほどすべてコピーしてあるので、いつでも復元できる。

 さて、phpLogConのWebページに戻ろう。一番上にあるツールバーのShow Eventsボタンをクリックすると、最新のsyslogイベントを表示するページが開く。HostまたはSyslogtag欄のセルをクリックすると、そのセルと同じ値を持つものにメッセージを絞り込んだり、その値でオンライン情報を検索したりすることができる。Message欄のセルをクリックすると、そのsyslogメッセージの全文がMessage Detailsページに表示される。Pagerと書かれた部分にある4つのボタンをクリックすると、この表示のまま、時刻順に前後のメッセージに移動したりログの最初または最後に飛んだりできる。

 なお、最新のメッセージが表示されているときに「次のメッセージ」を見るボタンをクリックすると、「該当のsyslogレコードはない(コード6)」というエラーが表示される。すでに最新のメッセージが表示されていて、それより新しいものはないのだから、エラーは当然だ。しかし、残念なことに、このページには前後のメッセージに移動するボタンがなく、このエラーから回復するにはブラウザーの機能で戻るしか方法がない。

 同様の問題は、最も古いメッセージを表示しているときにさらに古いメッセージを表示しようとしたときにも発生しそうだが、実はそうはならない。「前のメッセージ」ボタンが淡色表示されるからだ。最新メッセージを表示した場合に「次のメッセージ」ボタンが淡色表示にならないのは、ページの表示後にさらに新しいメッセージが記録されている可能性があるからだ。

 新着のイベントを表示するため、5秒,10秒,15秒,30秒,60秒、5分、10分、15分、30分ごとにページを自動的にリロードすることができる。これは常時監視したいときに便利だ。WebブラウザーにphpLogConページを開いたままにしておけば、いつでも5~10秒ごとに新たに発生したイベントを確認することができる。ただし、欠点が一つある。リロードのたびにページの最初に戻ることだ。これは、Webページを少しスクロールしてリストを見ている場合に煩わしい。AJAXを使って新しいイベントを追加するようにすれば、邪魔になりにくいのだが。

 ツールバーのSearchボタンをクリックすると、時刻、イベントが発生した領域(カーネル、ユーザー、メールなど)と重大度、ログのイベントが発生したホスト名、Syslogtagでログ・メッセージを検索することができる。Syslogtagでの検索は、DHCPクライアントなど特定のイベント・タイプの経過を見たいときに便利だ。もっとも、Syslogtagを検索したいときは、通常のShow EventsビューでSyslogtag欄のセルをクリックするのが早道だ。クリックすると「Filter for ‘x’」(ここでxはクリックしたセルの値)がポップアップするので、これを利用する。また、SearchページでSyslogtagに入力するときは、先頭に空白を入れないようにすること。さもないと、検索漏れが生じる。詳細メッセージを見て、そのとき発生したタイプのメッセージを調べようとコピー&ペーストするときに、こうしたミスを犯しやすいので注意。

その他の機能

 phpLogConのWebページの右上には、表示すべきシステム・ログ、表示に使う言語、画面のテーマを変更するオプションがある。テーマには、上に示したものと、これより色調が暗いものの2種がある。表示に使う言語は、ドイツ語、英語、ポルトガル語から選べる。

 表示対象のシステム・ログを追加するには、config.phpファイルを変更する必要がある。これについては、Webインタフェースはない。config.phpファイルを見ると、末尾に下に示すような記述があるはずだ。デフォルトのメッセージ・ログの下にボールドで表示した部分がセキュア・システム・ログを指定している個所で、このように指定しWebサーバーが/var/log/secureを読み込めるように設定されていればセキュア・システム・ログを表示することができる。

$CFG['Sources']['Source1']['ID'] = 'Source1';
$CFG['Sources']['Source1']['Name'] = 'Web server system log';
$CFG['Sources']['Source1']['ViewID'] = 'SYSLOG';
$CFG['Sources']['Source1']['SourceType'] = SOURCE_DISK;
$CFG['Sources']['Source1']['LogLineType'] = 'syslog';
$CFG['Sources']['Source1']['DiskFile'] = '/var/log/messages';


$CFG['Sources']['Source2']['ID'] = 'Source2';
$CFG['Sources']['Source2']['Name'] = 'secure';
$CFG['Sources']['Source2']['ViewID'] = 'SYSLOG';
$CFG['Sources']['Source2']['SourceType'] = SOURCE_DISK;
$CFG['Sources']['Source2']['LogLineType'] = 'syslog';
$CFG['Sources']['Source2']['DiskFile'] = '/var/log/secure';

 phpLogConを使うと、Webブラウザーからシステム・ログを検索することができ、新着メッセージを常時監視することもできる。AJAXを利用すればイベントの監視がさらに便利になるだろう、という改善点はあるが、ファイルやデータベース上のシステム・ログをWebベースのインタフェースで監視したい場合、phpLogConは検討に値するツールだ。

Ben Martin 10年以上にわたってファイルシステムを研究。博士課程を修了し、現在、libferris、ファイルシステム、検索ソリューションを中心にコンサルティングをしている。

Linux.com 原文(2008年9月3日)