如何分析网址日志文件

Awk使用及网站日志分析

运营需要网站的数据统计,本来想用JS的方式来统计所有请求的情况,但是由于时间紧迫,所以重新部署awstats这个工具!
 
AWStats是一个基于Perl的WEB日志分析工具,主页:
 
Awstats
是一个免费非常简洁而且强大有个性的统计工具。它可以统计您站点的如下信息:
 ① 访问量,访问次数,页面浏览量,点击数,数据流量等
 ② 精确到每月、每日、每小时的数据
 ③ 访问者国家
 ④ 访问者 IP
 ⑤ Robots/Spiders 的统计
 ⑥ 纺客持续时间
 ⑦ 对不同 Files type 的统计信息
 ⑧ Pages-URL 的统计
 ⑨ 访客操作系统浏览器等信息
 其它信息(搜索关键字等等)
 
AWStats 是一个免费的强大而有个性的工具,带来先进的网络流量,FTP
或邮件服务器统计图。 本日志分析器作为 CGI
或从命令行在数个图形网页中显示你日志中包含的所有可能信息。
它利用一部分档案资料就能经常很快地处理大量日志档案,它能分析日志文件来自从各大服务器工具,如
Apache日志档案(NCSA combined/XLF/ELF log format or common/CLF log
format), WebStar,IIS
(W3C的日志格式)及许多其他网站,Proxy(代理服务器)、Wap、流量服务器、邮件服务器和一些
FTP 服务器。
 
AWStats的运行模式
 
1、统计分析日志:将结果保存在一个txt文件中,最新版本支持xml数据格式。
 
2、输出分析结果:利用cgi程序输出,或生成静态html文件进行浏览。
 
AWStats的安装与配置
 
先创建如下两个目录:
 
/etc/awstats — 网站统计的配置文件存放位置
 
/var/lib/awstats — 网站统计的数据文件
 
awstats默认的目录是/usr/local/,所以下载下来请保存至此。
 
awstats采用perl来进行安装,所以服务器一定要有perl环境 yum install perl ;

如果你是一个站长,可能你也大概知道网站日志文件,也清楚网站原始访问日志文件中每一行记录到底记录了一些什么东西,但是如果叫你直接看这些杂乱的日志,相信你会很抓狂的,所以我们需要找一款专业又好上手的网站日志分析工具来辅助我们日常的原始日志分析工作。

网站日志实时分析工具GoAccess使用

如果你的博客或网站是搭建在付费主机上,如果你是博客或网站的站长,如果你连原始访问日志是什么都不知道,或者对其根本不屑一顾,我只能说你是一个不称职的网站站长,一旦网站出问题,必定是束手无策!相信大家都在自己的网站上安装了网站统计的代码,如Googleanalytics、量子统计、百度统计、cnzz、51.la等,这些工具可以统计网站的流量,也就是网站上访客可以看到的所有页面的访问量,但是这些统计工具都不能统计你主机上资源的原始访问信息,例如某个图片被谁下载了,也不能统计到那些没有添加统计代码的地方,比如后台操作页面。

Awk使用及网站日志分析

  1. cd /usr/local;
  2. wget
  3. tar zxvf awstats-7.0.tar.gz;
  4. mv awstats-7.0 awstats;
  5. chown apache:apache awstats -R #设置web服务能访问此目录
  6. perl /usr/local/awstats/tools/awstats_configure.pl
    #执行awstats安装

笔者试用过很多网站日志分析工具,常用的比较好用,功能又比较全面的大概有三款:光年SEO日志分析系统、逆火网站日志分析器、Web
Log Explorer。下面就给大家分享这三款网站日志分析软件的具体评价总结。

系统环境
CentOS release 5.5 (Final)

绝大多数收费主机都提供原始访问日志,网站服务器会把每一个访客来访时的一些信息自动记录下来,保存在原始访问日志文件中,如果你的主机不提供日志功能,建议你到期后还是换主机吧。日志中记录了网站上所有资源的访问信息,包括图片、CSS、JS、FLASH、HTML、MP3等所有网页打开过程载入的资源,同时记录了这些资源都被谁访问了、用什么来访问以及访问的结果是什么等等,可以说原始访问日志记录了主机的所有资源使用情况。

Awk简介

安装过程如下:

 

GoAccess是一款开源的网站日志实时分析工具。
GoAccess 的工作方式就是读取和解析
Apache/Nginx/Lighttpd 的访问日志文件 access
log,然后以更友好的方式把统计信息显示出来。统计的内容包括:访问概况、动态页面请求、静态页面请求(如图片、样式表、脚本等)、访客排名,访客使用的操作系统,访客使用的浏览器,来路域名,404
错误,搜索爬虫,搜索关键词等等。
GoAccess
的性能比较不错,据官方测试,在一台 Intel Xeon CPU @ 2.40ghz CPU, 2GB
内存的机器上处理日志文件的速度是97000行每秒。
下面采用源代码安装的方式:

分析网站日志有什么作用?

