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

刘天斯 , 2010/07/24 14:28 , Linux , 评论(59) , 阅读(11568) , 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

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

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

如大家有什么疑问或感兴趣的话题可以通过weibo与我交流:http://t.qq.com/yorkoliu
老高
2010/11/08 09:27
php-syslog-ng的安装,主要是新建了数据库,难道是数据库的问题??
刘天斯 回复于 2010/11/08 11:13
不排除,更换个Perl for Mysql api试试。
老高
2010/11/08 09:01
日志系统运行几天后,突然不记录数据了。上次我也提到这个问题,重装一遍php-syslog-ng问题消失。我发现每天6:25的时候如果有这条记录:syslog-ng[2784]: Configuration reload request received, reloading configuration; 系统一切OK。如果系统不记录数据了,一定是当天6:25的时候没有这记录。这时候无论重启系统、重启SYSLOG-NG、MYSQL、APACHE2都不管用,只能重装php-syslog-ng。。请老刘指点迷津~~~~
刘天斯 回复于 2010/11/08 09:04
php-syslog-ng的安装只是一个解压过程。
leo
2010/11/02 09:52
1. @daily  find /www/webroot/php-syslog-ng/html/jpcache/ -atime 1 -exec rm -f '{}' ';'
好像缺少 \

2. 加入windows监控端,服务器端需要做什么操作吗
刘天斯 回复于 2010/11/02 10:41
1、是BLOG排版的问题,直接copy不会存在换行;2、服务器端不需要做任何配置。
老高
2010/10/27 08:26
在安装步骤的第十一项添加作业:我有几个疑问,
@daily 是表示什么意思?每天操作一次吗?
/usr/local/php/bin/php /www/webroot/php-syslog-ng/scripts/logrotate.php是一条完整的路径,还是两条  /usr/local/php/bin/php   + /www/webroot/php-syslog-ng/scripts/logrotate.php?
刘天斯 回复于 2010/10/27 14:10
/usr/local/php/bin/php /www/webroot/php-syslog-ng/scripts/logrotate.php 为一条命令。
ll
2010/10/25 18:04
刘天斯 回复于 2010/09/29 20:30入库前做一下转换:echo "日志内容"|iconv -f GB2312 -t UTF-8中文的问题解决了吗,能否具体一些,windows端发送的应该已经是utf8了,要在server端进行转换吗
刘天斯 回复于 2010/10/25 23:30
如果客户端已经是utf8编码,无需转码。
laogao
2010/10/20 10:02
本以为大功告成了,到了今天早上上班,发现日志到了6点半就不再写到mysql了。重启的服务器也是如此。mysql里一共有52000条数据,大小是13.2M,硬盘也没有满,非常郁闷。。。后来把程序删了,数据库也清,重装程序,才又能写到数据库了。。。太郁闷了。。。难道里面还有其他玄妙??刘老大指点。。。你们的数据库现在多大?数据多少?
刘天斯 回复于 2010/10/20 11:16
记录数:918821  总表大小:554.2 MB
老高
2010/10/19 11:35
不能显示日志当中<>的问题解决了,现在很多非思科系统的机器日志中带有<>,logilla对此做了去除,本来一直在找如何屏蔽这个去除<>,查了很多文件,都失败,后来无奈中想出了本办法,在tailresult.php和regularresult.php中查找
if (CISCO_TAG_PARSE )
   {    
        $row['msg'] = preg_replace('/\s:/', ':', $row['msg']);
        $row['msg'] = preg_replace('/.*(%.*?:.*)/', '$1', $row['msg']);
    }

在里面添加 $row['msg'] = preg_replace('/</', ' ', $row['msg']);
        $row['msg'] = preg_replace('/>/', ' ', $row['msg']);
即可。。哈哈

基本上要圆满了,现在就差首页图型无数据的问题,权限我已近改了。
denny
2010/10/18 22:17
老刘好,
我遇到个问题,就是不管是LINUX还是WINDOWS的,过来的日志级别在里面好象都一样的,就是说 info 级别显示出来的日志,在emerge里也一模一样。
不会是因为没有出现 info, emerge这样的关键字的原因罢?
刘天斯 回复于 2010/10/18 23:43
根据你指定的对象及日志级别来过滤。
老高
2010/10/18 11:31
上次没有表达清楚,重新表达。。
数据库里已经有正确的数据,是“*Oct 14 14:48:14: %NFPP_ARP_GUARD-4-DOS_DETECTED: Host<IP=N/A,MAC=001a.a915.638b,port=Gi0/24,VLAN=1> was detected.(2010-10-14 13:50:40)”   但查询后显示的时候是“%NFPP_ARP_GUARD-4-DOS_DETECTED:   Host   was   detected.(2010-10-14 13:50:40) ”   我不知道是在哪里把我的数据修改的,已经看了regularresult.php输出部分,对一些erpalce函数也做了屏蔽,依然无效,痛苦至极~~
刘天斯 回复于 2010/10/18 11:50
哦,这个问题不大,肯定是展示UI这块的问题。
老高 Email
2010/10/15 16:21
上面的问题解决了,要把html目录设置777,见鬼了

麻烦事不断:
在显示的日志中,发现logzilla会剪辑日志信息,原文“*Oct 14 14:48:14: %NFPP_ARP_GUARD-4-DOS_DETECTED: Host<IP=N/A,MAC=001a.a915.638b,port=Gi0/24,VLAN=1> was detected.(2010-10-14 13:50:40)”   会被修剪成“%NFPP_ARP_GUARD-4-DOS_DETECTED:   Host   was   detected.(2010-10-14 13:50:40) ”  当中最重要的IP地址的信息被改没了,非常不好,刘老大有没有办法不让他修改?
刘天斯 回复于 2010/10/15 16:40
要修改/www/webroot/php-syslog-ng/scripts/db_insert.pl脚本了。
老高 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
可以尝试略过此步,观察其它主机的日志是否成功写库。
分页: 2/3 第一页 上页 1 2 3 下页 最后页
发表评论

昵称

网址

电邮

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