7

我正在尝试修改我的 nginx 访问日志格式以包括请求持续时间,以秒为单位。

我看到了两个可以使用的变量:

1)$request_time

2)$upstream_response_time

但是,这两个变量都以微秒为单位表示,我需要以秒为单位呈现此值。有没有办法将输出指定为表达式(即$request_time * 1000)或以其他方式完成?

谢谢

4

2 回答 2

11

网络服务器不是计算器或统计程序。它的日志功能是提供您可以用来进行分析的原始数据。如果您的分析程序无法将微秒转换为秒,您应该购买其他软件。无论如何,期望程序的日志记录功能为您执行单位转换是不现实的。日志记录的目标不是格式化,而是在不影响其核心功能性能的情况下记录它所做的事情。

于 2012-11-07T07:25:28.850 回答
1

如果您使用 LogStash(ELK 堆栈)之类的报告器,则可以在解析日志时进行一些计算。这是我在 Nginx 的 Logstash 过滤器中将秒转换为毫秒的示例:

grok {
      match => {
        "message" => "%{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] \"%{WORD:verb} %{URIPATHPARAM:logMessage} HTTP/%{NUMBER:httpversion}\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) (?:\"(?:%{URI:referrer}|-)\"|%{QS:referrer}) %{QS:agent} rt=%{NUMBER:duration_sec} cid=%{GREEDYDATA:correlationId}"
      }
}
mutate { convert => [ "duration_sec", "float" ] }
ruby { code => "event['duration_ms'] = event['duration_sec'].to_f * 1000" }

希望这可以帮助。

于 2016-02-10T09:02:49.040 回答