apache、nginx、iis日志记录的各个字段内容的含义

在这之前我们先来介绍一下什么是网站日志:

网站服务器日志记录这所有网站资源请求的原始数据,准确且详细,是分析网站必不可少的重要环节。想要分析日志文件,首选需要了解日志文件的格式与各个字段的意思。

IIS服务器日志:

网站运营时会经常对IIS日志进行分析,尽管有很多工具可以分析(Cygwin命令行模式就很好,前提是掌握一些简单的Linux命令),但是前提是熟悉IIS日志每个字段的含义,这样才能够更有针对性的分析潜在的问题。

IIS日志建议使用W3C扩充日志文件格式,这也是IIS 5.0已上默认的格式,可以指定每天记录客户IP地址、用户名、服务器端口、方法、URI资源、URI查询、协议状态、用户代理,每天要审查日志。这些字段可以手动设置:

日志的主体是一条一条的请求信息,请求信息的格式是由#Fields定义的,每个字段都有空格隔开。

若是重启进程,则这四行会再记录一次。

前缀

含义

s-

服务器操作。

c-

客户端操作。

cs-

客户端到服务器的操作。

sc-

服务器到客户端的操作。

#Software、#Version、#Date 分别是服务器程序、版本、时间。

#Fields列为日志内容各字段列说明(不同服务器配置略有差异),具体如下:

  • date:日期
  • time:时间,这两个字段组成资源请求详细时间,改时间通常为服务器端时间,注意,服务器采用时区可能与本地时区不一致。
  • s-ip:服务器IP,资源处理服务器IP,通常是服务器本机IP。
  • cs-method:请求方式,常见有GET与POST请求。
  • cs-uri-stem:请求资源路径,网站根目录下的绝对路径位置。
  • cs-uri-query:请求参数。
  • s-port:使用端口,通常HTTP协议端口是80,HTTPS协议端口是443。
  • cs-username:客户端用户名,通常为空或-。
  • c-ip:客户端IP,判断唯一用户的重要依据,也是判断搜索蜘蛛爬虫真伪的依据。如何判断百度蜘蛛谷歌爬虫真伪?
  • cs(User-Agent):用户代理字符串,用户使用的设备与浏览器类型,以及是否是爬虫蜘蛛程序,但此数据可模拟,需结合上面客户端IP才能准确判断是否是蜘蛛程序。
  • sc-status:请求资源返回状态码,HTTP状态码,通常200为正常,301为跳转,404为资源不存在,500为服务器错误,详细网站HTTP状态码。 
  • sc-substatus:协议子状态,通常为0。
  • sc-win32-status:Win32状态,通常为0。
  • time-taken:花费时间,单位为毫秒。
  • cs-version:协议版本。
  • cs(Referer):请求来路,从哪个页面点击链接进入的该资源。通常如果存在该字段,可判断出搜索引擎与搜索词。
  • sc-bytes:发送文件的大小,单位为字节。一般为所请求资源文件的大小。
  • s-sitename:服务器站点名称,用于区分同一服务器下的多个站点。
  • s-computername:服务器计算机名称。
  • cs(Cookie):客户端请求Cookie。
  • cs-host:客户端请求主机名
IIS日志字段
#Software: Microsoft Internet Information Services 7.5
#Version: 1.0
#Date: 2013-08-21 01:00:00
#Fields: date time s-sitename s-computername s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs-version cs(User-Agent) cs(Cookie) cs(Referer) cs-host sc-status sc-substatus sc-win32-status sc-bytes cs-bytes time-taken
各个字段的含义 

序号

字段

字段

格式及值

备注

1

date 

日期

2013-08-21

活动发生的日期。

2

time 

时间

01:16:11 +8小时

活动发生的时间。

3

s-sitename

服务名

W3SVC2

客户端所访问的该站点的 Internet 服务和实例的号码。

4

s-computername

服务器名

VMS01487

生成日志项的服务器名称。

5

s-ip

服务器IP

10.8.2.174

生成日志项的服务器的IP地址。

6

cs-method

方法

GET/POST

客户端试图执行的操作(例如 GET 方法)

7

cs-uri-stem

请求访问的页面

/TrainBooking/Search.aspx

/表示访问主页

8

cs-uri-query

访问的查询字符串

from=beijingxi&to=xinxiang2&day=1&number=&fromCn=%B1%B1%BE%A9&toCn=%D0%C2%CF%E7

