阿帕奇--为网络提供动力的技术。我不确定这句话是否正确,但我认为,如果没有它,我们就不会看到世界范围内目前的网络形态。它于1995年推出,自1996年4月以来,一直是全世界最受欢迎的网络服务器。
因为处理你的用户的请求,Apache充当了前台的应用。了解你的服务器在做什么,用户在访问什么文件,他们从哪里来,以及更多更多的事情,是至关重要的。
Apache日志给你带来的可见性对于了解进入你的应用程序的流量、发生的错误以及面向用户的元素的性能是非常宝贵的。今天,我们将研究什么是Apache网络服务器的日志,如何解释它们,以及如何轻松地分析它们。
什么是Apache日志?
Apache日志是包含Apache服务器正在做的所有信息的文本文件。它们提供了关于哪些资源被访问、何时被访问、谁访问了它们以及与此相关的指标的洞察力。它们还包括有关发生的错误、资源映射过程、连接的最终解决等信息,还有很多很多。
一般来说,整个Apache日志记录过程分为多个阶段。首先,你需要将日志存储在某个地方,用于历史分析的目的。其次,你需要分析日志并解析它们 ,以检索有用的信息和指标。最后,你可能想把数据绘制成图表,因为对于人类来说,可视化的表述更容易分析和理解。
什么是Apache访问日志?
Apache访问日志是包括Apache服务器处理的所有请求信息的文本文件。你可以期望找到诸如请求的时间、被请求的资源、响应代码、响应时间以及用于请求数据的IP地址等信息。
阿帕奇访问日志的位置
Apache服务器访问日志的位置根据你所使用的操作系统不同而不同。
- 在Red Hat、CentOS或Fedora Linux上**,**访问日志默认可以在
/var/log/httpd/access_log
中找到。 - 在Debian和Ubuntu上**,**你可以期望在
/var/log/apache2/access.log
中找到Apache的日志。 - FreeBSD会把Apache服务器的访问日志存储在
/var/log/httpd-access.log
文件中。
你可以使用CustomLog指令来配置它的位置,比如说。
CustomLog "/var/log/httpd-access.log"
Apache访问日志格式配置
在了解不同的日志格式之前,我们先来讨论一下Apache HTTP在格式化方面能做什么。有两种最常见的访问日志类型,你可以使用,Apache服务器会将其翻译成有意义的信息。
- 普通日志格式
- 合并日志格式
日志格式化指令是与LogFormat选项结合使用的。
LogFormat "%t %h %m \"%r\"" custom
上面一行告诉我们应该使用"%t %h %m\"%r\""格式,并分配给一个叫做custom的别名。之后,我们就可以在定义Apache日志时使用这个自定义别名。比如说。
CustomLog "logs/my_custom_log" custom
上面的部分将告诉Apache在logs/my_custom_log文件中写日志,格式由自定义别名定义。上述配置将导致日志的产生。
- 由于**%t**指令,请求的时间。
- 远程主机名,感谢**%h**指令。
- HTTP方法,因为**%m**指令。
- 由于**%r**指令,请求的第一行被双引号所包围。
当然,还有更多的指令可以使用,完整的列表可以在Apache服务器的mod_log_config文档中找到。
通用日志格式
Apache通用日志格式是HTTP服务器使用的两种最常见的日志格式之一。你可以期望看到它的定义与下面一行相似。
LogFormat "%h %l %u %t \"%r\" %>s %b" common
下面是该日志文件的访问日志的模样。
10.1.2.3 - rehg [10/Nov/2021:19:22:12 -0000] "GET /sematext.png HTTP/1.1" 200 3423
正如你所看到的,以下元素是存在的。
- %h,解析为10.1.2.3- 提出请求的远程主机的IP地址。
- %l,identd提供的远程日志名称,在我们的例子中,提供了一个连字符,这是一个我们可以期望在日志指令提供的信息没有找到或不能被访问的情况下被记录的值。
- %u,解析为rehg,由HTTP认证确定的用户标识。
- %t,请求的日期和时间以及时区,在上述情况下,它是**[10/Nov/2021:19:22:12 -0000]**
- \%r\",双引号内的请求的第一行,在上述情况下,它是:"GET /sematext.png HTTP/1.1"
- %>s,报告给客户端的状态代码。这个信息很关键,因为它决定了请求是否成功。
- %b,发送给客户端的对象的大小,在我们的例子中,该对象是sematext.png文件,其大小为3423字节。
合并日志格式
Apache组合日志格式是另一种经常用于访问日志的格式。它与通用日志格式非常相似,但包括两个额外的标题--引用者和用户代理。它的定义看起来如下。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
而由上述日志行产生的示例日志行看起来是这样的。
10.1.2.3 - grah [12/Nov/2021:14:25:32 -0000] "GET /sematext.png HTTP/1.1" 200 3423 "http://www.sematext.com/index.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.74 Safari/537.36 Edg/79.0.309.43"
自定义日志格式
在谈到Apache服务器的日志配置时,还有一件事我们应该讨论一下--CustomLog指令。我们已经看到了那个配置指令,但让我们更详细地讨论一下。
多个访问日志
可以在同一时间拥有多个Apache访问日志,而不需要任何额外的努力。我们可能想在一些文件中获得有限的信息,以便快速扫描,如果我们需要完整的信息,可以使用组合日志格式的完整日志。例如,我们可以有三个访问日志文件--一个包括时间、用户代理和状态代码,第二个包括时间、IP地址和使用的推荐人,第三个--通用日志格式。
要做到这一点,我们需要在我们的配置文件中包含多个CustomLog部分。
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/agent_log "%t %{User-agent}i %>s"
CustomLog logs/referer_log "%t %h %{Referer}i"
CustomLog logs/access_log common
你可以看到,这次我们没有使用三个单独的LogFormat配置选项,而是在CustomLog格式行中指定了apache的日志格式。当日志行的格式只在该给定文件中使用时,这也是可能的,而且非常方便。
条件性日志
有些情况下,你想只在满足某个条件的情况下写日志。这就是Apache服务器所说的条件性日志。它是通过使用CustomLog指令和环境变量来实现的。例如,如果你想在一个单独的文件中记录所有访问PNG文件的请求,你可以通过以下方式实现。
SetEnvIf Request_URI \.png$ png-image-log
CustomLog "png-access.log" common env=png-image-log
日志轮换和管道式日志
根据日志配置和你的Apache服务器所处理的流量,日志记录可以是广泛的。你保留在机器上的所有日志都会占用空间,如果你没有使用像Sematext Logs这样的日志集中化解决方案,你将不得不处理空间和管理日志的问题。
我们先来谈谈日志轮换。日志轮换是一个创建新的日志文件的过程,Apache HTTP服务器将开始写入该文件,并重命名旧的日志文件,因此它不再被更新。日志轮换发生在你优雅地重新启动服务器的时候。这意味着,在没有任何形式的客户请求处理中断的情况下,一个新的日志文件被创建。在生产环境中,你会希望重新启动Apache服务器。
这就是为什么Apache服务器支持管道式日志。你可以使用管道日志将日志事件发送到一个不同的应用程序,该程序将处理日志,例如rotatelogs,而不是将日志事件写入文件。
CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/access.log 86400" common
rotatelogs应用程序是Apache服务器自带的,它能够在不需要重新启动服务器的情况下轮换日志。上面的例子将导致每24小时轮换一次**/var/log/access.log**文件。
如何阅读Apache访问日志
Apache服务器访问日志只是简单的文本文件。它们可以被任何可以读取此类文件的工具轻松打开。在基于Linux的系统中,如果你想监视日志行,可以用cat命令行工具或tail。
不过,有两点需要注意。第一个是访问策略。你可能没有访问运行Apache HTTP服务器的机器的权限,即使你有,你也可能没有对适当的日志目录的读取权限。第二是分布。有多个Apache服务器分布在多个数据中心的情况并不少见。在这种情况下,使用专门的观察工具(如Sematext Logs)会更容易,它不仅可以提供查看原始文件的选项,还可以将信息汇总到为它们得出的关键指标。
了解Apache访问日志
我们的Apache访问日志文件很容易阅读,也不难理解。只要记住你在配置中使用的模式就可以了。我们已经介绍了你在Apache日志文件中可能遇到的常见模式。请记住,有了日志分析工具,理解日志文件就更容易了,这些工具可以为你做解析,给你一个更容易理解的数据汇总视图。
什么是Apache错误日志?
到目前为止,我们已经谈到了Apache的访问日志,它为我们提供了有关访问资源的信息。但这并不是我们唯一应该关心的事情。我们还应该关心与错误有关的一切。事实上,错误日志是Apache HTTP服务器中最重要的日志文件。
Apache的错误日志是处理请求过程中发生的所有错误的地方。不过最重要的是,错误日志将包含Apache服务器启动过程中出错的信息,而且很可能还包含如何修复问题的提示。
阿帕奇错误日志的位置
Apache错误日志的存储位置因其运行的操作系统不同而不同。
- 在Red Hat、CentOS或Fedora Linux上**,**默认情况下可以在
/var/log/httpd/error_log
中找到访问日志。 - 在Debian和Ubuntu上**,**你可以期望在下面找到Apache的日志
/var/log/apache2/error.log
- FreeBSD会把Apache服务器的访问日志放在
/var/log/httpd-error.log
文件中。
你可以使用ErrorLog指令来配置它的位置,比如说。
ErrorLog "/var/log/httpd-error.log"
Apache错误日志格式配置
与Apache访问日志类似,您可以调整错误日志的格式。Apache错误日志的格式是通过使用ErrorLogFormat元素来配置的,例如。
ErrorLogFormat "[%{u}t] [%-m:%l] [pid %P:tid %T] [client %a] %M"
上述配置会产生一个类似于以下的Apache错误日志条目。
[Wed Nov 10 10:21:23.811033 2021] [core:error] [pid 22308:tid 3212342123] [client 10.1.2.3] File does not exist: /usr/local/apache2/htdocs/favicon.ico
在上面的例子中,使用了以下格式化选项。
- %{u}t- 当前时间,包括微秒。
- %-m- 产生错误的模块。
- %l- 日志事件的级别。
- %P- 进程标识符。
- %T- 线程标识符。
- %M- 实际的日志信息。
关于可用的格式化选项的完整描述可以在Apache服务器的官方文档中找到。
日志级别
除了我们到目前为止所讨论的,还有一件事值得一提--日志事件的级别。LogLevel指令允许在每个模块的基础上指定日志信息的级别。例如,如果我们想把所有事件的主日志级别设置为信息级别,但只为重写模块设置错误级别,我们可以有一个如下的配置指令。
LogLevel info rewrite:error
以下是Apache服务器文档中描述的日志级别。
- emerg
- 警报
- 批评
- 错误
- 警告
- 通知
- 信息
- 调试
- trace1 - trace8
emerg是说系统不稳定的日志事件,而trace级别是用于非常低级的信息记录,你可能可以跳过。
如何查看Apache错误日志
查看Apache服务器的错误日志就像打开文本文件一样简单。错误日志与访问日志没有区别,所以它们只是简单的文本文件。你可以使用任何你想要的工具来查看它们。但请记住,查看分布在多个数据中心的多个Apache服务器的日志可能是一个挑战。这就是为什么我们强烈建议使用日志聚合工具,如Sematext Logs,来完成这项工作。
使用Sematext的Apache日志文件管理和分析
Sematext Cloud Logs - Apache概述
了解和分析你的Apache服务器日志从来没有像Sematext Logs那样简单。你唯一需要做的就是在Sematext创建一个账户,创建Apache Logs应用程序并安装Sematext代理。你将被引导完成为你的日志设置自动发现日志的过程。您的日志将被解析并发送到Sematext Logs,让您访问各种为您的Apache HTTP服务器量身定制的预建报告。
Sematext Logs - Apache HTTP信息
Sematext Logs是Sematext Cloud全栈监控解决方案的一部分,为你提供所有你需要的观察能力。通过Sematext Cloud,你可以看到你的Apache服务器的概况,错误报告,HTTP报告,包括顶级HTTP方法和路径的平均响应大小的可视化和请求表。你可以看到你的用户,包括用于访问由你的Apache服务器提供的资源的顶级用户代理,最后是数据的来源。所有这些都在Sematext Cloud的单一Apache日志监控中。
总结
分析你的Apache服务器日志对于了解你的应用程序的流量,发生的错误,以及面向用户的元素的性能是非常有价值的。像Sematext Logs这样的日志管理工具可以为你做这项工作。
比了解服务器日志更重要的是,了解哪些资源被访问,谁访问了它们,以及处理请求花了多长时间,对了解用户的行为至关重要。你还需要确保你了解每一个发生的错误,以便你能尽快做出反应。再加上分布式基础设施需要处理大量的并发用户并提供高可用性,使用可观察性工具是必要的。
把Apache的指标和日志放在同一个地方,能够对它们进行切分,在问题出现时得到提醒,并对环境的每一个部分都有深入的了解,这不再是一件好事,而是必须拥有的。Sematext Cloud提供了所有这些以及更多,它是一个可观察性平台,有专门的Apache服务器日志和指标支持。构建时考虑到了简单性,不需要信用卡,没有什么能阻止你去尝试一下,看看它能如何改善你的日志管理和日志分析过程。
The postUnderstanding Apache Logging:如何查看、定位和分析访问和错误日志》首次出现在Sematext上。