LAMP+logzilla2.9.9+syslog-ng实现集中日志管理(第二版)[原创] 不指定

刘天斯 , 2010/07/24 14:28 , Linux , 评论(69) , 阅读(91246) , Via 本站原创 | |
一、前言
       为什么要引入第二版?由于第一版是基于Logzilla3.0,作者在Logzilla3.0以后做了licensed限制,可以从作者回复邮件的内容得到证实[图1]。因此需要定期去更新license.txt来达到延长使用期限的目的,个人感觉比较麻烦,同时还有主机及日志数的限制,这也是整理第二版的原因,当然,你也可以通过以下途径获取免费、无限制的licensed,见How to get a free, unlimited, license of LogZilla。但这不是本文所要讨论的话题:),第二版中本人采用logzilla2.9.9版来搭建一个免费、无限制的日志集中管理平台,功能上与3.0差异不大,好了,废话少说,我们开始吧!
[图1]

点击在新窗口中浏览此图片

平台截图
点击在新窗口中浏览此图片
点击在新窗口中浏览此图片

二、平台初始化
部署LAMP平台(略)
引用

#yum install libdbi* libnet
#cpan Date::Calc Text::LevenshteinXS String::CRC32
#cpan -i Digest::SHA1
#cpan -i Net::MySQL

三、下载相关包
引用

#cd /home/install
#mkdir logzilla;cd logzilla
#wget http://www.balabit.com/downloads/files/eventlog/0.2/eventlog_0.2.9.tar.gz
#wget http://www.balabit.com/downloads/files/syslog-ng/open-source-edition/3.0.3/setups/rhel-5-i386/syslog-ng-3.0.3-1.rhel5.i386.rpm

四、开始安装
引用

# cp eventlog_0.2.9.tar.gz /usr/src/redhat/SOURCES/
# tar zxvf  eventlog_0.2.9.tar.gz
# cd eventlog-0.2.9/
# rpmbuild --ba eventlog.spec.bb
# cd /usr/src/redhat/RPMS/x86_64
# rpm -Uvh libevtlog*

#cd /home/install/logzilla
#rpm -Uvh syslog-ng-3.0.3-1.rhel5.i386.rpm

五、安装logzilla
引用

#cd /www/webroot/
#wget http://php-syslog-ng.googlecode.com/files/logzilla_v2.9.9o.tgz
#tar xzvf logzilla_v2.9.9o.tgz
#mkdir -p /var/log/logzilla

六、配置Mysql
引用

# mysql -u -p
mysql> SELECT @@event_scheduler;
+-------------------+
| @@event_scheduler |
+-------------------+
| OFF               |
+-------------------+
1 row in set (0.00 sec)


低于Mysql5.1版本会提示如下,如不打算升级到logzilla3.0,没有关系,可以略过此步骤。
mysql> SELECT @@event_scheduler;
ERROR 1193 (HY000): Unknown system variable 'event_scheduler'

激活event_scheduler
引用

mysql> SET GLOBAL event_scheduler = 1;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @@event_scheduler;
+-------------------+
| @@event_scheduler |
+-------------------+
| ON                |
+-------------------+
1 row in set (0.00 sec)

mysql> quit;

七、修改Syslog-ng配置
#vi /opt/syslog-ng/etc/syslog-ng.conf

八、修改apache配置
#vi httpd.conf

重启apache服务:/etc/init.d/apache2 restart

九、修改php.ini
Vi /usr/local/php/lib/php.ini

十、配置日志分隔
cp /www/webroot/php-syslog-ng/scripts/contrib/system_configs/logrotate.d /etc/logrotate.d/logzilla

十一、添加作业
引用

@daily /usr/local/php/bin/php /www/webroot/php-syslog-ng/scripts/logrotate.php >> /var/log/php-syslog-ng/logrotate.log
@daily /usr/bin/find /www/webroot/php-syslog-ng/html/jpcache/ -atime 1 -exec rm -f '{}' ';'
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/local/php/bin/php /www/webroot/php-syslog-ng/scripts/reloadcache.php >> /var/log/php-syslog-ng/reloadcache.log

