AWFFull is a Web server log analysis program, forked from Webalizer. It adds a number of new features and improvements, such as extended frontpage history,resizable graphs, and a few more pie charts.
        AWFFull是一个Web服务器日志分析程序,从Webalizer分支出来。 与webalizer相比,它增加了许多新功能和改进,如更丰富的网页历史分析,可调整大小图形和更多的饼图展示等。可惜,好象不再更新了。
        重点工作之一:
        iconv -f gb2312 -t utf-8 -s -c --verbose webalizer_lang.simplified_chinese.bak -o webalizer_lang.simplified_chinese 转换编码(直接使用libreoffice转码也可以!)


      

        linux下的日志分析,重不重要,总会有不同的答案。不过在我们这个地方总是有用的。甚至于产生了一个产品系列。

        awstats自然出名极了。但是因为是用perl写的,效率自然大受影响。只要日志大于G时,这时候用 awstats 进行分析就非常的痛苦。甚至出现过分析过程中产生的临时目录将磁盘占满的情况。笔者使用它来做过squid日志的统计,几次可是执行了24小时还没完工。

       不过,awstats官方推荐当访问超过 4,000,000/月(也许pv吧)时候,可以使用 analog 或者 webalizer 这两个应用。因此,这里还是对Awstats进行的一些优化以及其他两个软件的试用。

      1.Awstats 的性能优化使用

       网上的朋友们关于 Awstats 优化(好象要用好Awstats 都必须做这个工作了)的思路很多,比如关闭 DNS 解析,增大 $LimitFlush 的数量,尽可能的利用内存,以及升级 Perl 版本之类的。但个人发现如果是机器性能本身不是很高的话,特别是内存有限时,想要优化 awstats 的速度是非常困难的。比如Out of memory 的事情是经常发生的。

      Awstats还有 一个不太人性化的地方,就是对于旧日志不能够进行追加的分析。Awstats每次分析完成后,将当前分析的日期和位置记录在他的数据文件中,进行新的分析之 前,会和这个数值进行比较,如果比这个日期早的,会认为是旧日志而PASS过去。经常,为了追加之前某一天的日志,我们需要删除整个月的数据,进行重新的 分析。或者我们可以通过手工修改数据文件中的日期和位置,来达到这个目的。不管怎样,都不是一个非常人性化的解决方案。

      2.Analog 的使用(这个可是Awstats的推荐)

        Analog是一款小巧的日志分析工具,它具有快速、高可配置性、可扩展、支持32种语言、支持任何平台、免费软件。

Analog 的安装比较简单,以至于在官方都没有找到专门的安装介绍。我在CentOS的机器上,只需要进行一次 make 软件就可以使用了。但是,在这之前少不了一些配置。按照文档,我们可以将 make 后的analog 放在我们的web目录下,这样,生成的分析报告,便于通过web进行访问。

       拷贝完成后,对目录下的 analog.cfg 进行编辑,以适应我们本地的环境。默认情况下,Analog会自动探测日志的格式,默认自动搜索的日志格式包括the common log format, the NCSA combined format, referrer log and browser log, the W3 extended log format, the Microsoft IIS format, the Netscape format, the WebSTAR format, the WebSite format and the MacHTTP format.,但是如果做了修改或者用了和上述格式不一致的日志,有可能无法探测出来,从而发生下面的错误:

[root@localhost analog]# ./analog

./analog: analog version 6.0/Unix

./analog: Warning F: Can't auto-detect format of logfile

      默认的 analog.cfg 配置项非常简单,实际上我们可以有丰富的选项可以配置,比如日志格式、语言类型,analog也支持gz格式的日志和通配符匹配日志。所有这些问题,通过 阅读 analog 自带的文档可以得到很好的解决。(文档位于 analog/docs 下,其中默认的 index.html 写成了 indx.html )。

在Analog的配置文件中,通过LOGFILE来指定需要分析的日志,支持多个日志,也支持通配符,还可以在命令行中加入日志文件的位置,非常方便。甚至可以在日志名中支持日期的匹配,这点我觉得挺贴心的。LOGFILE access_log%Y%M.log。对于格式不同的日志,我们既可以单独为某个日志指定格式,也可以统一指定格式。如果我们需要分析 Apache 的日志,通过 APACHELOGFORMT 甚至可以方便将 httpd.conf 定义的日志格式拷贝过来使用。