概述

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。awk有3个不同版本:
awk、nawk和gawk,未作特别说明,一般指gawk。awk程序的报告生成能力通常用来从大文本文件中提取数据元素并将它们格式化成可读的报告。最完美的例子是格式化日志文件。awk程序允许从日志文件中只过滤出你想要看的数据

  1. —– AWStats awstats_configure 1.0 (build 1.9) (c) Laurent
    Destailleur —–
  2. This tool will help you to configure AWStats to analyze statistics
    for
  3. one web server. You can try to use it to let it do all that is
    possible
  4. in AWStats setup, however following the step by step manual setup
  5. documentation (docs/index.html) is often a better idea. Above all
    if:
  6. – You are not an administrator user,
  7. – You want to analyze downloaded log files without web server,
  8. – You want to analyze mail or ftp log files instead of web log
    files,
  9. – You need to analyze load balanced servers log files,
  10. – You want to ‘understand’ all possible ways to use AWStats…
  11. Read the AWStats documentation (docs/index.html).
    1. —–> Running OS detected: Linux,
      BSD or Unix
  12. Warning: AWStats standard directory on Linux OS is
    ‘/usr/local/awstats’.
  13. If you want to use standard directory, you should first move all
    content
  14. of AWStats distribution from current directory:
  15. /root
  16. to standard directory:
  17. /usr/local/awstats
  18. And then, run configure.pl from this location.
  19. Do you want to continue setup from this NON standard directory
    [yN] ?
  20. #这个选项告知你awstats默认应该安装在/usr/local/awstats下,问你是否采用默认的目录,默认即可
    1. —–> Check for web server install
    1. Enter full config file path of your Web server.
  21. Example: /etc/httpd/httpd.conf
  22. Example: /usr/local/apache2/conf/httpd.conf
  23. Example: c:\Program files\apache group\apache\conf\httpd.conf
  24. Config file path (‘none’ to skip web server setup):
  25. >
  26. #这个选项是问你的apache默认配置文件在哪,awstats会在你的配置文件中增加相关配置选项。
  27. 如果你用Nginx等其他web 跳过此选项,我的配置是:
    /etc/httpd/conf/httpd.conf
    1. —–> Check and complete web server
      config file ‘/etc/httpd/conf/httpd.conf’
  28. Add ‘<Directory>’
    directive
  29. AWStats directives added to Apache config file.
  30. —–> Need to create a new config file
    ?
  31. Do you want me to build a new AWStats config/profile
  32. file (required if first install) [y/N] ?
    这个选项是询问是否要要生成独立的 conf 文件的名称,
  33. 因为 conf 文件的名称都是 awstats.yourdomainname.conf
    格式的,所以这里要求你输入你要监测的域名,
  34. 其实这个域名只是与其他域名相区分的,并不一定非要真实的。
    1. —–> Define config file path
      In which directory do you plan to store your config file(s) ?
      Default: /etc/awstats
      Directory path to store config file(s) (Enter for default):
      >
      这个选项是问你独立的配置文件(见上一个问题)放在哪?默认在/etc/awstats/下
  35. —–> Create config file
    ‘/etc/awstats/awstats.www.linuxidc.com.conf’
    Config file /etc/awstats/awstats.www.linuxidc.com.conf created.
  36. —–> Create config file
    ‘/etc/awstats/awstats.www.linuxidc.com.conf’
    Config file /etc/awstats/awstats.www.linuxidc.com.conf created.

    —–> Restart Web server with ‘/sbin/service httpd restart’
    Stopping httpd: [ OK ]
    Starting httpd: [ OK ]

  37. —–> Add update process inside a scheduler
    Sorry, configure.pl does not support automatic add to cron yet.
    You can do it manually by adding the following command to your
    cron:
    /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update
    -config=www.linuxidc.com
    Or if you have several config files and prefer having only one
    command:
    /usr/local/awstats/tools/awstats_updateall.pl now
    Press ENTER to continue…
  38. #上面是告知你你可以在crontab中单独增加

    /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=www.linuxidc.com来定期刷新域:
    
    www.linuxidc.com域的日志统计,也可以使用/usr/local/awstats/tools/awstats_updateall.pl now 来刷新
    所有域的(/etc/awstats下)的统计
    

1. 光年SEO日志分析系统

在 CentOS 上安装编译 GoAccess
时需要的工具和库:
# yum groupinstall ‘Development
Tools’
# yum install glib2 glib2-devel
ncurses-devel

1、我们可以比较准确的定位搜索引擎蜘蛛来爬行我们网站的次数,可以屏蔽伪蜘蛛(此类蜘蛛多以采集为主,会增加我们服务器的开销)点此识别Baiduspider真伪

Awk使用

问题解决

这款软件是针对SEO开发的搜索引擎相关的网站日志分析工具,软件容量小、操作简单、绿色免安装,它能分析无限大的日志,而且速度很快。但是功能分析项比较简单,适合SEO为主的网站分析。

另外在 Ubuntu 12.04 上安装编译 GoAccess
时需要的工具和库:
$ sudo apt-get install
build-essential
$ sudo apt-get install libglib2.0-dev
libncursesw5-dev

2、通过分析网站日志,我们可以准确定位搜索引擎蜘蛛爬行的页面以及时间长短,我们可以依次有针对性的对我们的网站进行微调

awk命令格式和选项

语法形式

awk [options] 'script' var=value file(s)
awk [options] -f scriptfile var=value file(s)

常用命令选项

-F fs fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:-v var=value
赋值一个用户定义变量,将外部变量传递给awk-f scripfile
从脚本文件中读取awk命令-m[fr] val
对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。

模式:

