在 Apache 请求进来时记录请求,而不是在他们完成时

Ben*_*lts 9 logging apache-2.2

我正在尝试诊断一个奇怪的服务器崩溃问题(服务器响应 ping,但在重新启动之前不会接受 SSH 连接。0% CPU),其中重新启动服务器使一切恢复正常。我想让我的 Apache 访问日志(或其他一些日志)包含所有在崩溃发生时发出的请求,但不幸的是,Apache 在请求完成之前不会记录请求。这意味着如果请求使服务器崩溃,该请求永远不会完成,因此不会出现在日志中。

有没有办法配置 Apache 来创建一个日志文件,该文件在请求到达时写入?

san*_*oid 15

我认为您需要取证日志,请参阅此链接:http : //httpd.apache.org/docs/current/mod/mod_log_forensic.html

片段:

取证日志格式:

每个请求被记录两次。第一次是在它被进一步处理之前(即在收到标题之后)。第二个日志条目是在请求处理之后在正常日志记录发生的同时写入的。

为了识别每个请求,分配了一个唯一的请求 ID。可以使用 %{forensic-id}n 格式字符串将此取证 ID 交叉记录在正常传输日志中。如果您使用的是 mod_unique_id,则将使用其生成的 ID。

第一行记录取证 ID、请求行和所有接收到的标头,以管道字符 (|) 分隔。示例行如下所示(全部在一行中):

+yQtJf8CoAB4AAFNXBIEAAAAA|GET /manual/de/images/down.gif HTTP/1.1|Host:localhost%3a8080|User-Agent:Mozilla/5.0 (X11; U; Linux i686; en-US; rv%3a1.6) Gecko /20040216 Firefox/0.8|接受:图像/png等...

开头的加号表示这是此请求的第一个日志行。第二行只包含一个减号和 ID:

-yQtJf8CoAB4AAFNXBIEAAAAA

check_forensic 脚本将日志文件的名称作为其参数。它会查找那些 +/- ID 对,并在请求未完成时进行投诉。