例如httpd.conf中定义的格式为 

LogFormat "%h %l %u %t %v \"%r\" %>s %b" myformat
CustomLog /var/log/apache/access.log myformat
配置中就可以这样指定
APACHELOGFORMAT (%h %l %u %t %v \"%r\" %>s %b)
LOGFILE /var/log/apache/access.log

经过试用,一个单独的800M的日志文件,使用Analog进行分析,几乎就是瞬间完成了统计,总计9.6G的gz日志文件,Analog用了十分钟就能够全部分析完成,速度和awstats真的是不可同日而语。

但是如何更方便的处理多日志、多主机的问题笔者将进一步深究。

3.Webalizer(c语言级别的东西)

         Webalizer是一款快速的,免费的日志分析软件。能够提供详细的HTML格式的分析报告。他的特点包括:

使用C语言编写,执行速度快,并且是Portable的。在1.6G的笔记本上,每秒钟可以处理70,000条记录。

         支持CLF Common Log File 日志格式,NCSA Combined 日志格式,ftp, squid等日志格式,以及gz,bz2日志格式

支持通过配置文件或者命令行进行报告的配置。

        支持多种语言,包括中文。

        对日志文件的大小没有限制。

        支持IPV4和IPV6,支持GeoLocation(功能好)。

       缺点:不支持多文件分析。在官方的FAQ中看到,webalizer 不支持一个负载均衡系统下的多文件分析。

Webalizer 的安装也比较简单

./configure --prefix=path --with-language=chinese

make

make install

就能够完成安装,webalizer 需要gd库,png库等一些库的支持,如果安装没有成功,可以看到对应的错误提示。我用的centos系统,直接yum install 就可以了。

使用过程中发现一个很杯具的事情,Webalizer不支持自定义的Log日志格式。也就是说,如果我们对默认的apache日志格式进行改变或调整,就没有办法使用webalizer。这是我最终决定弃用他的原因。

但是同样有一件欣慰的事情,就是Webalizer有一个兄弟,Stone Step Webalizer. 这款软件是Webalizer的分支,添加了很多实用的功能。更新也比较活跃,最近一次更新就在上个月。

###4 .Analog的深入使用 

      Analog还是很好用的,当然,有一个致命的缺点,就是无法统计Unique Visit 独立访问用户数量。特别是按照每周、每月、每年进行统计的数字。这个统计涉及到大量的计算,对服务器的要求会非常高,而且计算的过程会产生很大量的临时文 件,可能作者基于这方面的考虑,没有提供这个数字。

Analog的一些默认配置,我们在编译指出可以通过修改 anlghead.h 文件进行修改,也可以后续通过配置文件进行指定,配置文件可以不止一个,Analog会自动处理合并多个配置文件。虽然有多个配置文件,但是analog 还是只生产一份报告。同时可以在命令行中使用 +gother.cfg 的方式调用其他的配置文件,但这样不会阻止读取默认的配置文件。如果我们不希望 analog 读取默认的配置文件,则应该使用 –G 参数。

如果只是希望修改配置文件中的某些配置,可以使用 +C 参数,例如 +C”UNCOMPRESS *.gz gzcat”。

通过 ./analog/analog –settings 我们可以将当前 analog 的配置打印出来,方便我们进行查看。

The LOGFORMAT and APACHELOGFORMAT commands only apply to logfiles specified with a LOGFILE command later in the same configuration file. So you must put theLOGFORMAT above the LOGFILE to which it refers. If you declare your logfiles on the command line, or drag them onto the app on the Mac, you must useDEFAULTLOGFORMAT or APACHEDEFAULTLOGFORMAT instead.

上面这个部分,指出了Analog曾经困惑我几个小时的问题。因为,我在配置文件中制定了日志的格式,然后再命令行中指定了使用哪些日志,但是分析 的结果总是报 Warning F 错误:Can't auto-detect format of logfile 。问题原来出在,APACHELOGFORMAT 只能紧跟在 LOGFILE 上面,如果是命令行,就需要使用 APACHEDEFAULTLOGFORMAT 替代了。

        需要注意一点的是,虽然我们可以在日志名中使用通配符,但是在文件夹路径上,是不可以使用,这个是analog的限制所在。

        5.AWFFull 

      AWFFull是一个Web服务器日志分析程序,从Webalizer分支出来。 与webalizer相比,它增加了许多新功能和改进,如更丰富的网页历史分析,可调整大小图形和更多的饼图展示等。

************************

6.另一款工具sarg:c++级别的分析工具

************************


Squid-style 日志工具:Sarg的安装与配置(参考收藏)』


SARG是一款c++开发出来的(squid格式日志)日志分析工具.分析日志文件后生成的是静态html文件.

(一)在ubuntu下安装相对简单,apt-get install sarg即可.

#安装成功后,在/usr/local/sarg/目录中,有一个配置文件为sarg.conf,我们通过修改配置文件的参数,来达到对日志进行有规则的分析。

也可以通过命令行参数实现。
#sarg
配置文件的方法和squid配置文件的配置方法类似,只要修改带有关键字的行:


"language english"
指定网页报告文件的语言类型,很可惜不支持中文网页。
"access_log /var/log/squid/access.log"
指定squid日志文件绝对路径。
"title "squid 
使用报告"
指定网页标题。
"temporary_dir /var/tmp"
指定临时文件目录,请确认该目录所在的分区足够大先,1g以上。
"output_dir /var/www/html/sarg"
指定网页报告文件输出路径。
"topuser_sort_field connect reverse bytes reverse"
top排序中,指定连接次数(connect),访问字节数(bytes)采用降序排列,升序请使用normal替代reverse
"user_sort_field connect reverse"
对于每个用户的访问纪录,连接次数按降序排列
"exclude_hosts /usr/local/sarg/norecords"
指定不计入排序的站点列表文件名为/usr/local/sarg/norecords,对于客户端 访问的这些站点,将不会被top排序中,norecords文件样本:
google.com
csdn.net
microsoft.com


"date_format e"
启动sarg进程是如果使用日期参数-d时,请使用和配置文件一致的日期格:
e (europe=dd/mm/yy),


u (usa=mm/dd/yy), 
w (weekly=yy.ww)


"topuser_fields num date_time userid connect bytes %bytes in-cache-out used_time milisec %time total average"
指定top排序的域,可以取掉一些不关紧要的域:in-cache-out used_time
"weekdays 1-5"
指定top排序星期周期为星期一到星期五,0表示星期天
"hours 9-11,13-16"

指定top排序的时间周期为9:00-11:5913:00-16:59
至此,sarg.conf文件的配置基本完成了,也可以直接参考附件。


还建立一个存放记录的地方
mkdir /var/www/html/sarg/
mkdir /var/www/html/sarg/daily
mkdir /var/www/html/sarg/weekly
mkdir /var/www/html/sarg/monthly

sarg的命令行解释如下:
sarg -h

sarg: usage [options...]
-a hostname or ip address
指定不计入排序的主机名称或地址
-b useragent log
用户代理日志文件输出
-c exclude file
指定不计入排序的站点列表文件名为/usr/local/sarg/norecords,对于客户端访问的这些站点,将不会被top排序中
-d date dd/mm/yyyy-dd/mm/yyyy
指定日期范围
-e email address to send reports (stdout for console)
指定报告接收者邮件
-f config file (/usr/local/sarg/sarg.conf)
指定配置文件
-g date format [e=europe -> dd/mm/yy, u=usa -> mm/dd/yy]
指定输入的日期格式
-h help (this...)
列帮助信息
-i reports by user and ip address
指定客户端排序采用用户名或者ip地址
-l input log
指定squid格式日志文件绝对路径。
-o output dir
指定网页报告文件输出路径,推荐使用webmaster或其他非admin用户运行sarg
-p use ip address instead userid (reports)
使用ip地址作为userid
-w temporary dir
指定临时文件目录,请确认该目录所在的分区足够大先,1g以上。


运行
一般来说,我们希望系统可以自动生成报告在sarg的主页上可以找到日//年的自动生成脚本.
sarg -d 
//-//年 #执行sarg的这个命令就可生成你想要的时间段的上网情况,也可以使用crontab来每日自动执行首先建立执行脚本分为日、周、月三个文件

vi /usr/local/sarg/bin/daily

内容如下:
#!/bin/bash
#Get yesterday date
YESTERDAY=$(date --date "1 day ago" +%d/%m/%Y)
export LC_ALL=C
/usr/local/sarg/bin/sarg -o /var/www/html/sarg/daily -d $YESTERDAY > /dev/null 2>&1
exit 0
vi /usr/local/sarg/bin/monthyl
内容如下:
#!/bin/bash
#Get yesterday date
YESTERDAY=$(date --date "1 day ago" +%d/%m/%Y)
#Get 1 month ago date
MONTHAGO=$(date --date "1 month ago" +%d/%m/%Y)
/usr/local/sarg/bin/sarg -o /var/www/html/sarg/monthly -d $MONTHAGO-$YESTERDAY  > /dev/null 2>&1
/usr/local/squid/sbin/squid -k rotate
exit 0
vi /usr/local/sarg/bin/weekly
内容如下:
#!/bin/bash
#Generate Access.log for correct weekly reports
cat /var/log/squid/access.log.0 /var/log/squid/access.log > /var/log/squid/access.log.week
#Get yesterday date
YESTERDAY=$(date --date "1 days ago" +%d/%m/%Y)
#Get one week ago date
WEEKAGO=$(date --date "7 days ago" +%d/%m/%Y)
/usr/local/sarg/bin/sarg -l /var/log/squid/access.log.week -o /var/www/html/sarg/weekly -d $WEEKAGO-$YESTERDAY > /dev/null 2>&1
/usr/local/squid/sbin/squid -k rotate
exit 0
然后运行
crontab -e
内容如下:
30 1 * * * /usr/local/sarg/bin/daily
01 0 * * 1 /usr/local/sarg/bin/weekly
01 3 1 * * /usr/local/sarg/bin/monthly
这样在每天都会自动生成一个配置文件来查看
为文件曾加刻执行的权限
chmod 755 /usr/local/sarg/bin/daily
chmod 755 /usr/local/sarg/bin/weekly
chmod 755 /usr/local/sarg/bin/monthly
好了现在你就可以等着第二天一大早来查看你的网络前一天的上网情况.
http://x.x.x.x/sarg/(可以在nginx下与apache下使用)

(二)配置参考

cd /usr/local/sarg/etc

下面有一个sarg.conf文件,这个文件是配置大全,不过全被注释掉了。所以这个文件我不需要,当作备份。

mv sarg.conf  sarg.confbak

vi sarg.conf

把下面的内容考进去,是我机子里面的sarg配置

  1. language English  #英文版 

  2. access_log /usr/local/squid/var/logs/access.log  squid安装时,access_log的所在 

  3. font_face Verdana,Arial  #字体设置,因为这个管理工具是网页的形势存在的 

  4. header_color darkblue  #设header的颜色 

  5. font_size 12px  #设置字体大小 

  6. password none  #不要设密码 

  7. title "Squid report" #设置标题 

  8. output_dir /home/www/sarg  #生成后的html存放到那里,设置到你的网站目录下,/home/zhangy/www是网站的根目录 

  9. overwrite_report yes  #是否覆盖报告,当那个日期的报告已经存在时是否覆盖掉 

  10. mail_utility mail  #以mail方式来发邮件 

  11. exclude_hosts  /usr/local/sarg/etc/exclude_hosts  #不允许的hosts 

  12. topsites_num 100  #最多可以显示多少个网站 

  13. exclude_codes /usr/local/sarg/etc/exclude_codes 

  14. max_elapsed 28800000  #设置过时时间 

  15. charset utf8  #设置编码 


(三)测试

配置好了以后

[root@BlackGhost bin]# ./sarg
SARG: Records in file: 120, reading: 100.00%
SARG: Successful report generated on /home/zhangy/www/sarg/2010Jun13-2010Jun13
有了这个则表示,sarg才真正的安装配置好了。

参数如下

./sarg -h
./sarg: usage [options...]
-a hostname or ip address 
指定不计入排序的主机名称或地址
-b useragent log  
用户代理日志文件输出
-c exclude file  
指定不计入排序的站点列表文件名为/usr/local/sarg/norecords,对于客户端访问的这些站点,将不会被top排序中
-d date from-until dd/mm/yyyy-dd/mm/yyyy  
指定日期范围
-e email address to send reports (stdout for console) 
指定报告接收者邮件
-f config file (/usr/local/sarg/sarg.conf) 
指定配置文件
-g date format [e=europe -> dd/mm/yy, u=usa -> mm/dd/yy] 
指定输入的日期格式
-h help (this...) 
列帮助信息
-i reports by user and ip address  
指定客户端排序采用用户名或者ip地址
-l input log  
指定squid日志文件绝对路径。
-o output dir  
指定网页报告文件输出路径,推荐使用webmaster或其他非admin用户运行sarg
-p use ip address instead userid (reports) 
使用ip地址作为userid
-w temporary dir  
指定临时文件目录,请确认该目录所在的分区足够大先,1g以上。

**********************

7.一款squid格式日志的自处理工具:squid-analyzer,功能不错,可惜使用作为日志分析机,速度太慢,不足以在大型系统使用。但具有计费功能的,可以借鉴一用。

linux环境下的几款日志分析工具的性能比较与试用 - itoedr - itoedr的it学苑

 

linux环境下的几款日志分析工具的性能比较与试用 - itoedr - itoedr的it学苑

 

linux环境下的几款日志分析工具的性能比较与试用 - itoedr - itoedr的it学苑

 其它内容还很丰富,使用了html5技术,比较大气。


*****************************
附:webalizer中版注意事项
******************************

         webalizer是一个高效的、免费的web服务器日志分析程序。其分析结果以HTML文件格式保存,从而可以很方便的通过web服务器进行浏览。Internet上的很多站点都使用webalizer进行web服务器日志分析。

                                webalizer-2.23-8.deb    webalizer主程序包

一、搭建环境

Webalizer需要用到相关的jpegpngzlib库,这些库有部分是默认安装的,有些需要手动安装,安装的步骤不能颠倒,需要安装顺序安装。

可以下载源码包进行安装,步骤一般为:

# ./configure

# make

# make install

这里我用yum包安装,这样可以轻松解决依赖包问题,适用于新手。

3、  接下来安装我们所需要的一些库。

首先安装第一个jpeg库,

所有的库安装方法相同,可以安装顺序逐个安装。

二、安装webalizer

1)  安装GeoIP库,支持对国家的ip分析极其整理