/正则表达式/:使用通配符的扩展集。
关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试。
模式匹配表达式:用运算符~(匹配)和~!(不匹配)。BEGIN语句块、pattern语句块、END语句块。

01.问题1:Error: Failed to open
‘/root/wwwroot/cgi-bin/awstats.model.conf’ for read.

图片 1

下载 GoAccess
的源代码、编译和安装:
$ wget

$ tar -xzvf
goaccess-0.7.1.tar.gz
$ cd goaccess-0.7.1/
$ ./configure –enable-utf8
$ make
$ sudo make install

3、http返回状态码,搜索引擎蜘蛛以及用户每访问我们的网站一次,服务器端都会产生类似301,404,200的状态吗,我们可以参照此类信息,对我们出现问题的网站进行简单的诊断,及时处理问题。

awk脚本基本结构

awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file

一个awk脚本通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成,这三个部分是可选的。任意一个部分都可以不出现在脚本中,脚本通常是被单引号或双引号中,例如:

awk 'BEGIN{ i=0 } { i++ } END{ print i }' filename
awk "BEGIN{ i=0 } { i++ } END{ print i }" filename

02.解决:进入awstats程序目录,本例为:/usr/local/awstats ,然后在运行perl
/usr/local/awstats/tools/awstats_configure.pl

光年SEO日志分析系统 软件界面

运行 GoAccess,选择 NCSA Combined Log
Format:
$ goaccess -f
/usr/local/nginx/logs/access.log

网站日志文件存放在什么地方?

awk的工作原理

awk 'BEGIN{ commands } pattern{ commands } END{ commands }'

第一步:执行BEGIN{ commands }语句块中的语句;

第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ commands
}语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。

第三步:当读至输入流末尾时,执行END{ commands }语句块。

BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中。

END语句块在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块。

pattern语句块中的通用命令是最重要的部分,它也是可选的。如果没有提供pattern语句块,则默认执行{
print },即打印每一个读取到的行,awk读取的每一行都会执行该语句块。

示例

echo -e "A line 1\nA line 2" | awk 'BEGIN{ print "Start" } { print } END{ print "End" }'

打印结果:

Start
A line 1
A line 2
End

当使用不带参数的print时,它就打印当前行,当print的参数是以逗号进行分隔时,打印时则以空格作为定界符。在awk的print语句块中双引号是被当作拼接符使用,例如:

echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1,var2,var3; }'

打印结果:

v1 v2 v3

双引号拼接使用:

echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1"="var2"="var3; }'

打印结果:

v1=v2=v3

{
}类似一个循环体,会对文件中的每一行进行迭代,通常变量初始化语句(如:i=0)以及打印文件头部的语句放入BEGIN语句块中,将打印的结果等语句放在END语句块中。

图片 2

 

 

一般的虚拟主机都提供日志文件,但是不同的虚拟主机系统会提供不同的LOG文件存储文件名,笔者使用的是万网的虚拟主机,日志文件存储在wwwlogs文件夹下。

awk内置变量

说明:[A][N][P][G]表示第一个支持变量的工具,[A]=awk、[N]=nawk、[P]=POSIXawk、[G]=gawk

$n 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。
$0 这个变量包含执行过程中当前行的文本内容。
[N] ARGC 命令行参数的数目。
[G] ARGIND 命令行中当前文件的位置(从0开始算)。
[N] ARGV 包含命令行参数的数组。
[G] CONVFMT 数字转换格式(默认值为%.6g)。
[P] ENVIRON 环境变量关联数组。
[N] ERRNO 最后一个系统错误的描述。
[G] FIELDWIDTHS 字段宽度列表(用空格键分隔)。
[A] FILENAME 当前输入文件的名。
[P] FNR 同NR,但相对于当前文件。
[A] FS 字段分隔符(默认是任何空格)。
[G] IGNORECASE 如果为真,则进行忽略大小写的匹配。
[A] NF 表示字段数,在执行过程中对应于当前的字段数。
[A] NR 表示记录数,在执行过程中对应于当前的行号。
[A] OFMT 数字的输出格式(默认值是%.6g)。
[A] OFS 输出字段分隔符(默认值是一个空格)。
[A] ORS 输出记录分隔符(默认值是一个换行符)。
[A] RS 记录分隔符(默认是一个换行符)。
[N] RSTART 由match函数所匹配的字符串的第一个位置。
[N] RLENGTH 由match函数所匹配的字符串的长度。
[N] SUBSEP 数组下标分隔符(默认值是34)。

示例:

echo -e “line1 f2 f3\nline2 f4 f5\nline3 f6 f7” | awk ‘{print “Line
No:”NR”, No of fields:”NF, “$0=”$0, “$1=”$1, “$2=”$2, “$3=”$3}’

打印结果:

Line No:1, No of fields:3 $0=line1 f2 f3 $1=line1 $2=f2 $3=f3
Line No:2, No of fields:3 $0=line2 f4 f5 $1=line2 $2=f4 $3=f5
Line No:3, No of fields:3 $0=line3 f6 f7 $1=line3 $2=f6 $3=f7

使用print
$NF可以打印出一行中的最后一个字段,使用$(NF-1)则是打印倒数第二个字段,其他以此类推:

echo -e "line1 f2 f3\n line2 f4 f5" | awk '{print $NF}'

打印结果:

f3
f5

echo -e "line1 f2 f3\n line2 f4 f5" | awk '{print $(NF-1)}'

