Chinaunix首页 | 论坛 | 博客
  • 博客访问: 335770
  • 博文数量: 104
  • 博客积分: 2815
  • 博客等级: 少校
  • 技术积分: 595
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-06 16:32
文章分类

全部博文(104)

文章存档

2013年(1)

2012年(2)

2011年(21)

2010年(80)

我的朋友

分类: 系统运维

2010-08-04 11:25:34

正如前面提到的,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 x86
1、获取源码包
可以从官方网站获取源码包。但我一直都建议尽量用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-ng
sourceforge地址:
官方网站:
最新版本下载地址:点击
本地下载:
下载文件

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 directory


2、配置日志循环
# 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,改为:
引用
; extension=oci8.so

重启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

原文备份:
下载文件

阅读(1712) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~