awstats 如何统计旧日志
awstats 文档中提供了一个方法 ,需要清空过去所有的统计数据,并依次重新更新所有的历史日志;另外还包含了一个tips,不必清空所有过去的统计数据,就可以把过去遗漏的某天数据加入统计,但依然要求清空一整个月的统计数据。
这些历史统计数据保存在config 文件中DirData 参数所定义的目录中,并且是按月保存的。
awstats.aiview.com.conf :
DirData="./xyz"
目录包含文件:
awstats012007.aiview.com.txt awstats022007.aiview.com.txt awstats032007.aiview.com.txt awstats042007.aiview.com.txt
前几日,Dreamhost 报告文件服务器发生了一些故障,之后就发现我的http 日志停止了更新,在其恢复服务后,12、13日的日志被重新刷新,但14日全天以及15日部分日志丢失。
今天是16日,在日志丢失期间,已经通过crontab 自动更新过多次统计数据,只是这几天统计数据都为零。要想补上12、13、15日的统计数据,只有清除4月份的统计数据文件:awstats042007.aiview.com.txt 文件,并从4月1日开始依次更新所有统计数据。但Dreamhost 只保存最近6天的http 日志,这个办法行不通。
经查看awstats 历史统计数据文件,找到解决方法,算是另外一个tips 。
以下代码片段来自4月份统计数据文件:awstats042007.aiview.com.txt 。LastTime 参数保存了统计的http 日志条目最晚的时间(区别于运行update 的时间),我们可以通过把其他几个时间参数修改为此时间,并且重置一些条目参数来达到目的。
LastLine 20070416000000 4386 898321 47205111575
FirstTime 20070401002121
LastTime 20070412035620
LastUpdate 20070416000004 2542 0 0 0 2542
下面是修改后的条目:(修改前请先备份旧文件!)
LastLine 20070412035620 0 0 0 FirstTime 20070401002121 LastTime 20070412035620 LastUpdate 20070412035620 0 0 0 0 0
接着修改config 文件,注释掉原来的日志路径,指向到旧的日志压缩文件。
#LogFile="/home/username/logs/aiview.com/http/access.log" LogFile="gzip -d </home/username/logs/aiview.com/http/access.log.2007-04-12.gz |"
然后运行命令更新统计数据。(注意:如果设置有crontab,操作前最好先disable 任务,免得引起不期望的结果)
$ cd ~/aiview.com/cgi-bin/awstats/ $ ./awstats.pl -config=aiview.com -update
这时刷新统计页面,已经可以看到13日的统计数据,依次在config 文件中把日志更换为13、15日的文件,并逐次运行更新,即可把所缺日志依次补回。
这种方法虽然不要求具有当天至月初的所有访问日志文件,但要求具有所补日期至当天或者至当月末的所有日志文件。
看来,写个job 定期备份日志还是有必要的。