# tar -zxmf GeoIP-1.4.8.tar.gz    解压源码包

# cd GeoIP-1.4.8  进入解压目录

# ./configure   进行编译前配置

# make            编译

# make install    安装

安装完成后,会在/usr/local/share/GeoIP/下生成一个GeoIP.dat文件

2)  编译汉化字体,支持中文输出

# tar -zxmf webalizer-2.23-05-src.tgz   解压webalizer

# cd webalizer-2.23-05   进入解压目录

# cd lang          进入语言目录

找到webalizer_lang.simplified_chinese  将文件格式转化为utf-8,可以借助外部工具,修改后放回即可。这里我使用EditPlus 3进行格式转换,大家可以去网上下载一些软件,将文件格式转换即可,如无需汉化,此步骤可略过。

# cd ..  返回上级目录

找一个中文字体,传到服务器上,比如/usr/share/fonts/chinese/TrueType/ukai.ttf,前提是服务器已经安装了gd,并且顺利支持freetype,这个在安装gd的时候可以看到是不是支持.我用的cent os 直接就支持中文,所以在此选用的系统自带的黑体

字体搜索方法:find / -name *.ttf  查找

# vi graphs.c     打开graphs.c  将下述代码添加里面,我添加再最后一行

void gdImageString(gdImagePtr im, gdFontPtr font, int x, int y, unsigned char *s, int color)

