【问题标题】:Sub second request time logging in ApacheApache中的亚秒请求时间记录
【发布时间】:2016-11-15 00:27:17
【问题描述】:

虽然我可以获得处理请求所需时间的微秒分辨率 (%D) 以帮助重建请求序列,但我想查看与特定页面生成的多个请求的时间相关的这一点。但是据我所知, %t 说明符仅提供最接近秒的精度。这使得重建原始事件序列变得不可能。

还有其他方法可以在我的 access_log 文件中获取此信息吗?

TIA

【问题讨论】:

    标签: apache


    【解决方案1】:

    现在可以使用 Apache 2.4。例如,使用以下日志格式代替 %t:

    [%{%d/%b/%Y:%H:%M:%S}t.%{msec_frac}t %{%z}t]
    

    这将给出类似[10/Apr/2012:10:47:22.027 +0000]的时间

    【讨论】:

      【解决方案2】:

      很遗憾,没有。不久前 (How to timestamp request logs with millisecond accuracy in Apache 2.0) 对此进行了讨论,对于最新的稳定 (2.2.x) Apache 分支仍然如此。

      不过,如果您有兴趣,我知道至少有一种解决方法:您可以将 Apache 的日志通过管道传输到外部进程(参见 http://httpd.apache.org/docs/current/mod/mod_log_config.html 的文档页面,在“CustomLog”指令下),这将添加时间戳和实际写入日志文件。

      请注意,此方法不会捕获真正的请求 RX 时间。 Apache 在完成发送响应之前不会输出访问日志条目。另外,当 Apache 写入管道并且您的时间戳从管道中读取时,还有一个额外的可变延迟(可能包括一些缓冲)。如果你打开了 Apache 的“BufferLogs”指令,就会有更多的可变缓冲延迟。当系统处于负载状态时,也许在其他边缘情况下,平均延迟很容易增长到一秒或更多。

      如果延迟不太严重(即“BufferedLogs off”,系统负载低),您可以通过从外部时间戳中减去“%D”值来获得非常精确的估计。

      有些人(包括我)将 Apache 的访问日志通过管道传输到本地 Syslog 守护程序(通过“logger”命令或其他方式)。 syslog 守护进程负责处理时间戳等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-29
        相关资源
        最近更新 更多