如何分析和解读Apache Webserver日志?

译文
服务器
Apache Web服务器会生成很多日志。这些日志含有诸多信息,比如Apache处理和响应的HTTP请求以及Apache特有的其他活动。分析日志是管理Apache并确保其按预期运行的重要环节。

【51CTO.com快译】Apache Web服务器会生成很多日志。这些日志含有诸多信息,比如Apache处理和响应的HTTP请求以及Apache特有的其他活动。分析日志是管理Apache并确保其按预期运行的重要环节。

本文将介绍Apache中的各个日志选项以及如何解释该日志数据。你将学到如何分析Apache生成的日志以及如何配置日志设置,为你提供最精准的数据,以表明Apache执行的操作。

在本教程中你将学到:

  • 配置和了解Apache Web服务器日志
  • Apache日志级别是什么?
  • 如何解释Apache日志格式及其含义?
  • 最常见的Apache日志配置文件是什么?
  • 如何扩展日志配置以包含取证分析数据?

图1

软件需求和使用的惯例

        软件需求和Linux命令行惯例

类别

需求、使用的惯例或软件版本

系统

UbuntuDebianCentOSRHELFedora

软件

Apache Webserver

其他

作为root用户或通过sudo命令对Linux系统享有特权访问

惯例

#-需要给定的linux命令在拥有root特权的情况下执行,或直接作为root用户,或使用sudo命令

$-需要给定的Linux命令以普通的非特权用户来执行

Apache日志文件及其位置

Apache生成两个不同的日志文件:

  • access.log存储有关所有连接到Apache的入站请求的信息。每当用户访问你的网站,它会被记录在这里。用户请求的每个页面也会作为单独的条目被记入日志。
  • error.log存储有关Apache在整个操作过程中遇到的错误的信息。理想情况下,该文件里面应比较空。

图2. Ubuntu Linux服务器上的Apache默认日志配置

日志文件的位置可能取决于你运行的Apache版本以及使用的Linux发行版。还可以配置Apache,将这些文件存储在另外某个非默认位置。

不过默认情况下,你应该能够在这其中一个目录找到访问和错误日​​志:

  • /var/log/apache/
  • /var/log/apache2/
  • /etc/httpd/logs/

Apache日志格式

Apache让你可以定制记录哪些信息以及如何显示每个日志条目,我们在后面会介绍。

Apache用于显示日志条目的通常格式为:

  1. "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" 

下面解释一下这种格式:

  • %h–客户端的IP地址。
  • %l–这是客户端上的“identd”,用于识别其身份。该字段通常为空,显示为连字符。
  • %u–客户端的用户ID,如果使用HTTP身份验证。如果未使用,日志条目不会显示该字段的任何内容。
  • %t–日志条目的时间戳。
  • \%r\–客户端的请求行。这将显示使用了什么HTTP方法(比如GET或POST)、请求了什么文件以及使用了什么HTTP协议。
  • %>s–返回给客户端的状态代码。代码4xx(比如404,页面未找到)表明客户端错误,代码5xx(比如500,内部服务器错误)表明服务器错误。其他数字表明成功(比如200,OK)或重定向之类的信息(比如301,已永久移除)。
  • %O–请求的文件大小(包括报头),以字节为单位。
  • \"%{Referer}i\"–引用链接,如果适用。这告诉你用户如何导航到你的页面(从内部或外部链接访问)。
  • \"%{User-Agent}i\"–这包含有关连接客户端的Web浏览器和操作系统的信息。

访问日志中的典型条目如下所示:

  1. 10.10.220.3 - - [17/Dec/2019:23:05:32 -0500] "GET /products/index.php HTTP/1.1" 200 5015 "http://example.com/products/index.php" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36" 

错误日志较简单直观、易于理解。这是典型条目的样子:

  1. [Mon Dec 16 06:29:16.613789 2019] [php7:error] [pid 2095] [client 10.10.244.61:24145] script '/var/www/html/settings.php' not found or unable to stat 

这是查看访客遇到多少404错误的好方法,可以帮助你找到你网站上的一些无效链接。更重要的是,它可以提醒你资源缺失或潜在的服务器问题。上面的示例显示了被请求但缺失的* .php页面。

Apache日志配置