十二、开始平台安装
# /etc/init.d/syslog-ng restart
http://192.168.0.100/logs/来进行安装
步骤如下:
点击在新窗口中浏览此图片

点击在新窗口中浏览此图片

点击在新窗口中浏览此图片

点击在新窗口中浏览此图片

点击在新窗口中浏览此图片

点击在新窗口中浏览此图片

点击在新窗口中浏览此图片

点击在新窗口中浏览此图片

点击在新窗口中浏览此图片

十三、替换脚本路径
引用

cd /www/wewroot/php-syslog-ng/scripts
./fixpaths.sh

或者直接用sed来修改
引用

#sed -i -e "{ s@/path_to_logzilla@/www/webroot/php-syslog-ng@}" *.*

#/etc/init.d/syslog-ng restart

十四、客户端配置
在最后添加以下,其中syslog.admin.com.cn为主机域名,也可以直接用IP代替。
#vi /etc/syslog.conf
*.emerg;*.err;*.warning         @syslog.admin.com.cn
#/etc/init.d/syslog restart

测试:logger -p local4.err "This is a local.err test message."

十五、后续问题
问题一、点击[Graph]时会提示“JpGraph Error Font file "/usr/share/fonts/truetype/msttcorefonts/verdana.ttf" is not readable or does not exist.”
解决方法:
mkdir -p /usr/share/fonts/truetype/msttcorefonts/
上传windows XP/2003/vista/下的字体文件verdana.ttf到/usr/share/fonts/truetype/msttcorefonts/即可。

问题二、logs表无数据,运行/www/webroot/php-syslog-ng/scripts/contrib/dbgen/dbgen.pl
提示:Cannot determine peer address at /usr/lib/perl5/site_perl/5.8.5/Net/MySQL.pm line 277

解决方法:
1、是logzilla2.9.9安装时一个bug,新建的mysql的syslogadmin、sysloguser用户权限没有成功赋予,手工添加上就OK了,感谢【杭州】FIGO提供的故障案例。
2、如第1步不成功,尝试修改/www/webroot/php-syslog-ng/html/config/config.php文件mysql主机地址localhost为127.0.0.1。

问题三、搜索缓存图表只显示两天的数据,最近三天没有数据?
解决方法:
由于search_cache表采用的是MEMORY存储引擎,有大小的限制,修改一下/etc/my.cnf,在[MYSQLD]添加:
tmp_table_size=1G
max_heap_table_size = 1G
再重启mysql就可以了。
效果图:
点击在新窗口中浏览此图片

问题四、不能显示日志当中带有"<"、">"的问题,如思科系统的日志。
感谢[常州]老高提供的故障案例。
解决方法:
在tailresult.php和regularresult.php中查找

在里面添加

即可。

问题五、客户端日志无法入库。
感谢[北京]永远飞扬提供的故障案例。
系统环境:
CentOS release 5.5 (Final) i386 2.6.18-194.el5
LAMP (系统rpm默认安装)
Mysql:5.0.77
Php:PHP 5.1.6
Apache:2.2.3

原因:
perl for mysql驱动异常,直接采用bin/mysql+insert sql语句入库。

解决方法:
#vi /opt/syslog-ng/etc/syslog-ng.conf

*注:配置中的相关参数需根据个人实际环境进行修改。


全世界都在找logzilla_v2.9.9o.tgz包,打包线上的包放上来(修复原先一些小bug)
下载文件 (已下载 3431 次)


参考文献:http://nms.gdd.net/index.php/LogZilla_Installation_Guide

如大家有什么疑问或感兴趣的话题可以通过weibo与我交流:http://t.qq.com/yorkoliu
老高 Email
2010/10/15 09:13
Warning: imagejpeg() [function.imagejpeg]: Unable to open 'lpd_graph.jpeg' for writing: Permission denied in /var/www/php-syslog-ng/html/includes/blocks/graph-logs_per_day.php on line 166