{

gdImageStringFT(im, 0 , color, "/usr/share/fonts/chinese/TrueType/ukai.ttf", 9 , 0.0, x, y+9, s);                // 注意这里修改成你自己字体路径

}

void gdImageStringUp(gdImagePtr im, gdFontPtr font, int x, int y, unsigned char *s, int color)

{

gdImageStringFT(im, 0 , color, "/usr/share/fonts/chinese/TrueType/ukai.ttf", 9 , -PI/2, x, y-9 , s);

}                           // 注意这里修改成你自己字体路径

这样汉化过程结束,我们开始正式安装webalizer

3)  安装webalizer

# ./configure --prefix=/usr/local/webalizer \    安装目录

> --enable-geoip \          启用geoip支持

> --with-geoip=/usr/local/include \         geoip路径

> --with-geoiplib=/usr/local/lib \           geoiplib库路径

> --with-language=simplified_chinese         支持中文简体

# make  编译  这里如果你系统的时钟不正确则会发出警告,检测到时钟错误,我们可以修改下时钟,然后继续进行。

修改时间方法:

# date 080410382011.10   顺序为:月日时分年.

然后再继续操作

# make install  安装

# cp sample.conf /etc/webalizer.conf   复制源码包实力文件,放入/etc下。如果不进行此步骤操作,则系统会自动调用默认的主配置文件。

