使用php-syslog-ng远程查看与管理系统日志
本文可自由转载,但请遵循“署名-非商业用途-保持一致”的创作共用协议。 永久链接:JoeCen's 小猫窝-----------------------------
转载本文请保留作者与出处等信息:
作者:joecen
网站:http://www.joecen.com
原文链接:http://www.joecen.com/2007/10/24/php-syslog-ng/
作为一个系统管理员,通常管理着数以百计的服务器和网络设备。如果在繁琐的工作之余,能方便、快捷的了解自己服务器的状况,确实会给自己的工作带来很大好处。 有很多途径能做到“了解自己服务器的状况”,比如用cacti和rrdtool,能忠实记录服务器的性能等指标。但是如果服务器挂了,或者登陆不上了,如何第一时间了解它出了什么问题呢?
本文主要介绍的是另外一个途径来方便的查询服务器的状况,即把众多服务器或者网络设备的syslog记录到一台服务器上面去。
------------------------------------------------------------------------------------------------
一、简单介绍
我们要用到的软件是syslog-ng和php-syslog-ng,前者的网站是http://www.balabit.com/,而phpsyslog-ng可以从sourceforge上面找到。
什么是syslog-ng? syslog-ng是"Balabit IT Security"公司的产品,不过也是一款“opensource”软件。它号称是“下一代”(next generation)的syslog,从功能上看,它的确比普通linux预装的syslog要强大,它有更好的消息过滤粒度,能提供UDP或TCP的listen,能与syslog服务无缝结合等等。详细可以到Balabit的网站上查看。
使用syslog-ng区组的系统架构可以参照下图:

安装了syslog-ng和php-syslog-ng(当然还需要apache、php和mysql的支持)的机器作为这个系统的服务端,其它所有的服务器或者网络设备作为客户端, 通过udp协议向syslog-ng服务器发送syslog信息。syslog-ng服务器将这些log记录下来,记录为log文件或者insert到mysql数据库中(具体怎么做要看自己的syslog-ng配置了)。 其实php-syslog-ng唯一负责的只是显示mysql数据库中的log信息而已。
二、安装方法
apache、mysql、php的安装的就不多说了,如果你是使用debian的话,很轻松就会搞定。syslog-ng也是一样,如果你是使用debian,那么只需要输入:
系统即会自动帮你删除了原来的syslog服务,并生成一个完善的syslog-ng配置文件,取代旧的syslog的所有功能。 如果你是使用其它的linux或者bsd的话,那么我觉得下载一个tar包进行编译安装是一个不错的选择。
php-syslog-ng:
php-syslog-ng比起我从前第一次用它的时候有了一些改进,它现在有自己的安装页面,来完成数据库安装、配置文件的生成之类的工作,还是挺方便的。下载php-syslog-ng之后在apache中配置好,浏览器中打开install/index.php页面,一步一步的走下去就可以了。至于数据库的用户、密码之类的东西,自己确定就好。 php-syslog-ng目录下的子目录script里面有一些脚本需要运行:
- syslog2mysql.sh --在该脚本中配置mysql用户名和密码(需insert权限),然后运行。该脚本的作用是将syslog-ng收集到的数据通过管道insert到mysql数据库中;
- reloadcache.php -- 可以将其放到crontab中定时运行。该脚本的作用是,当有新的host的syslog信息发送到syslog-ng后,运行该脚本能及时更新host列表;
- logrotate.php -- 应该是用来对syslog进行rotate的,不过其实有很多工具可以做这个事情,所以没有使用; 该目录下其它的脚本暂时没用到。
三、配置文件
1、syslog-ng的配置(server) 如果是debian的话,直接在/etc/syslog-ng/syslog-ng.conf配置文件的后面加上:
- ##for php-syslog-ng
- #source src {
- # unix-stream("/dev/log");
- # internal();
- #}; source net {
- unix-stream("/dev/log");
- internal();
- udp(ip(0.0.0.0) port(514));
- };
- destination hosts {
- file("/home/data/syslogs/$HOST/$FACILITY-$YEAR$MONTH$DAY" owner(root) group(root) perm(0600) dir_perm(0700) create_dirs(yes));
- };
- log {
- source(net);
- destination(hosts);
- };
- # Add the following to /etc/syslog-ng/syslog-ng.conf (or whereever the conf file is located on your system
- # pipe messages to /var/log/mysql.pipe to be processed by mysql
- 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));
- };
- filter f_mysql {
- level(notice..emerg)
- or facility(auth,authpriv)
- and facility(cron);
- };
- log {
- source(s_all);
- filter(f_mysql);
- destination(d_mysql);
- };
- log {
- source(net);
- destination(d_mysql);
- };
如果是其它linux或者bsd的话,这里有完整的syslog-ng.conf配置文件下载。
2、syslog的配置(client):
只需
- echo "*.notice;cron.none;authpriv.* @remote_IP" >> /etc/syslog.conf
- /etc/init.d/sysklogd restart
即可。
四、解决错误
php-syslog-ng不知道是不是维护的人偷懒,我发现它的页面有两个地方错误:
1、表格式出错: include/regularresult.php文件的471行
应该注释掉; 否则html表格格式会出错。
2、图片链接错误:
修改
文件,在开头加入:
并将28行:
改为
同理,将59行:
改为
否则首页的选择日期的图片会出现404错误。
----------------------
转载本文请保留作者与出处等信息:
作者:joecen
网站:http://www.joecen.com
原文链接:http://www.joecen.com/2007/10/24/php-syslog-ng/