FreeBSD/php-syslog-ng

php-syslog-ng

必要な環境

syslog-ng
Apache
PHP
MySQL

インストールフォルダは/home/syslog/public_htmlでバーチャルホストはsyslog-ng.co.jp、データベースはsyslogとする。

ソースを持ってくる

http://code.google.com/p/php-syslog-ng/downloads/list

公開するディレクトリに展開

$ cd /home/syslog/public_html
$ fetch http://php-syslog-ng.googlecode.com/files/php-syslog-ng-2.9.8.tgz
$ tar zxvf php-syslog-ng-2.9.8.tgz

DBを作成しておく。

$ mysql -u ユーザ -pパスワード
mysql> create database syslog;

DBにテーブルを追加

※最新バージョンの2.9.8fでは最初から作成されているので、必要なし。

ALTER TABLE logs ADD counter INT NOT NULL DEFAULT 1;
ALTER TABLE logs ADD fo datetime default NULL;
ALTER TABLE logs ADD lo datetime default NULL;

Apache側の設定

Apacheのバーチャルホスト設定

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host2.example.com
    DocumentRoot "/home/syslog/public_html/php-syslog-ng"
    ServerName syslog-ng.co.jp
</VirtualHost>
<Directory "/home/*/public_html">
    AllowOverride FileInfo AuthConfig Limit Indexes
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec ExecCGI
    <Limit GET POST OPTIONS>        Order allow,deny        Allow from all
    </Limit>
    <LimitExcept GET POST OPTIONS>        Order deny,allow        Deny from all
    </LimitExcept>
</Directory>

php.iniの設定変更

# vi /usr/local/lib/php.ini
memory_limit = 128M 
max_execution_time = 300

Apacheの再起動

# /usr/local/etc/rc.d/apache22 restart

インストールはWebから行う

http://syslog-ng.co.jp/install/index.php

各種スクリプトファイルの設定

php-syslog-ngのcronログの格納場所作成

# mkdir -p /var/log/php-syslog-ng

スクリプトファイルのパスをperlで修正

# cd /home/syslog/public_html/php-syslog-ng/scripts/
# perl -i -pe 's/\/www\/php-syslog-ng/\/home\/syslog\/public_html\/php-syslog-ng/g' *

/etc/crontabに設定追加

各スクリプトのinclude_onceのパスは事前に修正しておく!

# vi /etc/crontab
------------------ 追加 -------------------------
@daily /usr/local/bin/php /home/syslog/public_html/php-syslog-ng/scripts/logrotate.php >> /var/log/php-syslog-ng/logrotate.log 
@daily /usr/bin/find /home/syslog/public_html/php-syslog-ng/html/jpcache/ -atime 1 -exec rm -f '{}' ';' 
*/5 * * * * /usr/local/bin/php /home/syslog/public_html/php-syslog-ng/scripts/reloadcache.php >> /var/log/php-syslog-ng/reloadcache.log
*/5 * * * * /usr/local/bin/php /home/syslog/public_html/php-syslog-ng/scripts/SqueezeDB-v2.0.php >> /var/log/php-syslog-ng/squeezedb.log

ログが多いとSqueezeDB-v2.0.phpが二重起動してしまう。

これで起動する際にプロセスが存在する場合は、exitする。

# vi /home/syslog/public_html/php-syslog-ng/scripts/SqueezeDB-v2.0.php
112 $array=array();
113 exec("ps auxw|grep SqueezeDB|grep -v grep|awk '{print $2}'",$array);
114 if(count($array)>1) exit;

グラフを表示させるには

fontをダウンロードする

$ fetch http://osdn.dl.sourceforge.jp/efont/10087/sazanami-20040629.tar.bz2
$ tar jxvf sazanami-20040629.tar.bz2
$ mkdir /home/syslog/public_html/php-syslog-ng/font
$ cp sazanami-20040629/sazanami-gothic.ttf /home/syslog/public_html/php-syslog-ng/font/sazanami-gothic.ttf

jpgraphの設定を変更

$ vi /home/syslog/public_html/php-syslog-ng/html/includes/jpgraph/jpg-config.inc
DEFINE("TTF_DIR","/usr/share/fonts/truetype/msttcorefonts/");
    -----------------↓変更-----------------
DEFINE("TTF_DIR","/home/syslog/public_html/php-syslog-ng/font/");

$ vi /home/syslog/public_html/php-syslog-ng/html/includes/jpgraph/jpgraph.php
FF_VERDANA => array(FS_NORMAL=>'verdana.ttf', FS_BOLD=>'verdanab.ttf',  FS_ITALIC=>'verdanai.ttf', FS_BOLDITALIC=>'' ),
    -----------------↓変更-----------------
FF_VERDANA => array(FS_NORMAL=>'sazanami-gothic.ttf', FS_BOLD=>'sazanami-gothic.ttf',  FS_ITALIC=>'sazanami-gothic.ttf', FS_BOLDITALIC=>'' ),

トップページのグラフを表示させる。(php-syslog-ng-2.9.8f)

php-syslog-ng/html/config/config.php編集

# vi php-syslog-ng/html/config/config.php
83 // Enable Overall Statistics Graph on main page (This will slow down main page rendering)
84 define('JPG_MAIN', 'OFF'); // Not implemented yet
                ↓
83 // Enable Overall Statistics Graph on main page (This will slow down main page rendering)
84 define('JPG_MAIN', 'ON'); // Not implemented yet

php-syslog-ng/html/graph.jpegを書込み可能にする。

# chmod 666 php-syslog-ng/html/graph.jpeg
# ll php-syslog-ng/html/graph.jpeg 
-rw-rw-rw-    1 matsui   matsui      15208  2 20 16:37 html/graph.jpeg

scripts/logrotate.phpでエラーがでる。

Dropping all_logs if it exists ... Error in "function perform_query()" <br>Mysql_error: Access denied; you need the RELOAD privilege for this operation<br>Query was: FLUSH TABLES<br>ok.Renaming 'logs' to 'logs20090225' and 'templogs' to 'logs' ... ok.

対処

これはsyslog-ngのMySQLユーザに更新の権限が無い為に発生する。
rootでmysqlにログインして

mysql> update mysql.user set reload_priv='Y' where user like 'syslog';

ページ上部のリンクを外す

Paypal linkの箇所をコメントアウトしてやればOK

$ vi php-syslog-ng/html/includes/html_header.php
136                 <!-- Begin Paypal link -->
137 <!--
138         <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
139                 <input type="hidden" name="cmd" value="_donations">
140                 <input type="hidden" name="business" value="cdukes@cdukes.com">
141                 <input type="hidden" name="item_name" value="PHP-Syslog-NG">
142                 <input type="hidden" name="no_shipping" value="0">
143                 <input type="hidden" name="no_note" value="1">
144                 <input type="hidden" name="currency_code" value="USD">
145                 <input type="hidden" name="tax" value="0">
146                 <input type="hidden" name="lc" value="US">
147                 <input type="hidden" name="bn" value="PP-DonationsBF">
148                 <input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donate_SM.gif" border="0" name="submit" alt="Donate to a good cause :-)">
149                 <div align="right">
150                 The code you support today may<br>
151                 turn out to be <a href="http://en.wikipedia.org/wiki/Skynet_%28Terminator%29">SkyNet</a> tomorrow...
152                 </div>
153                 <img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">
154                 </form>
155 -->
156                 <!-- END Paypal link -->