使用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,那么只需要输入:

apt-get install syslog-ng

系统即会自动帮你删除了原来的syslog服务,并生成一个完善的syslog-ng配置文件,取代旧的syslog的所有功能。 如果你是使用其它的linux或者bsd的话,那么我觉得下载一个tar包进行编译安装是一个不错的选择。

php-syslog-ng:
php-syslog-ng比起我从前第一次用它的时候有了一些改进,它现在有自己的安装页面,来完成数据库安装、配置文件的生成之类的工作,还是挺方便的。下载php-syslog-ng之后在apache中配置好,浏览器中打开install/index.php页面,一步一步的走下去就可以了。至于数据库的用户、密码之类的东西,自己确定就好。 php-syslog-ng目录下的子目录script里面有一些脚本需要运行:

  1. syslog2mysql.sh --在该脚本中配置mysql用户名和密码(需insert权限),然后运行。该脚本的作用是将syslog-ng收集到的数据通过管道insert到mysql数据库中;
  2. reloadcache.php -- 可以将其放到crontab中定时运行。该脚本的作用是,当有新的host的syslog信息发送到syslog-ng后,运行该脚本能及时更新host列表;
  3. logrotate.php -- 应该是用来对syslog进行rotate的,不过其实有很多工具可以做这个事情,所以没有使用;  该目录下其它的脚本暂时没用到。

三、配置文件
1、syslog-ng的配置(server) 如果是debian的话,直接在/etc/syslog-ng/syslog-ng.conf配置文件的后面加上:

  1. ##for php-syslog-ng
  2. #source src {
  3. #       unix-stream("/dev/log");
  4. #       internal();
  5. #}; source net {
  6. unix-stream("/dev/log");
  7. internal();
  8. udp(ip(0.0.0.0) port(514));
  9. };
  10.  
  11. destination hosts {
  12. file("/home/data/syslogs/$HOST/$FACILITY-$YEAR$MONTH$DAY" owner(root) group(root) perm(0600) dir_perm(0700) create_dirs(yes));
  13. };
  14.  
  15. log {
  16. source(net);
  17. destination(hosts);
  18. };
  19.  
  20. # Add the following to /etc/syslog-ng/syslog-ng.conf (or whereever the conf file is located on your system
  21. # pipe messages to /var/log/mysql.pipe to be processed by mysql
  22.  
  23. destination d_mysql {
  24. pipe("/var/log/mysql.pipe"
  25. template("INSERT INTO logs
  26. (host, facility, priority, level, tag, datetime, program, msg)
  27. VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL', '$TAG', '$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC',
  28. '$PROGRAM', '$MSG' );\n") template-escape(yes));
  29. };
  30.  
  31. filter f_mysql {
  32. level(notice..emerg)
  33. or facility(auth,authpriv)
  34. and facility(cron);
  35.  
  36. };
  37.  
  38. log {
  39. source(s_all);
  40. filter(f_mysql);
  41. destination(d_mysql);
  42. };
  43.  
  44. log {
  45. source(net);
  46. destination(d_mysql);
  47. };

如果是其它linux或者bsd的话,这里有完整的syslog-ng.conf配置文件下载

2、syslog的配置(client):

只需

  1. echo "*.notice;cron.none;authpriv.*           @remote_IP" >> /etc/syslog.conf
  2. /etc/init.d/sysklogd restart

即可。

四、解决错误

php-syslog-ng不知道是不是维护的人偷懒,我发现它的页面有两个地方错误:

1、表格式出错: include/regularresult.php文件的471行

echo "</td><td>";

应该注释掉; 否则html表格格式会出错。

2、图片链接错误:
修改

include/html_header.php

文件,在开头加入:

require_once 'config/config.php';

并将28行:

myDatePicker.toggleButton.imgPath = '/images/buttons/';

改为

myDatePicker.toggleButton.imgPath = '<?=SITEURL;?>/images/buttons/';

同理,将59行:

myDatePicker.toggleButton.imgPath = '/images/buttons/';

改为

myDatePicker.toggleButton.imgPath = '<?=SITEURL;?>/images/buttons/';

否则首页的选择日期的图片会出现404错误。

----------------------
转载本文请保留作者与出处等信息:
作者:joecen
网站:http://www.joecen.com
原文链接:http://www.joecen.com/2007/10/24/php-syslog-ng/

随机日志

  • 使用Cacti监测系统与网络性能_5
  • 配置msmtp,字符界面下使用smtp发邮件
  • 查看metrics分析的数据
  • 又买新手机
  • 杂志终于到了,文章发表
  • One Response to “使用php-syslog-ng远程查看与管理系统日志”

    1. litianshu Says:

      您好:
      我看了你的文档,我配置完之后,mysql 里没有数据。请帮分析一下,谢谢

    Leave a Reply