4)   

三、配置webalizer

1)  将日志导入系统中,这里我再服务器中拉入一些日志文件,放在/opt/

2)  修改主配置文件

# vi /etc/webalizer.conf

LogFile        /opt/access.tar.gz          指定日志文件位置,可以是压缩包

LogType clf           设置日志类型

OutputDir      /var/www/html/test   生成统计数据记录目录

HostName        test          统计网站名

GeoIP           yes       启用geoip功能

GeoIPDatabase   /usr/local/share/GeoIP/GeoIP.dat        指向geoipdatabase路径

保存退出

3)  建立生成数据记录的目录

# mkdir -p /var/www/html/test

4)  libGeoIP复制到/usr/lib下,要不然启动服务会报错。

# cp -d -p /usr/local/lib/libGeoIP* /usr/lib/

四、启动服务,并测试

1)  创建脚本

# vi test.sh

#!/bin/sh

run=/usr/local/webalizer/bin/webalizer

$run -F clf -p -n ' ' -c '/etc/webalizer.conf'   各个参数的解释参考本文末尾。

2)  启动服务

[root@Rytong /]# . /test.sh

Webalizer V2.23-05 (Linux 2.6.18-92.el5 i686) Simplified Chinese

使用日志文件 /opt/access.tar.gz (gzip-clf)