客户端正在尝试执行的查询(如果有)。查询HTTP请求中问号(?)后的信息

9

 s-port

服务器端口

80

客户端连接的服务器端口号。

10

cs-username

 

-

对于通过身份验证的用户,格式是“域用户名”;对于匿名用户,是一个连字符 (-)。

11

c-ip

客户端IP

120.71.108.114

访问服务器的客户端 IP 地址。(已过滤掉中间各种IP,是真实的客户端IP)

12

cs-version

协议版本

HTTP/1.1

客户端使用的协议(HTTP,FTP)版本。对于 HTTP,这将是 HTTP 1.0 或 HTTP 1.1。

13

cs(User-Agent)

用户代理

Mozilla/4.0+(compatible;+MSIE+8.0;+Windows+NT+5.1;+Trident/4.0;+QQDownload+718)

在客户端使用的浏览器。

14

cs(Cookie)

Cookie

Session=SmartLinkLanguage=zh&SmartLinkHost=&SmartLinkQuary=&SmartLinkKeyWord=&SmartLinkCode=U217664;+Union=OUID=baidu6a%7Ctrain%7C%7C%7C&AllianceID=4897&SID=217664;+rt=4_1;+__utma=1.1239641147.1377046635.1377046635.1377046635.1;+__utmb=1.1.10.1377046635;+__utmc=1;+__utmz=1.1377046635.1.1.utmcsr=baidu|utmccn=Baidu6a|utmcmd=cpc|utmctr=%E7%81%AB%E8%BD%A6%E7%A5%A8%E6%9F%A5%E8%AF%A2;+traceExt=campaign=CHNbaidu6a&adid=train;+_bfa=1.1377046635093.2zk2zs.1.1377046635093.1377046635093.1.1;+_bfs=1.1;+_bfp=469547008;+_bfi=p1=108001&p2=0&v1=1&v2=1;+ALLYESID4=06D7467F7F5F739E;+TrainLastSearch=%E9%93%9C%E4%BB%81%7Ctongren%7C%E6%B7%B1%E5%9C%B3%E8%A5%BF%7Cshenzhenxi%7C2013-08-21%7C;+ASP.NET_SessionId=kqc0qh3d3zmg42zlnruijtb1

发送或接收的 Cookie 的内容(如果有)

15

cs(Referer)

引用站点

http://trains.xxx.com/TrainBooking/RoundTrip.aspx?from=liuan&to=jiaxing&day=4&dayreturn=5&number=&fromCn=六安&toCn=嘉兴

用户访问的前一个站点。此站点提供到当前站点的链接。

16

cs-host

主机

trains.xxx.com

(有时直接访问服务器IP,10.8.2.174)

显示主机头的内容。

17

sc-status

协议返回状态

200

以HTTP或FTP表示的操作的状态

18

sc-substatus

HTTP子协议的状态

0

 

19

sc-win32-status

Win32® 状态

0

用 Windows® 使用的术语表示的操作的状态。

20

sc-bytes

服务器发送的字节数

87682

服务器发送的字节数。

21

cs-bytes

服务器接受的字节数

1324

服务器接收的字节数。

22

time-taken

所用时间

187

操作花费的时间长短(亳秒)

