一、原理
要实现用php-syslog-ng查看syslog-ng的日志信息,需满足以下条件:
2、配置apache和php,让php-syslog-ng可以从web浏览器使用。
可以从官方网站获取源码包。但我一直都建议尽量用rpm管理系统中的软件的,所以,我使用src.rpm咯。
Douglas E. Warner在www.silfreed.net提供了rhel 4的2.0.4版本rpm下载,和fedora的2.0.5下载。
2、编译及安装
解压:
# tar xzvf syslog-ng-2.0.5.src.tar.gz
# rpm -ivh eventlog-0.2.5-1.src.rpm
# rpm -ivh syslog-ng-2.0.5-1.src.rpm
编译及安装eventlog:
# cd /usr/src/asianux/RPMS/SPECS
# rpmbuild -bb eventlog.spec
# cd /usr/src/asianux/RPMS/i386/
# rpm -ivh eventlog-devel-0.2.5-1.i386.rpm eventlog-0.2.5-1.i386.rpm
编译及安装syslog-ng:
# cd /usr/src/asianux/RPMS/SPECS
# rpmbuild -bb syslog-ng.spec
# rpm -Uvh syslog-ng-2.0.5-2qk.i386.rpm syslog-ng-vim-2.0.5-2qk.i386.rpm
※为兼容系统自带syslog-ng套件,该rpm包,已把原来的/etc/syslog-ng.conf路径修改为/etc/syslog-ng/syslog-ng.conf。
另外,编译时,还需依赖libnet包。
三:安装php-syslog-ng
下载地址:http://sourceforge.net/projects/php-syslog-ng/
1、解压
# mkdir /var/www/html/php-syslog-ng/
# tar xzvf php-syslog-ng-2.9.3l.tgz -C /var/www/html/php-syslog-ng/
# cd /var/www/html/php-syslog-ng/
# chown -R apache.apache html/
2、修改php环境
为配合php-syslog-ng对php环境的要求,请修改/etc/php.in中的内容为:
display_errors = On
; magic_quotes_gpc = Off
magic_quotes_gpc = On
; memory_limit = 8M
memory_limit = 256M
; max_execution_time = 30
max_execution_time = 90
上述不是必须的,但作为建议选项。另外,新版php-syslog-ng已在.htaccess中定义magic_quotes_gpc和register_globals选项,可不修改全局配置。
3、创建日志目录
# mkdir -p /var/log/httpd/php-syslog-ng
# mkdir -p /var/log/php-syslog-ng
4、加入apache虚拟主机
这部分,请根据您的apache实际情况操作。以我的系统为例,所有虚拟主机配置文件都放在/etc/httpd/conf目录中,以vhost开头的配置文件内。所以,在该目录加入文件内容:
# cat vhost_php-syslog-ng.conf
<VirtualHost *:80>
ServerName syslog.linuxfly.org
ServerAdmin linuxing@linuxfly.org
DocumentRoot /var/www/html/php-syslog-ng/html
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/html/php-syslog-ng/html>
# pcw No directory listings
# Options Indexes FollowSymLinks MultiViews
Options -Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
<Directory /var/www/html/php-syslog-ng/html/config>
Deny from all
</Directory>
ErrorLog /var/log/httpd/php-syslog-ng/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/httpd/php-syslog-ng/access.log combined
ServerSignature On
</VirtualHost>
然后,重启apache:
# service httpd restart
5、安装数据库
访问http://syslog.linuxfly.org进行数据库安装:
校验系统环境,有问题,参考上面的步骤是否有错。
查看协议:
配置数据库参数:
其中需要注意:
MySQL Password:数据库管理用户的密码;
MySQL Database Name:php-syslog-ng使用的数据库命令,安装程序会使用上面的用户自动创建;
MySQL Port:数据库使用的端口
MySQL Table Prefix:表的前缀,但不要使用 'old_',其代表备份表;
Syslog User Name:php-syslog-ng用这个用户读取数据库信息;
Syslog User Password:其密码;
Syslog Admin Name:php-syslog-ng用这个用户写入数据库信息;
Syslog Admin Password:其密码;
Drop Existing Tables:是否删除已存在的表;
Backup Old Tables:是否备份旧的表;
Install Sample Data:是否安装示例数据;
Install CEMDB Data:是否安装用于收集Cisco ERROR TABLE的数据。
如果你选择安装CEMDB数据,这需要花费一定的时间:
输入网页的标题:
输入php-syslog-ng的管理信息:
可输入管理员的Email地址,以及管理员密码。
php-syslog-ng会自动创建一个随机密码,你可以修改
安装完成,并会提示你管理员的信息:
至此Web部分已经完成。
但因为,syslog-ng还未把数据导向mysql,所以,此时网页中并没有数据的。
6、配置脚本
进入scripts目录,并运行:
# cd /var/www/html/php-syslog-ng/scripts/
# perl -i -pe 's/\/www\/php-syslog-ng/\/var\/www\/html\/php-syslog-ng/g' *
Can't do inplace edit: cemdb is not a regular file, <> line 30.
最后的信息是提示cemdb是个目录,不能替换。该目录中的文件不要修改,所以,该信息可以忽略。
接下来,需要配置syslog-ng,把日志信息导向mysql的pipe接口。
7、配置syslog-ng
其配置文件在:/etc/syslog-ng.conf,加入:
pipe("/var/log/mysql.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(s_sys);
destination(d_mysql);
};
或使用scripts的脚本:
# cat syslog.conf >> /etc/syslog-ng/syslog-ng.conf
※注意:需把源驱动器的s_all修改为s_sys。
8、创建mysql的pipe通道
首先确认一下scripts目录中,syslog2mysql.sh脚本来的配置文件路径是否正确,若没问题,运行它:
# /var/www/html/php-syslog-ng/scripts/syslog2mysql.sh >> /var/log/php-syslog-ng/mysql.log 2>&1 &
若日志没有报错,即可。
9、重启syslog-ng服务
若syslog未关闭,请执行:
# service syslog stop
# service syslog-ng start
# chkconfig syslog off
# chkconfig --level 2345 syslog-ng on
从Web进入php-syslog-ng,应可正常使用:
若使用php-syslog-ng对日志进行集中管理,其数据量可能是相当巨大的,必须考虑日志循环的问题。可以使用计划任务实现。
1、配置计划任务
使用crontab -e加入:
@daily php /var/www/html/php-syslog-ng/scripts/logrotate.php >> /var/log/php-syslog-ng/logrotate.log
@daily find /var/www/html/php-syslog-ng/html/jpcache/ -type f -atime 1 -exec rm -f '{}' ';'
@reboot /var/www/html/php-syslog-ng/scripts/syslog2mysql.sh >> /var/log/php-syslog-ng/mysql.log 2>&1
0,5,10,15,20,25,30,35,40,45,50,55 * * * * php /var/www/html/php-syslog-ng/scripts/reloadcache.php >> /var/log/php-syslog-ng/reloadcache.log
或确认scripts脚本中的crontab文件路径正确后,运行:
# cat crontab >> /var/spool/cron/root
※注意:
1、请把运行dbgen.pl的命令删除,该脚本只是用于产生演示数据,详见后面说明。
2、执行php脚本的时候可能会包oci8.so错误,后面也有说明。
3、原find语句存在Bug,请加入-type f选项,否则会报如下的错误:
rm: cannot remove `/var/www/html/php-syslog-ng/html/jpcache/': Is a directory
2、配置日志循环
# cp logrotate.d /etc/logrotate.d/php-syslog-ng
php-syslog-ng的配置安装到此结束啦----嘎嘎-----
php-syslog-ng脚本功能解释:
五、scripts中的脚本
对scripts目录中其他的文件讲解以下:
请留意,.sh结尾的是bash脚本,可直接执行;而.pl的是perl脚本,使用perl执行;而.php结尾的是php脚本,需使用php命令执行。
1、logrotate.php
对php-syslog-ng中的表进行日志循环,其与系统的logrotate不同。该脚本的执行结果,是把每天的日志表备份起来,并创建一个新的日志表供读写。在crontab下,每天自动执行一次。
2、syslog2mysql.sh
该脚本是用于创建mysql的pipe管道,让syslog-ng可通过该管道写入mysql中。在crontab下,系统系统的时候自动运行。
3、reloadcache.php
该脚本的作用是,当有新的host加入syslog-ng后,更新mysql中的信息。在crontab下,每5分钟运行一次。
4、resetusers.sh
用于重置用户表,当忘记admin密码的时候,可运行它。重置后,管理员用户名和密码都是admin。
5、drop-old-tables.php
当php-syslog-ng运行一段时间后,由logrotate.php可能会产生大量的旧日志表。使用这个脚本,可删除具有相同前缀的表,例如logs_*等,可方便管理。
6、dbgen.pl
该脚本用于产生一些演示数据,在测试php-syslog-ng是否正常时可以运行,其会插入大量数据到mysql中。
因其使用perl编写,故需要使用Net::MySQL模块。
安装模块及运行:
# mkdir /usr/lib/perl5/site_perl/5.8.5/Net
# cp MySQL.pm /usr/lib/perl5/site_perl/5.8.5/Net/
# /var/www/html/php-syslog-ng/scripts/dbgen.pl
示例:
※注意:这个脚本只是演示而已,实际没什么用的。而官方提供的crontab文件里是每小时执行一次的,应把它删掉。
五、其他
1、不能显示图形
点击"Graph"的时候,报错:
原因是,新版的php-syslog-ng考虑到旧版字库版权的问题,使用了verdana.ttf字库。而当前系统目录该字库。
解决办法:
1)从Windows\Fonts目录中拷贝到上述的路径即可;
2)从下面下载,并放到上述目录下:
执行:
# mkdir -p /usr/share/fonts/corefonts
# cd /usr/share/fonts/corefonts/
# wget http://www.linuxfly.org/p_w_upload/verdana.ttf.zip
# unzip verdana.ttf.zip
# rm -f verdana.ttf.zip
图例:
若您配置虚拟主机的时候,使用php-syslog-ng的根目录作为Web根目录,请小心scripts的安全问题。
应增加类似:
Deny from all
</Directory>
<Directory "/var/www/phpsyslogng/config">
Deny from all
</Directory>
3、命令行执行php脚本的时候报错
报错信息如下:
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/oci8.so' - /usr/lib/php/modules/oci8.so: undefined symbol: OCINlsCharSetNameToId in Unknown on line 0
原因是oci8.so(php和Oracle的接口)不能在未定义前执行,这里也不会使用到该模块。
所以,请修改
/etc/php.d/oci8.ini
,改为:
重启httpd服务即可。
◎若一定要使用该模块,可把执行命令的报错信息去掉,即改为:
# php /var/www/html/php-syslog-ng/scripts/reloadcache.php >> /var/log/php-syslog-ng/reloadcache.log 2>/dev/null
客户端配置
# vi /etc/syslog.conf
*.* @loghost
# cat /etc/hosts
192.168.169.1 loghost
# /etc/init.d/syslog restart 重启syslog.