打印结果:

f2
f4

打印每一行的第二和第三个字段:

awk '{ print $2,$3 }' filename

统计文件中的行数:

awk 'END{ print NR }' filename

以上命令只使用了END语句块,在读入每一行的时,awk会将NR更新为对应的行号,当到达最后一行NR的值就是最后一行的行号,所以END语句块中的NR就是文件的行数。

主要有蜘蛛分析、搜索关键词分析和状态码分析三大功能。

参考资料:
nginx日志分析利器GoAccess

图片 3

将外部变量值传递给awk

借助-v选项,可以将外部值(并非来自stdin)传递给awk:

VAR=10000 echo | awk -v VARIABLE=$VAR '{ print VARIABLE }'

另一种传递外部变量方法:

var1="aaa"
var2="bbb"
echo | awk '{ print v1,v2 }' v1=$var1 v2=$var2

当输入来自于文件时使用:

awk '{ print v1,v2 }' v1=$var1 v2=$var2 filename

以上方法中,变量之间用空格分隔作为awk的命令行参数跟随在BEGIN、{}和END语句块之后。


蜘蛛分析模块,可以查看各搜索引擎蜘蛛的爬行情,如:访问次数、总停留时间、总抓取量、目录的爬取量、页面的爬取量等;

在Linux系统的Centos6.3中使用GoAccess可视化的分析Nginx日志文件

网站日志文件里面的记录怎么看?

awk高级输入输出

读取下一条记录

awk中next语句使用:在循环逐行匹配,如果遇到next,就会跳过当前行,直接忽略下面语句。而进行下一行匹配。net语句一般用于多行合并:

cat text.txt
a
b
c
d
e

awk 'NR%2==1{next}{print NR,$0;}'
text.txt
2 b
4 d

简单地读取一条记录

awk
getline用法:输出重定向需用到getline函数。getline从标准输入、管道或者当前正在处理的文件之外的其他输入文件获得输入。它负责从输入获得下一行的内容,并给NF,NR和FNR等内建变量赋值。如果得到一条记录,getline函数返回1,如果到达文件的末尾就返回0,如果出现错误,例如打开文件失败,就返回-1。

当其左右无重定向符|或<时:getline作用于当前文件,读入当前文件的第一行给其后跟的变量var或$0(无变量),应该注意到,由于awk在处理getline之前已经读入了一行,所以getline得到的返回结果是隔行的。当其左右有重定向符|或<时:getline则作用于定向输入文件,由于该文件是刚打开,并没有被awk读入一行,只是getline读入,那么getline返回的是该文件的第一行,而不是隔行。

示例:

执行linux的date命令,并通过管道输出给getline,然后再把输出赋值给自定义变量out,并打印它:

 

awk 'BEGIN{ "date" | getline out; print out }'

 

执行shell的date命令,并通过管道输出给getline,然后getline从管道中读取并将输入赋值给out,split函数把变量out转化成数组mon,然后打印数组mon的第二个元素:

 

awk 'BEGIN{ "date" | getline out; split(out,mon); print mon[2] }'

 

 

命令ls的输出传递给geline作为输入,循环使getline从ls的输出中读取一行,并把它打印到屏幕。这里没有输入文件,因为BEGIN块在打开输入文件前执行,所以可以忽略输入文件。

 

awk 'BEGIN{ while( "ls" | getline) print }'

 

关闭文件

awk中允许在程序中关闭一个输入或输出文件,方法是使用awk的close语句。

 

close("filename")

 

filename可以是getline打开的文件,也可以是stdin,包含文件名的变量或者getline使用的确切命令。或一个输出文件,可以是stdout,包含文件名的变量或使用管道的确切命令。

 

输出到一个文件

 

awk中允许用如下方式将结果输出到一个文件:

 

echo | awk '{printf("hello word!\n") > "datafile"}'

 

 

echo | awk '{printf("hello word!\n") >> "datafile"}'

 

设置字段定界符

默认的字段定界符是空格,可以使用-F “定界符” 明确指定一个定界符:

 

awk -F: '{ print $NF }' /etc/passwd

 

 

awk 'BEGIN{ FS=":" } { print $NF }' /etc/passwd

 

在BEGIN语句块中则可以用OFS=“定界符”设置输出字段的定界符。

 

 

– 关键字分析模块,列出了各搜索引擎查询的前一百个关键字;

goaccess-nginx日志分析工具简介

原始访问日志每一行就是类似以下的记录:

流程控制语句

在linux
awk的while、do-while和for语句中允许使用break,continue语句来控制流程走向,也允许使用exit这样的语句来退出。break中断当前正在执行的循环并跳到循环外执行下一条语句。if
是流程选择用法。awk中,流程控制语句,语法结构,与c语言类型。有了这些语句,其实很多shell程序都可以交给awk,而且性能是非常快的。下面是各个语句用法。

 

条件判断语句

 

if(表达式)
    语句1
else
    语句2

 

格式中语句1可以是多个语句,为了方便判断和阅读,最好将多个语句用{}括起来。

 

awk分枝结构允许嵌套,其格式为:

 

if(表达式)
    {语句1}
else if(表达式)
    {语句2}
else
    {语句3}

 

示例:

 

awk 'BEGIN{
test=100;
if(test>90){
    print "very good";
}
else if(test>60){
    print "good";
} else{
    print "no pass";
    }
}'

 

