公司的一个网站上了squid以后,还是跑得比较稳定的,十一长假以后对squid的一些参数进行的小的调整,正在观察影响。
为了能够更好地掌握squid的工作情况,考虑再上一个简单一些的squid日志分析工具。
先在google上搜了下,看到有sarg,于是下载,安装,和一般linux下的源码包类似,configure,make,make install。安装后进行一些配置,其实sarg不配置也没关系,直接可以由命令行参数来控制行为。在命令行参数里指定日志文件位置,报表输出目录,就可以跑了。本想通过crond定时让sarg分析前一天的日志,脚本都写好了,却发现sarg这个工具似主要是针对squid正向代理的分析目的做的。由于我的squid是当反向代理用的,我实际上并不关心每个客户端IP的具体行为,而只关心来访IP的总体行为,比如主要访问那些URL,而客户IP只需要分析访问量排在前面的来路就可以了。而sarg的分析结果,把每个ip都进行了分析并在报表目录下产生以客户端ip为名字的目录。这样一来,一次分析下来,报表目录下就有10000到15000个左右的子目录——这还只是一天的分析结果。很郁闷地查了文档,貌似没有什么好的办法,即使通过配置topusernum使报表上的用户IP累计连接数排名只显示前100位,目录下还是产生了13000多个子目录。
再找,发现了webalizer,同样下载源码编译安装,安装过程中出了些状况,其实我对linux下的编译安装的基本东西并不了解,只是发现安装的时候,不会自己根据配置去建立相应的目录,于是手工建好,安装成功。
运行,如果要求简单的话,一样也只要通过命令行就可以指定参数。由于webalizer并不是专门为squid做的,所以在命令行里需要指定一下日志文件格式是squid,运行下来发现效果不错,分析同样一天的日志,13000多个IP,比sarg要快了许多,并且结果比较符合我的需求。更发现一个好的地方,可以进行增量分析,这样,就可以让他每15分钟分析一次,基本上就可以近乎实时地看到当天当时的访问统计结果。
于是在反向代理的服务器上先安装了一个nginx,做webserver,开端口在9999,然后安装webalizer,做一个脚本,每天凌晨分析一下前一天的日志(在squid rotate了日志以后),由于只分析前一天的,不需要进行增量分析,所以忽略历史文件。
#!/bin/sh
TODAY=$(date +%Y%m%d)
run=/usr/local/webalizer/bin/webalizer
webroot=/www//webroot/
mkdir -p $webroot/$TODAY
$run -c /usr/local/webalizer/etc/webalizer.conf -F squid -i -n " " -t "cache.mysite.cn" -o $webroot/$TODAY /usr/local/squid/var/logs/access.log.1
这样,就可以通过http://cache.codepub.com/index.html来访问到分析报表了
