|
|
51CTO旗下网站
|
|
移动端

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

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

作者:布加迪编译来源:51CTO|2020-03-09 08:00

【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】

【编辑推荐】

  1. 传说中的反向代理,Nginx+Apache软件配置Web服务器
  2. 你应该知道的 Apache 命令
  3. Apache中将HTTP重定向至HTTPS
  4. Java搭建Web服务器之Socket编程,理解 Apache、Tomcat
【责任编辑:武晓燕 TEL:(010)68476606】


点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

VMware NSX 入门到实战

VMware NSX 入门到实战

网络虚拟化革命性技术
共16章 | Cloud袁

190人订阅学习

消息队列Kafka运维实践攻略

消息队列Kafka运维实践攻略

入门级消息队列
共3章 | 独行侠梦

109人订阅学习

编程零基础,Scratch 开发小游戏

编程零基础,Scratch 开发小游戏

游戏化编程
共5章 | googlingman

45人订阅学习

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微