nginx插件统计访问量_nginx插件统计访问量


为了有效地管理web服务器,以及获取有关服务器活动和性能相关的数据反馈。Apache HTTP Server提供了非常全面和灵活的日志功能。本章节主要介绍如何配置日志文件以及理解日志文件中所包含的内容。主要介绍的日志文件有两类:access_log日志文件和error_log日志文件。

10.4.1 access_log日志文件

access_log日志文件主要是记录客户端访问服务器的所有请求信息。access_log日志文件所在位置由customLog指令设置,其指令语法如下:


CustomLog


设置access_log日志文件格式可以使用LogFormat指令,日志的格式设置参数如下:


LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
LogFormat "%h %l %u %t "%r" %>s %b" common


日志格式设置有两种:common和combined。一般我们使用的是默认的common格式。

上面是日志记录内容的格式定义,格式是由百分号和相关指令组成,每个指令都表示服务器的一条特定的日志信息,文字字符也以字符串复制到日志输出中,如果要表示引号字符必须使用反斜杠进行转义,以防止将其解释为格式字符串的结尾。

common格式的日志内容如下:


192.168.40.134 - - [19/Oct/2019:16:23:19 +0800] "GET /ecshop3/images/201605/thumb_img/62_thumb_G_1462952557730.jpg HTTP/1.1" 200 2064
192.168.40.134 - - [19/Oct/2019:16:23:19 +0800] "GET /ecshop3/data/afficheimg/1462958213922967180.jpg HTTP/1.1" 200 158999


日志内容各部分的含义如下:

Ø 192.168.40.134(%h)

表示向服务器发出请求的客户端(远程主机)的IP地址。如果将HostnameLookups指令设置为On,那么这个内容可能为主机名,而非IP地址。但是,不建议使用此配置,因为它会显著降低服务器的速度。相反,最好使用日志后处理器(如logresolve)来确定主机名。

需要注意的是我们看到日志文件内容中的IP地址不一定是用户所在机器的地址。如果在用户和服务器之间存在代理服务器,则该地址将是代理的地址,而不是始发机器的IP地址。

Ø - (%l)

输出中出现的“-”字符,是连字符的意思,表示请求的信息不可用,这是由客户机的RFC 1413同身的一些特性标识的,这种信息是很不可靠的,但是如果将IdentityCheck设置为On,那么apache服务器才会尝试去确定此信息。

Ø - (%u)

这是访问服务器的用户ID,这个ID是由HTTP身份验证来确定的,这个值一般是保存到远程用户环境变量中的CGI脚本中。如果服务器不信任此值,因为用户尚未通过身份验证。如果文档不受密码保护,则此部分将与前一部分一样为“-”。

Ø [19/Oct/2019:16:23:19 +0800] (%t)

表示访问服务器时,服务器的时间。+0800表示服务器所处时区位于UTC之后的8小时。

Ø GET /ecshop3/images/201605/thumb_img/62_thumb_G_1462952557730.jpg HTTP/1.1("%r")

表示访问服务器的资源的相关信息,包括请求方式、服务器资源位置、客户端向服务器发送请求时的协议和协议版本信息。

Ø 200 (%>s)

这表示客户端请求服务器后返回的状态码,此信息非常有价值,它揭示了请求是否成功以及失败的。关于HTTP响应状态码的详细可以查看HTTP规范RFC2616第10节内容。

Ø 2064(%b)

表示服务器发送给客户端的字节数,但这个字节数,不包括响应头的信息,如果服务器没有向客户端发送任何内容,则该值为“-”,若记录为0则表示不记录任何内容。

Combined 格式的日志内容如下:


127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)"


Combined 日志内容与common日志内容信息差不多,只是多出了以下两个字段:

Ø "http://www.example.com/start.html"("%{Referer}i")

表示客户端所访问资源的引用站点。如实例中表示是所访问资源apache_pb.gif的链接或包含apache_pb.gif的页面。

Ø "Mozilla/4.08 [en] (Win98; I ;Nav)"("%{User-agent}i")