首页不能显示饼图,感觉很奇怪
刘天斯 回复于 2010/10/15 09:49
检查文件访问权限,建议使用运行webserver用户。
leeo Email Homepage
2010/10/14 17:14
我在vm下--RHEL 5.4编译安装logzilla,无法连外网,总是安装不成功,天师你再写份编译安装版的吧,脱机版,继续关注你
刘天斯 回复于 2010/10/14 19:35
下载源码包到服务器安装、编译便是,呵呵。
prometheus
2010/10/11 16:34
我比较愚笨, 比如我说的情况,是不是要重新做数据库?还是直接表清零即可。然后把归档的数据CP回来?
刘天斯 回复于 2010/10/11 18:12
导入备份的数据文件就可以了。mysql -u root -p dbname < /opt/db.sql
karwen
2010/10/11 15:14
添加了作业

@daily php /var/www/logzilla/scripts/logrotate.php >> /var/log/logzilla/logrotate.log
@daily find /var/www/logzilla/html/jpcache/ -atime 1 -exec rm -f '{}' ';'
0,5,10,15,20,25,30,35,40,45,50,55 * * * * php /var/www/logzilla/scripts/reloadcache.php >> /var/log/logzilla/reloadcache.log


/etc/my.cnf,在[MYSQLD]添加:
tmp_table_size=1G
max_heap_table_size = 1G

host列表还是没有自动更新新加入的主机
要重启mysql

mysql 版本 5.0.77
刘天斯 回复于 2010/10/11 15:34
只记录有日志来源的主机,如确定有日志来源,应该是syslog-ng插件日志接口(perl脚本)问题。
prometheus
2010/10/11 13:30
那一般情况这样的问题该如何处理?
刘天斯 回复于 2010/10/11 14:18
做好数据库的备份就可以了。
prometheus
2010/10/11 09:53
十一假期因为公司测试关闭了服务器,等十一后重新开放发现phosyslog无法自动归档了~ 查询也出现问题,问这个系统是不是不能中断超过一天后恢复使用?如果必须重做是否可以将原来的归档数据还原到新服务器上?
刘天斯 回复于 2010/10/11 12:02
应该all_logs表损坏,其它归档表是存在的。
karwen
2010/10/08 17:56
到了10月,发现数据库里没有了9月份的日志
平台自动删除了?
请问怎么修改才能保留日志?
刘天斯 回复于 2010/10/09 13:50
平台不会删除历史表。
karwen
2010/09/29 18:12
客户端Windows2003的日志发到centOS5.5日志服务器上的中文全乱码了
客户端用的是 evtsys

查看了下作者的更新日志:
Sends messages in UTF-8 encoding

win2003的中文是gb2312吧

会不会是这个问题呢?
有没什么办法解决呢?
刘天斯 回复于 2010/09/29 20:30
入库前做一下转换:echo "日志内容"|iconv -f GB2312 -t UTF-8
karwen
2010/09/19 10:57
一直没看到有日志成功写库

然后进logzilla后台RELOAD CACHE,日志就写库了

奇怪
刘天斯 回复于 2010/09/19 11:23
尝试按文章后续问题三来处理。
karwen
2010/09/18 09:30
[root@localhost ~]# netstat -ant

Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN

端口已经在监听了
刘天斯 回复于 2010/09/18 18:53
可以尝试略过此步,观察其它主机的日志是否成功写库。
karwen
2010/09/17 15:30
运行
/var/www/html/php-syslog-ng/scripts/contrib/dbgen/dbgen.pl

结果
Host: ftp-2
Facility: daemon
Priority: err
Level: crit
Tag: Tag
YMDHMS: 2010-09-17 10:01:37
Program: DBGen
Message: DBGen: %C6KENV-2-FANUPGREQ: Fan 1 had a rotation error reported.
Affected row: 0
send: Cannot determine peer address at /usr/lib/perl5/site_perl/5.8.8/Net/MySQL.pm line 293

-------
请问这是什么原因?谢谢
刘天斯 回复于 2010/09/17 11:46
请参考文章后续问题二。


-------------------------
后续问题二试过了,出现以下结果

权限给过了
还是上面的错

然后将 localhost 改成 127.0.0.1

