在偶然的机会在工作中接触到了日志分析。刚开始是当一个活去做了,接着就接触到了日志分析工具,如LogAnalyzer,AWStats,webalizer等工具。最后对比分析后选中了webalizer这个在GPLV2许可下发布的开源项目,下面开始介绍webalizer这个apache access 日志分析工具。
官方网站:http://www.webalizer.org/
webalizer是一个高效的、免费的、开源的web服务器日志分析工具。 它产生非常详细的,易于配置使用HTML格式的报告,通过标准的Web浏览器查看。
以下webalizer的特性来自官方描述,我在这里翻译整理。
总结如下:C语言编写,可跨平台,高效,支持CLF格式的日志,生成html的报告,多语言支持,对日志大小没有限制,支持GeoIP。
首先下载源码,并解压
wget ftp://ftp.mrunix.net/pub/webalizer/webalizer-2.23-05-src.tgz tar xzf webalizer-2.23-05-src.tgz cd webalizer-2.23-05-src ./configure --prefix=/home/user/webalizer make make install #如果你的系统还没安装libgd、libpng等库,执行下面的几个命令,可能需要root权限。 yum -y install gd gd-devel yum -y install zlib zlib-devel
分析一个apache的access日志,并查看index.html,大致内容看这里:sample
webalizer access_log
Usage: webalizer [options] [log file]
-h = print this help message //打印帮助
-V = print version information //打印版本信息
-v = be verbose //显示分析过程信息
-d = print additional debug info //显示调试信息
-F type = Log type. type= (clf | ftp | squid | w3c) //指定日志格式
-f = Fold sequence errors //
-i = ignore history file //无视历史记录文件,可以通过该选项独立分析一个日志文件
-p = preserve state (incremental) //增量分析
-b = ignore state (incremental) //忽略增量分析
-q = supress informational messages//不打印额外信息,
-Q = supress _ALL_ messages //屏蔽所有信息
-Y = supress country graph //不显示来访国家信息
-G = supress hourly graph //不显示时间段统计信息
-H = supress hourly stats //同上
-L = supress color coded graph legends
-l num = use num background lines on graph //
-m num = Visit timout value (seconds) //指定超时时间
-T = print timing information //显示时间信息
-c file = use configuration file ‘file’ //使用配置文件,指定路径
-n name = hostname to use //指定域名,即分析结果中url的前缀。如http://www.kimnote.com
-o dir = output directory to use //指定输出目录,分析结果将会保存到这个目录
-t name = report title ‘name’ //报告文件的标题
-a name = hide user agent ‘name’ //隐藏user-agent信息
-r name = hide referrer ‘name’ //隐藏referrer信息
-s name = hide site ‘name’ //隐藏指定网站信息
-u name = hide URL ‘name’ //隐藏指定url
-x name = Use filename extension ‘name’ //
-O name = Omit page ‘name’ //指定要忽略的页面
-P name = Page type extension ‘name’ //指定页面的扩展名,如.do .action .html .php等。
-I name = Index alias ‘name’
-K num = num months in summary table //索引页最大显示的月数
-k num = num months in summary graph //索引页图表中最大显示的月数
-A num = Display num top agents //显示num个user-agent 信息
-C num = Display num top countries // 显示 num个国家信息
-R num = Display num top referrers //显示num个referrer信息
-S num = Display num top sites //同上
-U num = Display num top URLs //同上
-e num = Display num top Entry Pages //同上
-E num = Display num top Exit Pages //同上
-g num = Group Domains to ‘num’ levels //
-X = Hide individual sites //
-z dir = Use country flags in ‘dir’
比较遗憾的是webalizer没有对指定的ip、ip段的分析,也不能支持对某个时间段的分析。
上述功能是很常用的功能,比如,服务器在某个时间段内受到了攻击,想找出攻击者ip。
之所以webalizer分析速度惊人,如果日志是按天滚动的access日志,则基本在几秒内就能找出攻击者IP。
源码下载:webalizer
也可以通过github下载:https://github.com/jongsuny/webalizer/tree/time-span
我在webalizer-2.23-05版本的基础上增加了IP过滤机制。
目前仅支持IPv4格式,IP地址的安全匹配、前缀匹配。
加入你想看到 ip地址为 123.123.123.123 的访问情况,在webalizer的基础上 加一个参数 –ip 123.123.123.123。
如果想看 10.10. 开头的ip,加参数 –ip 10.10. 就可以。
webalizer --ip 123.123.123.123 access_log webalizer --ip 10.10. access_log
增加两个参数 –start、–end,格式为 00:00:00、23:59:59。
webalizer --start 01:00:00 --end 09:00:00 access_log
如项查看 凌晨1点到上网9点的日志,使用如下。
webalizer --start 01:00:00 --end 09:00:00 access_log
在我使用中发现如下的不足:
针对上述不足,以后我要让webalizer支持上述功能,要么我自己写一个。