我试图诊断一个奇怪的服务器崩溃的问题( 服务器响应ping,但不会接受SSH连接,直到重新启动。0%的CPU )重新启动服务器的一切恢复正常。 我希望我的Apache访问日志(或者其他一些日志)包含发生崩溃时所做的所有请求,但不幸的是Apache不会在请求完成之前将其logging下来。 这意味着如果一个请求崩溃的服务器,该请求永远不会完成,因此不会出现在日志中。
有什么办法可以configurationApache来创build一个日志文件,当请求到达时被写入?
我想你需要什么取证日志,看这个链接: http : //httpd.apache.org/docs/current/mod/mod_log_forensic.html
片段:
法医日志格式:
每个请求都logging了两次。 第一次是在进一步处理之前(也就是在收到标题之后)。 第二个日志条目是在正常日志logging发生的同时,在请求处理之后写入的。
为了识别每个请求,分配一个唯一的请求ID。 这个取证ID可以使用%{forensic-id} n格式string在正常传输日志中进行交叉logging。 如果您使用的是mod_unique_id,则会使用其生成的ID。
第一行logging取证ID,请求行和所有收到的标题,由pipe道字符(|)分隔。 示例行如下所示(全部在一行上):
+ 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 |接受:image / png等…
开始处的加号表示这是此请求的第一个日志行。 第二行只是包含一个减号字符和ID:
-yQtJf8CoAB4AAFNXBIEAAAAA
check_forensic脚本使用日志文件的名称作为参数。 它寻找那些+/- ID对,并抱怨如果请求没有完成。
Sandroid的答案是适合你的问题,但你也应该考虑运行networking数据包捕获。 如果您有资源,在交换机中镜像端口,并使用另一台运行WireShark的机器来logging所有IPstream量可能真的有帮助。 如果有东西将服务器取出,而非HTTP服务没有响应,那么它可能会在坏的数据到达Apache之前取出IP堆栈。
如果可以确保运行捕获的计算机具有不同的networking硬件和/或驱动程序。 会吸一两个价格的一个。 😉