每条命令语句后面可以用;分号结尾。

 

循环语句

 

while语句:

 

 

while(表达式)
    {语句}

 

示例:

 

awk 'BEGIN{
test=100;
total=0;
while(i<=test){
    total+=i;
    i++;
}
print total;
}'

 

for循环

 

for循环有两种格式:

格式一:

 

for(变量 in 数组)
    {语句}

 

格式二:

 

for(变量;条件;表达式)
{语句}

 

 

do循环

 

do
{语句} while(条件)

 

示例:

 

awk 'BEGIN{
total=0;
i=0;
do {total+=i;i++;} while(i<=100)
    print total;
}'

 

 

其他语句

 

break 当 break 语句用于 while 或 for 语句时,导致退出程序循环。continue
当 continue 语句用于 while 或 for
语句时,使程序循环移动到下一个迭代。exit
语句使主输入循环退出并将控制转移到END,如果END存在的话。如果没有定义END规则,或在END中应用exit语句,则终止脚本的执行。

 

 

– 状态码分析模块,分别列出了用户访问和蜘蛛访问下的各状态码情况。

116.231.220.179 – – [25/Mar/2015:11:21:15 +0800] “GET /blog/article/10.html HTTP/1.1” 200 8671 “http://www.weiaipin.cn/” “Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0)”

数组应用

数组是awk的灵魂,处理文本中最不能少的就是它的数组处理。因为数组索引(下标)可以是数字和字符串在awk中数组叫做关联数组(associative
arrays)。awk
中的数组不必提前声明,也不必声明大小。数组元素用0或空字符串来初始化,这根据上下文而定。

 

数组的定义

 

数字做数组索引(下标):

 

Array[1]="sun"
Array[2]="kai"

 

字符串做数组索引(下标):

 

Array["first"]="www"
Array["last"]="name"
Array["birth"]="1987"

 

 

读取数组的值

 

{ for(item in array) {print array[item]}; } #输出的顺序是随机的
{ for(i=1;i<=len;i++) {print array[i]}; } #len是数组的长度

 

 

数组相关函数

 

得到数组长度:

 

awk 'BEGIN{info="it is a test";lens=split(info,tA," ");print length(tA),lens;}'

 

length返回字符串以及数组长度,split进行分割字符串为数组,也会返回分割得到数组长度。

 

 

awk 'BEGIN{info="it is a test";split(info,tA," ");print asort(tA);}'

 

asort对数组进行排序,返回数组长度。

 

 

输出数组内容(无序,有序输出):

 

awk 'BEGIN{info="it is a test";split(info,tA," ");for(k in tA){print k,tA[k];}}'

 

打印结果:

 

1 it
2 is
3 a
4 test

注意:数组下标是从1开始,与C数组不一样。

 

 

 

判断键值存在以及删除键值:

 

awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";if( "c" in tB){print "ok";};for(k in tB){print k,tB[k];}}'

 

打印结果:

 

a a1
b b1

 

 

#删除键值:

 

awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";delete tB["a"];for(k in tB){print k,tB[k];}}'

 

打印结果:

 

b b1

 

 

下面我们来说说这一行记录的意思:

字符串操作

查找字符串(index使用)

 

awk 'BEGIN{info="this is a test2010test!";print index(info,"test")?"ok":"no found";}'

未找到,返回0

 

 

正则表达式匹配查找(match使用)

 

awk 'BEGIN{info="this is a test2010test!";print match(info,/[0-9]+/)?"ok":"no found";}'

 

截取字符串(substr使用)

 

awk 'BEGIN{info="this is a test2010test!";print substr(info,4,10);}'

 

从第 4个 字符开始,截取10个长度字符串

 

字符串分割(split使用)

 

awk 'BEGIN{info="this is a test";split(info,tA," ");print length(tA);for(k in tA){print k,tA[k];}}'

 

打印结果:

 

 

4
4 test
1 this
2 is
3 a

分割info,动态创建数组tA,这里比较有意思,awk for
…in循环,是一个无序的循环。 并不是从数组下标1…n ,因此使用时候需要注意。

 

 

生成的报表如下图:

116.231.220.179

一般函数

 

打开外部文件(close用法)

 

awk 'BEGIN{while("cat /etc/passwd"|getline){print $0;};close("/etc/passwd");}'

 

 

逐行读取外部文件(getline使用方法)

 

awk 'BEGIN{while(getline < "/etc/passwd"){print $0;};close("/etc/passwd");}'

 

 

awk 'BEGIN{print "Enter your name:";getline name;print name;}'

 

调用外部应用程序(system使用方法)

 

awk 'BEGIN{b=system("ls -al");print b;}'

 

 

图片 4

这是访客(也可能是机器人)的IP

网站日志分析

页面抓去报表

[25/Mar/2015:11:21:15 +0800]

简介

下面使用Linux中的Awk对tomcat中日志文件做一些分析,主要统计pv,uv等。

日志文名称:access_2013_05_30.log,大小57.7 MB 。

这次分析只是简单演示,所以不是太精确地处理数据。

日志地址:

 

日志数据示例:

图片 5

 

日志总行数:

图片 6

 

打印的第七列数据为日志的URL:

图片 7

 

 

下载地址:

这是访客访问该资源的时间(Date),+0800是该时间所对应的时区,即与格林威治时间相差+8个小时