表示发送HTTP请求的客户端自身的标识信息。

10.4.2 error_log日志文件

error_log记录两类错误信息:一是文档类的错误信息;二是CGI编译类的错误信息;是最要的日志文件之一,错误日志命名和位置是由ErrorLog指令来设置,error_log日志文件会记录处理请求时遇到的任何错误相关信息,当启动服务器或服务器操作出现问题时,首先会分析error_log日志文件,分析错误的详细信息以及如何解决问题。

error_log错误日志路径设置如下:

ErrorLog "logs/error_log"

错误日志的格式由ErrorLogFormat指令定义,您可以使用该指令自定义记录的值。如果不指定格式,则默认为“格式定义”。典型的日志消息如下:


[Fri Sep 09 10:42:29.902022 2011] [core:error] [pid 35708:tid 4328636416] [client 72.15.99.187] File does not exist: /usr/local/apache2/htdocs/favicon.ico


第一部分内容表示记录错误日志信息的日期和时间。

第二部分内容表示引起错误信息的是模块,以及该错误信息的严重级别。

第三部分内容表示产生错误信息的进程号和线程号。

第四部分内容表示发送请求的客户端信息。

第五部分内容表示错误的详细信息,这种情况表示找不到资源,所访问的资源不存在。

在linux或unix操作系统下,如果需要动态查看日志信息变化情况可以使用以下命令:

tail -f error_log

但这个命令不具体统计功能,如果需要对日志文件进行相关的统计的话,使用上面的命令是不够的。关于如果分析日志文件在下面的小节中我们会详细介绍。

10.4.2 日志文件分析工具或指令

上面介绍了两种常见的日志文件,在工作中很多人可能会使用tail -f命令来查看日志文件。但这个命令是不具体统计功能的,它只能实时的看到最后几行日志信息进行变化。并且在实际工作中这个日志文件可能会很多,有的数据量比较多的时候可能一天会产生几个TB的日志信息,这样给统计工作带来难度,那么如果我们需要结日志文件进行分析和统计那怎么处理呢?

一般分析日志文件有两种方法:一是使用分析工具Apache Logs Viewer;二是使用命令进行统计。

1) Apache Logs Viewer

Apache Logs Viewer(ALV)是一个免费且功能强大的工具,可让您更轻松地监视,查看和分析 Apache / IIS / nginx日志。它为日志文件提供搜索和筛选功能,并根据其状态代码突出显示各种HTTP请求。该工具还带有生成报告功能,因此您可以在几秒钟内生成一个饼图/条形图。与此相关的还有统计信息,您可以设置相关的筛选条件对日志信息进行筛选和统计。

关于分析服务器相关日志信息的工具其实也不少,不是只有这款工具,大家有兴趣的话可以在网上找到不少关于这类日志文件的分析工具。

关于Apache Logs Viewer工具如何使用我们就做介绍了,这个使用比较简单,大家安装好就会使用,Apache Logs Viewer主界面如图10-10所示。


nginx插件统计访问量_日志文件_02


图10-10 Apache Logs Viewer主界面

2) Unix/Linux命令统计

除了使用工具统计外还可以使用一些常见的命令对日志文件进行分析与统计。以下是一些常见的用于监控和统计日志文件的命令。

Ø 动态查看日志文件


tail -f access_log


Ø 查看apache的进程数


ps aux | grep 'httpd' | wc -l


Ø 分析某天一共的请求数


cat access_log | grep '15/Jun/2019' | awk '{print $2}'|sort |uniq -c


Ø 分析某天指定的IP访问的URL情况


cat access_log | grep '15/Jun/2019' | grep '192.168.40.134' | awk '{print $7}' | sort | uniq -c | sort -nr


Ø 查看当天访问排行前10的url


cat access_log | grep '15/Jun/2019' |awk '{print $7}' | sort | uniq -c | sort -nr | head -n 10


Ø 查看访问次数最多的时间点


awk '{print $4}' access_log |cut -c 14-18|sort|uniq -c|sort -nr|head