Chinaunix首页 | 论坛 | 博客
  • 博客访问: 170617
  • 博文数量: 20
  • 博客积分: 542
  • 博客等级: 中士
  • 技术积分: 240
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-23 09:44
文章分类

全部博文(20)

文章存档

2012年(3)

2011年(17)

分类: LINUX

2011-08-18 14:43:55

一、原理
要实现用php-syslog-ng查看syslog-ng的日志信息,需满足以下条件:
引用
1、配置syslog-ng,把指定的log信息insert到mysql数据库中;
2、配置apache和php,让php-syslog-ng可以从web浏览器使用。
二、安装新版syslog-ng套件
1、获取源码包
可以从官方网站获取源码包。但我一直都建议尽量用rpm管理系统中的软件的,所以,我使用src.rpm咯。
Douglas E. Warner在提供了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

下载地址:

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的配置安装到此结束啦----嘎嘎-----

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



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

 

客户端配置

# vi  /etc/syslog.conf
*.*                      @loghost

# cat /etc/hosts
192.168.169.1           loghost

# /etc/init.d/syslog restart 重启syslog.
阅读(3831) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~