分析中用到的一些知识:

扩展,

shell中的管道|

 

command 1 | command 2     #他的功能是把第一个命令command 1执行的结果作为command 2的输入传给command 2

 

 

wc -l    #统计行数

 

 

uniq -c     #在输出行前面加上每行在输入文件中出现的次数

 

 

uniq -u      #仅显示不重复的行

 

sort -nr

 

-n:依照数值的大小排序-r:以相反的顺序来排序-k:按照哪一列进行排序

 

 

head -3      #取前三名

 

 

“GET /blog/article/10.html HTTP/1.1”

网站日志分析步骤

 

数据清洗:

1、第一次清洗:去除URL中以/static/开头的URL

 

awk '($7 !~ /^\/static\//){print $0}' access_2013_05_30.log > clean_2013_05_30.log

 

去除前:

图片 8

去除后:

图片 9

2、第二次清洗:去除图片、css和js

 

awk '($7 !~ /\.jpg|\.png|\.jpeg|\.gif|\.css|\.js/) {print $0}' clean_2013_05_30.log > clean2_201 3_05_30.log

 

图片 10

 

PV

pv是指网页访问次数

方法:统计所有数据的总行数

数据清洗:对原始数据中的干扰数据进行过滤

 

awk 'BEGIN{pv=0}{pv++}END{print "pv:"pv}' clean2_2013_05_30.log > pv_2013_05_30

 

图片 11

 

UV

uv指的是访问人数,也就是独立IP数

对ip重复的数据进行去重,然后再统计所有行数

 

 

awk '{print $1}' clean2_2013_05_30.log |sort -n |uniq -u |wc -l > uv_2013_05_30

 

图片 12

 

 

访问最多的IP(前10名)

对ip重复的数据进行去重的时候还要汇总,取前10名

 

awk '{print $1}' clean2_2013_05_30.log | sort -n | uniq -c |sort -nr -k 1|head -10 > top10_2013_05_30

图片 13

 

 

访问前十的URL(可以用来分析网站哪个模块最受欢迎)

 

 

awk '{print $7}' clean2_2013_05_30.log | sort | uniq -c |sort -nr -k 1|head -10 > top10URL_2013_ 05_30

 

图片 14

使用Java实现访问量前十的IP地址。

 

图片 15

 

 

代码示例:

 

import java.io.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by Chen on 2016/4/13.
 */
public class RegexTest {
    public static void main(String[] args) throws IOException {

        //日志格式:27.19.74.143 - - [30/May/2013:17:38:20 +0800] "GET /static/image/common/faq.gif HTTP/1.1" 200 1127
        //需要解析的源文件
        File file = new File("D:\\clean2_2013_05_30.log");
        //高效字符读入流
        BufferedReader bufr = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
        String line = null;
        //建立TreeMap,Key为IP地址,Value为IP出现次数
        Map map = new TreeMap<>();
        while ((line = bufr.readLine()) != null) {
            String ip = parseIP(line);
            map.put(ip, map.get(ip) == null ? 1 : map.get(ip) + 1);
        }


        Set set = map.keySet();
        //创建一个具有匿名比较器的TreeSet集合 :作用是让存入的元素先按照Key排序,相同则继续按照Value排序。
        //这个TreeSet将用来存储IP地址和出现次数反转后的每个元素。
        TreeSet> treeSet = new TreeSet<>(new Comparator>() {
            @Override
            public int compare(Map.Entry o1, Map.Entry o2) {
                int result = o1.getKey() - o2.getKey();
                if (result == 0) {
                    result = o1.getValue().compareTo(o2.getValue());
                }
                return -result;
            }
        });


        //把IP地址和出现次数反转,然后放入上面具有比较器的TreeSet中
        for (Iterator it = set.iterator(); it.hasNext(); ) {
            String ip = it.next();
            Integer n = map.get(ip);
            treeSet.add(new AbstractMap.SimpleEntry(n, ip));
        }


        //遍历并打印出现次数和IP地址(次数最多的前十个)
        int count = 0;
        Iterator> itr = treeSet.iterator();
        while (itr.hasNext()) {
            if (count == 10) {
                break;
            }
            Map.Entry en = itr.next();
            int n = en.getKey();
            System.out.println(n + "\t\t\t" + en.getValue());
            count++;
        }
    }

    //解析IP地址
    public static String parseIP(String str) {
        Pattern compile = Pattern.compile("[0-9]+(\\.[0-9]+){3}");
        //解析IP地址
        Matcher matcher = compile.matcher(str);
        String group = "";
        if (matcher.find()) {
            group = matcher.group();
        }
        return group;
    }
}

Awk使用及网站日志分析
Awk简介 概述
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分…

2. 逆火网站日志分析器

请求信息,包括请求方式、所请求的资源以及所使用的协议,该语句的意思就是以GET方式,按照HTTP/1.1协议获取网页/blog/article/10.html,10html为网站上的某个页面。

此款是笔者日常分析网站原始日志数据使用的一款。它以报表、统计图的形式向我们展示日志的分析结果,并且分析出来的数据报表条理清晰,易于查看功能很强大,对日志分析的也很全面。但是分析出的内容都是统计总结后的结果,不能从报表中去查看分析的原始日志情况。

200 8671

图片 16

