Nginx、lls、Apache三种服务器的日志格式及其字段含义
1、Nginx日志格式及各字段含义
1.1 Nginx日志存放位置
在linux上,nginx的访问日志默认放在nginx的安装目录下的logs文件夹中,具体的位置可以查找nginx的配置文件nginx.conf查看
1.2 Nginx日志的格式
183.198.255.73 - - [16/Apr/2020:21:46:26 +0800] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36"
1.3 Nginx日志的字段含义
(1)183.198.255.73:代表着客户端的ip
(2)- -:日志中默认设置即为 - -
(3)[16/Apr/2020:21:46:26 +0800]:服务器完成请求处理的时间,格式:[日/月/年:时:分:秒 时区]
(4)GET / HTTP/1.1:请求方式/请求资源,协议GET / HTTP/1.1
(5)200:协议状态码
(6)612:服务器向客户端发送的字节数612
(7)-:记录从哪个页面链接访问来的(非页面访问则为-)
(8)Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36:客户浏览器信息(UA)
1.4 Nginx参数含义
(1)$remote_addr 与$http_x_forwarded_for 用以记录客户端的ip地址;
(2)$remote_user :用来记录客户端用户名称;
(3)$time_local : 用来记录访问时间与时区;
(4)$request : 用来记录请求的url与http协议;
(5)$status : 用来记录请求状态;成功是200,
(6)$body_bytes_s ent :记录发送给客户端文件主体内容大小;
(7)$http_referer :用来记录从那个页面链接访问过来的;
(8)$http_user_agent :记录客户端浏览器的相关信息;
2、lls的日志格式及各字段含义
2.1 lls日志存放位置
默认情况下,lls的日志存放在C:\WINDOWS\system32\LogFiles
2.2 lls日志的字段含义
#Software: Microsoft Internet Information Services 6.0
#Version: 1.0
#Date: 2020-04-10 07:18:44
#Fields: date time s-sitename s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status
2020-04-10 07:18:44 W3SVC219663584 192.168.1.2 GET /default.asp - 8003 - 192.168.1.2 Mozilla/5.0+(Windows+NT+5.2;+rv:52.0)+Gecko/20100101+Firefox/52.0 200 0 0
(1)#Software、#Version、#Date分别是服务器程序、版本、时间
(2)#Fields为日志内容各字段说明
(3)date:日期2020-04-10
(4)time:时间07:18:44
(5)s-sitename:服务器站点名称,用于区分同一服务器下的多个站点。W3SVC219663584
(6)s-ip:服务器ip,资源处理服务器ip,通常为服务器本机ip
(7)cs-method:请求方式GET
(8)cs-uri-stem:请求资源路径。 /default.asp
(9)cs-uri-query:访问的查询字符串,如果没有则是-
(10) s-port:端口号8003
(11) cs-username: 对于通过身份验证的用户,格式是“域\用户名”;对于匿名用户,是一个连字符 (-)。
(12)c-ip:客户端ip 192.168.1.2(自己访问自己)
(13)cs(User-Agent):浏览器信息 Mozilla/5.0+(Windows+NT+5.2;+rv:52.0)+Gecko/20100101+Firefox/52
(14) sc-status:状态码
(15)sc-substatus:HTTP子协议的状态 0
(16)sc-win32-status :Win32® 状态
当然还存在一些其他的字段:
- time-taken:花费时间,单位为毫秒。
- cs-version:协议版本。
- cs(Referer):请求来路,从哪个页面点击链接进入的该资源。通常如果存在该字段,可判断出搜索引擎与搜索词。
- sc-bytes:发送文件的大小,单位为字节。一般为所请求资源文件的大小。
- s-sitename:服务器站点名称,用于区分同一服务器下的多个站点。
- s-computername:服务器计算机名称。
- cs(Cookie):客户端请求Cookie。
- cs-host:客户端请求主机名。
3、Apache日志格式及各字段含义
3.1 Apache日志存放位置
如果Apache的安装方式是默认安装,服务器一运行就会有两个日志文件生成。这两个文件是access_log(在Windows上是 access.log)和error_log(在Windows上是error.log)。采用默认安装方式时,这些文件可以在/usr/local /apache/logs下找到;对于Windows系统,这些日志文件将保存在Apache安装目录的logs子目录。
3.2 Apache日志各字段含义
与IIS服务器格式略有不同,Apache服务器日志记录通常不包含字段说明。 默认情况下单条记录(一行)通常分为5部分。分别是:请求IP与时间、请求方式与内容、请求状态与大小、请求资源来路、请求代理字符串。
(1)请求IP与时间: 106.11.156.101 - - [27/Feb/2019:08:04:21 +0800] 请求客户端IP地址与时间,此时间记录包含时区标识,中间两个 - 分别为访问者的标识与身份验证,通常为空以-代替。
(2)请求方式与内容: GET /373.html HTTP/1.1 请求方式与请求资源绝对路径,之后为请求协议类型。
(3)请求状态与大小:200 4656 请求资源返回HTTP状态码与发送文件大小(字节)。
(4)请求资源来路: http://www.example.com/ 请求资源来路或资源引用来路。
(5)请求代理字符串: 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 用户代理字符串。
3.3 Apache定制日志格式
定制日志文件的格式涉及到两个指令,即LogFormat指令和CustomLog指令,默认httpd.conf文件提供了关于这两个指令的几个示例。
LogFormat指令定义格式并为格式指定一个名字,以后我们就可以直接引用这个名字。CustomLog指令设置日志文件,并指明日志文件所用的格式(通常通过格式的名字)。
LogFormat指令的功能是定义日志格式并为它指定一个名字。例如,在默认的httpd.conf文件中,我们可以找到下面这行代码:
LogFormat “%h %l %u %t \”%r\” %>s %b” common
该指令创建了一种名为“common”的日志格式,日志的格式在双引号包围的内容中指定。格式字符串中的每一个变量代表着一项特定的信息,这些信息按照格式串规定的次序写入到日志文件。
Apache文档已经给出了所有可用于格式串的变量及其含义,下面是其译文:
———————————————————————-
%…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设置得到的服务器名字
——————————————————————
在所有上面列出的变量中,“…”表示一个可选的条件。如果没有指定条件,则变量的值将以“-”取代。分析前面来自默认 httpd.conf文件的LogFormat指令示例,可以看出它创建了一种名为“common”的日志格式,其中包括:远程主机,远程登录名字,远程 用户,请求时间,请求的第一行代码,请求状态,以及发送的字节数。
有时候我们只想在日志中记录某些特定的、已定义的信息,这时就要用到“…”。如果在“%”和变量之间放入了一个或者多个HTTP状态代 码,则只有当请求返回的状态代码属于指定的状态代码之一时,变量所代表的内容才会被记录。例如,如果我们想要记录的是网站的所有无效链接,那么可以使用:
—————————————————-
LogFormat %404{Referer}i BrokenLinks
—————————————————
反之,如果我们想要记录那些状态代码不等于指定值的请求,只需加入一个“!”符号即可:
LogFormat %!200U SomethingWrong