看着chaos的HOWTO setup syslog-ng to log to mysql装成了自己的syslog-ng。这里分享一下。大部分内容引用自HOWTO series.这是原文链接: http://chaos.untouchable.net/index.php/HOWTO_setup_syslog-ng_to_log_to_mysql
准备
需要apache,mysql和php环境
 
安装
1.运行syslog-ng-3.2beta1-linux-glibc2.3.6-amd64.run
默认是装在opt下,可能会需要安装eventlog。
修改/opt/syslog-ng/etc/syslog-ng.conf ,加上以下内容。
source src {
        unix-dgram("/var/run/log");
        unix-dgram("/var/run/logpriv" perm(0600));
        udp(
ip(0.0.0.0)
                port(514)
        );
        tcp(
                ip(0.0.0.0)
                port(514)
        );
        internal();
        file("/dev/klog");
};
***按格式把日志内容写到pipe里面
 destination d_mysql {
        pipe("/tmp/mysql.syslog-ng.pipe"
                template("INSERT INTO logs
                (host, facility, priority, level, tag, datetime, program, msg)
                VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL', '$TAG', '$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC',
                '$PROGRAM', '$MSG' );\n") template-escape(yes));
};
log { source(src); destination(d_mysql); };***
EOF
*******这是一般的syslogng配置格式,包括source,destination,log 3个部分,有兴趣的话还可以加上日志级别的定义:
filter f_debug { level(debug); };(记录debug以上级别的日志)
相应地:log { source(src); filter(f_debug); destination(d_mysql); };
查看是否有pipe
ls -lah /tmp/mysql.syslog-ng.pipe
如果没有的话,创建一个
mkfifo /tmp/mysql.syslog-ng.pipe
 
2.创建表
phpsyslogng 的dbsetup.sql中缺少指定数据库的语句,你需要先加上这样一句话:USE 你的数据库;
执行
mysql -u root -p  
3,创建一个shell脚本,将pipe里的数据写到mysql里去
#!/bin/sh
#
# File: syslogng-mysql-pipe.sh
#
# Take input from a FIFO and run execute it as a query for
# a mysql database.
#
# IMPORTANT NOTE:  This could potentially be a huge security hole.
# You should change permissions on the FIFO accordingly.
#
 
if [ -e /tmp/mysql.syslog-ng.pipe ]; then
        while [ -e /tmp/mysql.syslog-ng.pipe ]
                do
                        mysql -usyslog --password=mypasswordhere logs < /tmp/mysql.syslog-ng.pipe
        done
else
        mkfifo /tmp/mysql.syslog-ng.pipe
fi
EOF
在后台执行脚本(加上&)
Sh /usr/local/etc/syslog-ng/syslog-ng-mysql-pipe.sh &
**********
另外有发现pipe有时会关闭,写一个脚本监控这个进程即可。
#!/bin/sh
return=`ps -ef |grep syslogng|grep pipe|grep -v restart.sh`
echo $return
if [ -n "$return" ];then
echo "noproc"
exit 0
else
/bin/sh  /opt/syslog-ng/etc/syslogng-mysql-pipe.sh &
fi
**************************
重启syslogng:
/etc/init.d/syslog-ng restart
进mysql看看logs表里面有没有更新。
 
修改配置phpsyslogng/config/config.php
至少确认这几项是正确的DEFAULTLOGTABLE,DBUSER(数据库用户),DBUSERPW,DBADMIN(数据库管理员),DBADMINPW,DBNAME,
另外我设置了不用用户验证'REQUIRE_AUTH', FALSE
 
把php-syslog-ng放到apache下发布即可。我下的这个版本:php-syslog-ng-2.9.1r10里的regularresult.php和common_funcs.php有几处语法错误(郁闷了一阵-_-!)
如下
?>