正如前面提到的,syslog-ng是可用于替代系统原来的sysklog日志服务器。其配置简单,并且支持多种不同的日志目的导向方式,包括mysql数据库。以下再配合php-syslog-ng套件,即可从浏览器实现日志的观察和过滤,相当方便。
演示环境:
用户名和密码都是:demo
一、原理要实现用php-syslog-ng查看syslog-ng的日志信息,需满足以下条件:
引用
1、配置syslog-ng,把指定的log信息insert到mysql数据库中;
2、配置apache和php,让php-syslog-ng可以从web浏览器使用。
二、安装新版syslog-ng套件为配合php-syslog-ng,并修复一些已经的Bug。建议升级syslog-ng套件。
系统平台:
红旗DC Server 5.0 for x861、获取源码包可以从官方网站获取源码包。但我一直都建议尽量用rpm管理系统中的软件的,所以,我使用src.rpm咯。
Douglas E. Warner在提供了rhel 4的2.0.4版本rpm下载,和fedora的2.0.5下载。
我只是修改了其中一些配置文件,以适合红旗DC Server 5.0的情况。
源码包:
下载文件
(其中,eventlog套件是编译syslog-ng的时候需要的)
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包。虽然红旗上默认已经安装,但编译前请再次确认。3、更新包下载下面是我已经编译好的包:
下载文件
三、安装php-syslog-ngsourceforge地址:
官方网站:
最新版本下载地址:
点击本地下载:
下载文件
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/
※因为php-syslog-ng中的scripts脚本会引用很多html中的配置,所以,请务必把php-syslog-ng中的html和scripts目录放在同一根目录下。否则,需手工修改源码。2、修改php环境为配合php-syslog-ng对php环境的要求,请修改/etc/php.in中的内容为:
引用
;display_errors = Off
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
引用
# PHP-SYSLOG-NG
ServerName syslog.linuxfly.org
ServerAdmin linuxing@linuxfly.org
DocumentRoot /var/www/html/php-syslog-ng/html
Options FollowSymLinks
AllowOverride All
# pcw No directory listings
# Options Indexes FollowSymLinks MultiViews
Options -Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
Deny from all
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
然后,重启apache:
# service httpd restart
5、安装数据库访问进行数据库安装:
校验系统环境,有问题,参考上面的步骤是否有错。
查看协议:
配置数据库参数:
其中需要注意:
引用
MySQL User Name:填入数据库管理用户,其必须有创建数据库和分派权限的能力;
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,加入:
引用
destination d_mysql {
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加入:
引用
# PHP-Syslog-NG
@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 directory2、配置日志循环# cp logrotate.d /etc/logrotate.d/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"的时候,报错:
引用
JpGraph Error Font file "/usr/share/fonts/corefonts/verdana.ttf" is not readable or does not exist.
原因是,新版的php-syslog-ng考虑到旧版字库版权的问题,使用了verdana.ttf字库。而当前系统目录该字库。
解决办法:
1)从Windows\Fonts目录中拷贝到上述的路径即可;
2)从下面下载,并放到上述目录下:
下载文件
执行:
# mkdir -p /usr/share/fonts/corefonts
# cd /usr/share/fonts/corefonts/
# wget
# unzip verdana.ttf.zip
# rm -f verdana.ttf.zip
图例:
2、Web安全问题若您配置虚拟主机的时候,使用php-syslog-ng的根目录作为Web根目录,请小心scripts的安全问题。
应增加类似:
引用
Deny from all
Deny from all
※User Manual原文中有错,请不要把"/var/www/phpsyslogng/includes"屏蔽,否则会导致网页中调用日期函数错误的。3、命令行执行php脚本的时候报错报错信息如下:
引用
# php /var/www/html/php-syslog-ng/scripts/reloadcache.php >> /var/log/php-syslog-ng/reloadcache.log
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
但这样就不能看到错误信息了。
六、参考资料php-syslog-ng自带的INSTALL-STEPS和TROUBLESHOOTING-INSTALL
Help里提供的php-syslog-ng User Manual
http://blog.mllm.org/node/184原文备份:
下载文件
阅读(1730) | 评论(0) | 转发(0) |