Apache的日志可灵活定制,可通过几个配置文件进行调整。在Ubuntu和Debian上,Apache日志的主配置文件位于此处:

  • /etc/apache2/apache2.conf

由于你可以从单单一个Apache实例运行多个网站(名为虚拟主机),还可以配置每个网站,拥有单独的访问和错误日​​志。想定义应如何命名这些单独的日志文件以及保存在何处,请配置该文件:

  • /etc/apache2/sites-available/000-default.conf

在CentOS、RHEL和Fedora上,这两个配置文件分别位于此处:

  • /etc/httpd/conf/httpd.conf
  • /etc/httpd/conf.d/(将另外的VirtualHost配置放在该目录中)

日志指令

这些文件中有好几个可以配置的指令,但如果你希望定制Apache的日志,应关注这几个主要指令:

  • CustomLog–定义访问日志文件的存储位置。
  • ErrorLog–定义错误日志文件的存储位置。
  • LogLeve –定义事件有多严重才能被记入日志(下面有详细介绍)。
  • LogFormat–定义访问日志中每个条目的格式(下面有详细介绍)。

LogLevel默认设置为warn,这意味着它遇到警告情况或更严重的事件时写入错误日志。如果错误日志中充斥着大量无害的警告消息,可以将级别提高到error,那样只报告错误或更严重的问题。

其他选项包括(按严重性排序)crit、alert和emerg。Apache建议使用至少crit的级别。出于调试目的,你可以临时将LogLevel设置为debug,但要注意:最后错误日志中可能会出现大量条目。

LogFormat让你可以调整访问日志中条目的样子。如果你觉得access.log中的示例条目(来自上述的Apache日志格式部分)有些令人困惑,不必意外。Apache让你可以定制日志条目的格式,以便更合理地进行设置。还可以使用该定制来排除可能不相关的某些信息。

Apache日志模块

到目前为止,我们在本文中显示的日志配置与mod_log_config Apache模块有关。想进一步扩展日志功能,你可以将其他日志模块加载到Apache中。这可以提供默认设置所无法提供的更多功能。

mod_log_forensic在请求(首次收到报头时)之前开始记入日志,请求之后再次记入日志。这意味着为每个请求创建两个日志条目,从而使管理员可以更精确地测量响应时间。

使用CustomLog指令定义取证分析日志的位置。比如:

  1. CustomLog ${APACHE_LOG_DIR}/forensic.log forensic 

mod_logio将每个请求发送和收到的字节数量记入日志。它提供了非常准确的信息,因为它还计数每个请求的报头和正文中的数据,以及SSL/TLS加密连接所需的额外数据。

将%I和O%占位符添加到LogFormat指令的后面,以便可以使用该模块提供的额外数据。还有其他模块,这仅仅是两个最有用的模块。

结束语

本文介绍了如何分析和解释Apache的访问和错误日志。还介绍了如何在Apache的配置文件中定制日志,让日志数据更精准。掌握了这些知识,你就能更快速地隔离问题,排查Apache的问题。

切记,Apache的日志功能可通过其他日志模块来进一步增强,不过这只有在需要高级调试的个别情况下才有必要。

原文标题:How to analyze and interpret Apache Webserver Log,作者:Korbin Brown

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

 

责任编辑:武晓燕 来源: 51CTO
相关推荐

2013-11-01 10:43:35

日志分析Awstats实战Apache

2015-08-03 15:48:22

Linux日志

2013-07-24 14:06:48

2023-03-15 07:29:54

开源数据湖

2014-09-18 14:56:34

CentOSSARG

2010-07-27 16:22:14

NFS Server

2014-12-15 09:59:28

LinuxApache

2010-02-06 14:35:44

Linux apach

2018-11-26 08:40:43

2016-10-24 09:37:51

系统日志日志分析

2010-09-27 13:51:23

接口IP地址故障

2015-09-25 11:03:14

数据中心日志分析

2022-07-20 11:47:18

数据

2010-07-22 13:05:52

telnet smtp

2021-04-12 07:03:10

轻量级模块化框架

2011-11-21 15:35:49

日志分析

2017-02-14 08:36:56

2010-07-27 16:44:15

2023-02-16 09:52:46

journalctlsystemdLinux

2010-08-02 12:18:12

ADSL拨号错误代码
点赞
收藏

51CTO技术栈公众号