php-syslog-ng

Windows のイベントログを NTsyslog でログサーバーに飛ばしてる環境にログビューアとして php-syslog-ng を入れてみようと。

環境

まず、Windows マシンに NTsyslog がインストールされてて、ログサーバーの syslog-ng でイベントログを記録していること。
ログサーバーに

  1. httpd (Apache)
  2. PHP
  3. MySQL

がインストールされてること。

動作原理

NTsyslog からの出力を syslog-ng の template で SQL にして mkfifo したパイプに流し、それを別のプログラムで読み取って mysqld に流す。

インストール

インストールすること自体は決して難しくないはず、割愛。


同梱の syslog-ng の設定サンプルは、そのままだと日本語がうまく使えないので修正。
d_mysqltemplate-escapeno に変更。


出力される HTML が壊れてるので修正する。
includes/html_header.php 20行目

-<table class="headerbottom""><tr><td>
+<table class="headerbottom"><tr><td>


UTF-8 をうまう扱えるように修正する。
includes/tailresult.php 290行目

-        echo    "<td>".htmlspecialchars($row['msg')."</td>";
+        echo    "<td>".htmlspecialchars($row['msg'], ENT_QUOTES, 'UTF-8')."</td>";


ヘルプには scripts/syslog2mysql.sh を実行するように書いてある。このスクリプトでパイプを読み取って SQL を流し込むわけだけど、ただ読みこんで、ただ流すだけのスクリプトだから ' をエスケープしたりしてくれない。だから時々エラーが出てログを取りこぼすことになる。なので Perl かなんかで相当するスクリプトを書かないといけない。書いたら載せるかも。

追記 01/15/2007 13:51

includes/regularresult.php にある htmlentities も includes/tailresult.php と同様に htmlspecialchars に書き換える必要がありそう。ついでに includes/configure.php と includes/search.php も書き換えると、UI を日本語にしやすいかも。