[root@localhost ~]# /var/www/html/php-syslog-ng/scripts/contrib/dbgen/dbgen.pl
Debug off, showing only inserted data...
Couldn't connect to 3306: connect: 没有那个文件或目录 at /var/www/html/php-syslog-ng/scripts/contrib/dbgen/dbgen.pl line 205
You have new mail in /var/spool/mail/root
刘天斯 回复于 2010/09/17 17:50
检查本地127.0.0.1:3306有没有监听。
karwen Email
2010/09/17 10:06
运行
/var/www/html/php-syslog-ng/scripts/contrib/dbgen/dbgen.pl

结果
Host: ftp-2
Facility: daemon
Priority: err
Level: crit
Tag: Tag
YMDHMS: 2010-09-17 10:01:37
Program: DBGen
Message: DBGen: %C6KENV-2-FANUPGREQ: Fan 1 had a rotation error reported.
Affected row: 0
send: Cannot determine peer address at /usr/lib/perl5/site_perl/5.8.8/Net/MySQL.pm line 293

-------
请问这是什么原因?谢谢
刘天斯 回复于 2010/09/17 11:46
请参考文章后续问题二。
wxhdjl
2010/09/14 21:50
开始的时候就是按照安装配置方法设置的定期执行,每五分钟执行一次reloadcache.php,更新根本跟不上,可以肯定的是cron并没有起到作用,所以很烦恼,哎,我再看看找找办法,看看能不能解决吧,谢谢
刘天斯 回复于 2010/09/14 23:50
分析了一下reloadcache.php源码,发现操作的缓存表为内存类型,应该是超过默认大小限制,尝试加大tmp_table_size=1G max_heap_table_size = 1G(my.cnf),祝好运!
wxhdjl
2010/09/14 13:08
使用的是mysql-5.0.77-4.2.i386,当client没有到达30个的时候还没有这个问题,在30个之后再加入client就发现hosts列表中显示不出新的client了,查资料可能是由于数据库的search_cache的问题,开发者的意见是清空cache,然后在运行reloadcache.php即可,但是每次都得手动执行一遍很麻烦,我想咨询下是否能够提供点建议呢,谢谢!
刘天斯 回复于 2010/09/14 15:34
做个reloadcache.php的定期作业吧 :(
wxhdjl
2010/09/14 10:14
我在运行logzilla_v2.9.9o的时候发现了一个问题,当我新加入client机器之后,hosts列表只显示原有的client机器,新加入的不能显示出来,同样的program列表也不能及时更新,当我重新启动mysql服务之后列表才得到了更新,logzilla的开发者说这是logzilla的一个bug,应该可以通过3.0版本来进行解决,但是我不想使用3.0版本,我想咨询一下在2.9版本上面是否有办法解决这个问题呢。谢谢!
刘天斯 回复于 2010/09/14 11:41
没有碰到该问题,是不是数据库版本的原因?
robt Email
2010/09/10 14:11
能问一下你们日志的规模么?如果是几千台syslog日志的话,数据库的插入和查询都是大问题。。。
刘天斯 回复于 2010/09/11 08:57
几个措施:1、来源过滤,如只接收警告、错误的日志。2、日志服务器集群处理。3、关于查询方面,logzilla每天都会分表做归档。
prometheus
2010/08/18 16:55
请教刘大师 这个玩意怎么进行备份啊~ 最好可以按天备份,要不数据太大了
刘天斯 回复于 2010/08/18 17:37
平台会每天进行分表,可以将旧表进行归档。
prometheus
2010/08/04 10:40
有一个不是很明白~ 这2个源为什么名称都相同?source s_local {  internal();  unix-stream("/dev/log");  file("/proc/kmsg" program_override("kernel: "));  };  source s_local {          udp(ip(0.0.0.0) port(514));  };
刘天斯 回复于 2010/08/04 11:34
syslog-ng支持这种写法,处理时是叠加。
prometheus
2010/08/04 10:36
原来都有HOHO
prometheus
2010/08/03 16:08
我在其他的文章中以及自己测试过程中还发现一个问题帮你补充上吧~ 因为本人没BOLG所以没地方发,之前的GOOGLEDOC和FACEBOOK被封四、使用问题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)从安装包中下载,并放到上述目录下安装完毕后正常
刘天斯 回复于 2010/08/03 23:35
谢谢prometheus,本文在后续问题1中已经说明了。
分页: 3/4 第一页 上页 1 2 3 4 下页 最后页
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]