Using GeoIP Country Edition (/usr/local/share/GeoIP/GeoIP.dat)

输出结果到 /var/www/html/test

产生报表的主机名是 'test'

没有找到历史信息文件...

没有找到上次运行的数据...

警告截断太长的 hostname 

跳过错误记录 (1)

正在保存当前运行的数据... [07/15/2011 16:29:39]

正在生成报表 ----   七月 2011

正在保存历史信息文件...

正在生成综合报表

9185 条记录 (7 条被忽略, 1 条无效共用时 1 , 9185/sec

开启httpd服务,并在浏览器中访问统计页面

http://192.168.20.167/test

 

3)  访问结果:


访问首页。


查看每月的统计信息


查看国家统计信息。

五、通过命令控制监控

上文是通过文件配置的,也可以通过命令行配置webalizer,需要了解配置文件使用方法的朋友可以参考README文件,里面有很详细的介绍。   可以执行webalizer –h得到所有命令行参数:

Usage: webalizer [options] [log file]

-h = 打印帮助信息

  -v -V = 打印版本信息

  -d = 打印附加调试信息

  -F type = 日志格式类型. type= (clf | ftp | squid)

  -i = 忽略历史文件

  -p = 保留状态 (递增模式)

  -q = 忽略消息信息

  -Q = 忽略所有信息

  -Y = 忽略国家图形

  -G = 忽略小时统计图形

  -H = 忽略小时统计信息

  -L = 忽略彩色图例

  -l num = 在图形中使用数字背景线

  -m num = 访问超时 (seconds)

  -T = 打印时间信息

  -c file = 指定配置文件

  -n name = 使用的主机名

  -o dir = 结果输出目录

  -t name = 指定报告题目上的主机名

  -a name = 隐藏用户代理名称

  -r name = 隐藏访问链接

  -s name = 隐藏客户

  -u name = 隐藏URL

  -x name = 使用文件扩展名

  -P name = 页面类型扩展名

  -I name = index别名

  -A num = 显示前几名客户类型

  -C num = 显示前几名国家

  -R num = 显示前几名链接

  -S num = 显示前几名客户

  -U num = 显示前几名URLs

  -e num = 显示前几名访问页面

  -E num = 显示前几名不存在的页面

  -X = 隐藏个别用户

  -D name = 使用dns缓存文件

-N num = DNS 进程数 (0=禁用dns)