awstats导入旧日志

先简单的说一下问题的经过:

公司的电商网站是由两台apache做的负载均衡,而前端loadbanlance则是由nginx实现,同时为避免loadbanlance的单点故障,通过keepalived对其做了高可用。两台loadbanlance的IP地址分别为192.168.1.10和192.168.1.11,VIP为192.168.1.12。1.10为主服务器,1.11则为备机。每次客户访问网站的时候,都是由1.10来提供服务,这样,我们便只需要做脚本将1.10上产生的日志自动传递给后端的awstats来进行日志分析,并生成报表。可前一段时间1.10产生故障,服务自动由1.11接替,日志便记录到了1.11上,可1.11并不会自动将日志发送给awstats,于是awstats便停止了日志更新,等我们修复了1.10以后,awstats再度开始了工作,可是却没有7月1号到16号,也就是1.11接替服务那一段时间的日志报表。我们将1.11上的日志拷到awstats服务器上,却导不进去,一直提示日志过旧,找不到新的记录。


051139308.jpg

我google了半天,在网上关于awstats导入旧日志的文章并不多,但终于还是找到了解决方法,现将整个过程整理如下:

先简单的说一下awstats分析日志的过程:

首先它在其配置文件中找到存放的日志路径,在我们服务器上,配置文件的位置是/etc/awstats/awstats.xx.conf。日志路径:

LogFile="/data/weblogs/ssllogs_%YYYY%MM%DD-24.log"

然后通过命令perl /usr/local/www/awstats/cgi-bin/awstats.pl -config=xx update 执行日志导入。同时会在配置文件的DirData指定的目录中生成一个当月的txt文件。

DirData="/var/lib/awstats"

在我们服务器中,七月的txt文件为awstats072012.xx.txt。在这份文件中,会记录日志最后一次更新的时间。那么在这个时间之前的日志awstats就会认为已经执行过导入,也就是旧日志。

LastLine 20120719000001 92626 28664241 9393003860217
FirstTime 20120718000005
LastTime 20120719000000
LastUpdate 20120719095544 92626 88191 0 4402 33

由图上信息显示,最后一次更新是7月19日,这样,我7月1日到16日的日志便会认为是旧日志,自然就导不进去了。

理解了awstats分析日志的整个过程,那么要想导入旧日志,也就简单了,聪明的人应该已经想到了,我只需要在awstats072012.xx.txt这份文件中把记录的最后一次的更新时间改为2012年6月30日,那么对于awstats来说,从7月1日开始的日志就都是新日志了,这个时候,只需要执行正常导入命令,便能顺利将日志导入了。

修改后的awstats072112.xx.txt文件如下:

LastLine 20120630000001 0 0 0
FirstTime 20120718000005
LastTime 20120719000000
LastUpdate 20120630095544 0 0 0 0 0

切记,因为是线上操作,修改之前一定要对原文件做备份。

另,因为在/etc/awstats/awstats.xx.conf中记录的LogFile仅仅只是当前日期前一天的日志,所以需要导入哪一天的日志,也要对日志路丢作相应修改。

例:我要导入7月1日的日志,则将其改为

LogFile=/data/weblogs/ssllogs_20120701.log

再执行:

perl /usr/local/www/awstats/cgi-bin/awstats.pl -config=xx update

便可成功完成导入。


054116676.jpg


你可能感兴趣的:(日志分析,awstats,旧日志)