Apache服务器日志:(https://www.alibabacloud.com/help/zh/doc-detail/87740.htm、、、https://blog.csdn.net/tswisdom/article/details/41677557

与IIS服务器格式略有不同,Apache服务器日志记录通常不包含字段说明。 默认情况下单条记录(一行)通常分为5部分。分别是:请求IP与时间、请求方式与内容、请求状态与大小、请求资源来路、请求代理字符串。

  • 请求IP与时间: 106.11.156.101 - - [27/Feb/2019:08:04:21 +0800] 请求客户端IP地址与时间,此时间记录包含时区标识,中间两个 - 分别为访问者的标识与身份验证,通常为空以-代替。
  • 请求方式与内容: GET /373.html HTTP/1.1 请求方式与请求资源绝对路径,之后为请求协议类型。
  • 请求状态与大小:200 4656 请求资源返回HTTP状态码与发送文件大小(字节)。
  • 请求资源来路: http://www.example.com/ 请求资源来路或资源引用来路。
  • 请求代理字符串: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 YisouSpider/5.0 Safari/537.36 用户代理字符串。

 各个字段含义如下所示。

 
字段字段名说明
%h remote_addr 客户端IP地址。
%l remote_ident 客户端日志名称,来自identd。
%u remote_user 客户端用户名。
%t time_local 服务器时间。
%r request 请求内容,包括方法名、地址和http协议。
%>s status 返回的http状态码。
%b response_size_bytes 返回的大小。
%{Rererer}i httpu0008_referer 来源页。
%{User-Agent}i http_user_agent 客户端信息。
%D request_time_msec 请求时间,单位为毫秒。
%f filename 带路径的请求文件名。
%k keep_alive keep-alive请求数。
%p remote_port 服务器端口号。
%q request_query 查询字符串,如果不存在则为空字符串。
%R response_handler 服务器响应的处理程序。
%T request_time_sec 请求时间,单位为秒。
%I bytes_received 服务器接收的字节数,需要启用mod_logio模块。
%O bytes_sent 服务器发送的字节数,需要启用mod_logio模块。

%…a: 远程IP地址

%…A: 本地IP地址

%…B: 已发送的字节数,不包含HTTP头

%…b: CLF格式的已发送字节数量,不包含HTTP头。

例如当没有发送数据时,写入‘-’而不是0。

%e: 环境变量FOOBAR的内容

%…f: 文件名字

%…h: 远程主机

%…H 请求的协议

%i: Foobar的内容,发送给服务器的请求的标头行。

%…l: 远程登录名字(来自identd,如提供的话)

%…m 请求的方法

%n: 来自另外一个模块的注解“Foobar”的内容

%o: Foobar的内容,应答的标头行

%…p: 服务器响应请求时使用的端口

%…P: 响应请求的子进程ID。

%…q 查询字符串(如果存在查询字符串,则包含“?”后面的

部分;否则,它是一个空字符串。)

%…r: 请求的第一行

%…s: 状态。对于进行内部重定向的请求,这是指*原来*请求

的状态。如果用%…>s,则是指后来的请求。

%…t: 以公共日志时间格式表示的时间(或称为标准英文格式)

%t: 以指定格式format表示的时间

%…T: 为响应请求而耗费的时间,以秒计

%…u: 远程用户(来自auth;如果返回状态(%s)是401则可能是伪造的)

%…U: 用户所请求的URL路径

%…v: 响应请求的服务器的ServerName

%…V: 依照UseCanonicalName设置得到的服务器名字

nginx日志字段解析:

$remote_addr, $http_x_forwarded_for 记录客户端IP地址
$remote_user 记录客户端用户名称
$request 记录请求的URL和HTTP协议
$status 记录请求状态
$body_bytes_sent 发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容。
$bytes_sent 发送给客户端的总字节数。
$connection 连接的序列号。
$connection_requests 当前通过一个连接获得的请求数量。
$msec 日志写入时间。单位为秒,精度是毫秒。
$pipe 如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”。
$http_referer 记录从哪个页面链接访问过来的
$http_user_agent 记录客户端浏览器相关信息
$request_length 请求的长度(包括请求行,请求头和请求正文)。
$request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
$time_iso8601/local  本地/ISO8601标准格式下的本地时间。

如何分析网站日志?

为方便可读性,通常可以使用第三方分析工具来进行分析,如不使用第三方分析工具,或无法满足需求,可将原始数据进行简单处理即可在Excel中进行统计分析。以IIS服务器日志为例:

  1. 用文本编辑器删除 #Software: Microsoft Internet Information Services 7.5 #Version: 1.0 #Date: 2019-02-26 00:01:39 #Fields: ,但注意保留#Fields:之后的数据。
  2. 将内容中的,(英文状态逗号)号全部替换为空删除掉,注意是替换为空,不是替换为空格。
  3. 将内容中的空格替换为,(英文状态逗号),保存。
  4. 将文件扩展名改为.csv(Excel的一种逗号分割符的扩展名)。
  5. 打开修改好后的文件,此时程序会调用Excel程序来打开,打开后先不要做分析查询处理,直接将文件另存为xls或者xlsx格式。
  6. 至此已经完成,可以打开最终保存的文件进行处理,可在Excel中进行分组、查询、统计、排序等各种操作,相信用好一定能满足需求。
原文地址:https://www.cnblogs.com/li2019/p/12727420.html