200为该请求返回的状态码(Http
Code),不同的状态码代表不同的意思,具体请阅读 HTTP
状态代码;8671为此次请求所耗费的流量(Size in Bytes),单位为byte

逆火网站日志分析器 软件界面

“”

 

为访客来源(Referer)。这一段是告诉我们访客是从哪里来到这一个网页。有可能是你的网站其他页,有可能是来自搜索引擎的搜索页等。通过这条来源信息,你可以揪出盗链者的网页。

主要功能包括:

“Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0)”

1、网站的总体访问情况,包括所有的访问量,使用带宽情况等;

为访客所使用的浏览器类型(Agent),这里记录了用户使用的操作系统、浏览器型号等信息。

2、访问者关注的页面,访问者访问的URLS,点击了那些图片,视频,下载等,访问者在页面停留的时间等;

如何分析网站日志中的内容?

3、访客来自哪些国家地区,访问的使用浏览器以及操作系统的情况等;

1、注意那些被频繁访问的资源

4、访客主要是通过哪些关键词,哪些搜索引擎以及哪些网站过来的;

如果在日志中,你发现某个资源(网页、图片和mp3等)被人频繁访问,那你应该注意该资源被用于何处了!如果这些请求的来源(Referer)不是你的网站或者为空,且状态码(Http
Code)为200,说明你的这些资源很可能被人盗链了,通过
Referer你可以查出盗链者的网址,这可能就是你的网站流量暴增的原因,你应该做好防盗链了。请看下图,我网站上的japan.mp3这个文件就被人频繁的访问了,下图还只是日志的一部分,这人极其险恶,由于我早已将该文件删除,它迟迟要不到japan.mp3,在短短一个小时内对japan.mp3发起了不下百次的请求,见我设置了防盗链就伪造来源Referer和Agent,还不断地更换IP,很可惜它做得都是无用功,根本没有这个文件,请求的状态码Http
Code都是403或者404。

5、网站广告投放情况,具体的显示,访问以及点击情况;

2、注意那些你网站上不存在资源的请求

6、重点跟踪文件情况,可以查看总表以及按照日期查看;

如果某些请求信息不是本站的资源,Http
Code不是403就是404,但从名称分析,可能是保存数据库信息的文件,如果这些信息让别人拿走,那么攻击你的网站就轻松多了。发起这些请求的目的无非就是扫描你的网站漏洞,通过漫无目的地扫描下载这些已知的漏洞文件,很可能会发现你的网站某个漏洞哦!通过观察,可以发现,这些请求所使用的Agent差不多都是Mozilla/4.0、Mozilla/5.0或者libwww-perl/等等非常规的浏览器类型,以上我提供的日志格式化工具已经集成了对这些请求的警报功能。我们可以通过禁止这些Agent的访问,来达到防止被扫描的目的,具体方法下面再介绍。

7、访问出现错误的情况等。

3、观察搜索引擎蜘蛛的来访情况

 

通过观察日志中的信息,你可以看出你的网站被蜘蛛访问的频率,进而可以看出你的网站是否被搜索引擎青睐,这些都是SEO所关心的问题吧。日志格式化工具已经集成了对搜索引擎蜘蛛的提示功能。常见搜索引擎的蜘蛛所使用的Agent列表如下:

生成的报表如下图:

Google蜘蛛:Mozilla/5.0 (compatible; Googlebot/2.1;
+

图片 17

Baidu蜘蛛:Baiduspider+(+

概要统计

Yahoo!蜘蛛:Mozilla/5.0 (compatible; Yahoo! Slurp/3.0;

 

Yahoo!中国蜘蛛:Mozilla/5.0 (compatible; Yahoo! Slurp China;

图片 18

微软Bing蜘蛛:msnbot/2.0b (+

浏览器排行

Google Adsense蜘蛛:Mediapartners-Google

下载地址:

有道蜘蛛:Mozilla/5.0 (compatible; YoudaoBot/1.0;
; )

 

Soso搜搜博客蜘蛛:Sosoblogspider+(+

3. Web Log Explorer

Sogou搜狗蜘蛛:Sogou web
spider/4.0(+


款功能强大的网站日志细分反查软件,能对日志中的各项维度进行细分整理,可以彻底解析网站的日志文件,从而更好的优化网站。能够将多种关于网站浏览者的统
计资料彻底解析,包括:参观人次、动态状况、档案存取状态、参照网页、搜寻引擎、错误、来访者国家、网站搜寻字符串/词组等功能。

Twiceler爬虫程序:Mozilla/5.0 (Twiceler-0.9

Web Log
Explorer支持30多种日志文件格式。据测试,与所有流行的Web服务器、Web代理、防火墙和MS
Windows媒体服务匹配。还可以自动压缩日志文件,兼容ODBC数据库。

Google图片搜索蜘蛛:Googlebot-Image/1.0

Web Log Explorer还允许你过滤搜索引擎机器人,使搜索结果更加全面。

俄罗斯Yandex搜索引擎蜘蛛:Yandex/1.01.001 (compatible; Win16; I)

图片 19

Alexa蜘蛛:ia_archiver (+;
crawler@alexa.com)

Web Log Explorer 软件界面

Feedsky蜘蛛:Mozilla 5.0 (compatible; Feedsky crawler /1.0;

 

韩国Yeti蜘蛛:Yeti/1.0 (NHN Corp.;

Web Log Explorer主要功能:

4、观察访客行为

  1. 数据报告:常规的日志属性统计

通过查看格式化后的日志,可以查看跟踪某个IP在某个时间段的一系列访问行为,单个IP的访问记录越多,说明你的网站PV高,用户粘性好;如果单个IP的访问记录希希,你应该考虑如何将你的网站内容做得更加吸引人了。通过分析访客的行为,可以为你的网站建设提供有力的参考,哪些内容好,哪些内容不好,确定网站的发展方向;通过分析访客的行为,看看他们都干了些什么事,可以揣测访客的用意,及时揪出恶意用户。

  
能够对用户访问路径,访问文件类型,访问文件夹,服务器状态码等进行分析;

常用网站日志分析软件有哪些?

  1. 访问者报告:能够统计出主机分类、访问分类和国家分类;

笔者试用过很多网站日志分析工具,常用的并且功能又比较全面的大概有三款:光年SEO日志分析系统、逆火网站日志分析器、Web
Log Explorer。

3.
引用报告:能够统计出来路分类、引用站点分类、关键词分类、搜索引擎分类等;

对于这三款软件的具体使用评价总结,请看我写的另外一篇文章《常用网站日志分析软件使用总结》。

4.
用户代理报告:能统计所有类型,包括蜘蛛分类,浏览器分类,操作系统分类等;

附:网站日志代码大全

5.
日期属性:适合查看网站总体的一个情况,也可以按年、月、日、星期、小时查看;

1xx-信息提示

  1. 以上各每类情况都可以选择一种分类查看该类中其他分类的详细日志信息。

这些状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个1xx响应。

 

100-继续。

生成的报表如下图:

101-切换协议。

图片 20

2xx-成功

访客信息

这类状态代码表明服务器成功地接受了客户端请求。

 

200-确定。客户端请求已成功。

图片 21

201-已创建。

浏览器信息

202-已接受。

下载地址:

203-非权威性信息。

 

204-无内容。

《常用网站日志分析软件使用总结》本文转载于「为爱拼」,原文地址:。

205-重置内容。

206-部分内容。

3xx-重定向

客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同的页面,或通过代理服务器重复该请求。

301-对象已永久移走,即永久重定向。

302-对象已临时移动。

304-未修改。

307-临时重定向。

4xx-客户端错误

发生错误,客户端似乎有问题。例如,客户端请求不存在的页面,客户端未提供有效的身份验证信息。400-错误的请求。

401-访问被拒绝。IIS定义了许多不同的401错误,它们指明更为具体的错误原因。这些具体的错误代码在浏览器中显示,但不在IIS日志中显示:

401.1-登录失败。

401.2-服务器配置导致登录失败。

401.3-由于ACL对资源的限制而未获得授权。

401.4-筛选器授权失败。

401.5-ISAPI/CGI应用程序授权失败。

401.7–访问被Web服务器上的URL授权策略拒绝。这个错误代码为IIS6.0所专用。

403-禁止访问:IIS定义了许多不同的403错误,它们指明更为具体的错误原因:

403.1-执行访问被禁止。

403.2-读访问被禁止。

403.3-写访问被禁止。

403.4-要求SSL。

403.5-要求SSL128。

403.6-IP地址被拒绝。

403.7-要求客户端证书。

403.8-站点访问被拒绝。

403.9-用户数过多。

403.10-配置无效。

403.11-密码更改。

403.12-拒绝访问映射表。

403.13-客户端证书被吊销。

403.14-拒绝目录列表。

403.15-超出客户端访问许可。

403.16-客户端证书不受信任或无效。

403.17-客户端证书已过期或尚未生效。

403.18-在当前的应用程序池中不能执行所请求的URL。这个错误代码为IIS6.0所专用。

403.19-不能为这个应用程序池中的客户端执行CGI。这个错误代码为IIS6.0所专用。

403.20-Passport登录失败。这个错误代码为IIS6.0所专用。

404-未找到。

404.0-(无)–没有找到文件或目录。

404.1-无法在所请求的端口上访问Web站点。

404.2-Web服务扩展锁定策略阻止本请求。

404.3-MIME映射策略阻止本请求。

405-用来访问本页面的HTTP谓词不被允许(方法不被允许)

406-客户端浏览器不接受所请求页面的MIME类型。

407-要求进行代理身份验证。

412-前提条件失败。

413–请求实体太大。

414-请求URI太长。

415–不支持的媒体类型。

416–所请求的范围无法满足。

417–执行失败。

423–锁定的错误。

5xx-服务器错误

服务器由于遇到错误而不能完成该请求。

500-内部服务器错误。

500.12-应用程序正忙于在Web服务器上重新启动。

500.13-Web服务器太忙。

500.15-不允许直接请求Global.asa。

500.16–UNC授权凭据不正确。这个错误代码为IIS6.0所专用。

500.18–URL授权存储不能打开。这个错误代码为IIS6.0所专用。

500.100-内部ASP错误。

501-页眉值指定了未实现的配置。

502-Web服务器用作网关或代理服务器时收到了无效响应。

502.1-CGI应用程序超时。

502.2-CGI应用程序出错。application.

503-服务不可用。这个错误代码为IIS6.0所专用。

504-网关超时。

505-HTTP版本不受支持。

分享转载请注明:”本文转载于「为爱拼」,原文地址:http://www.weiaipin.cn/blog/article/31.html”

相关文章