将总请求时间(以秒为单位)写入nginx访问日志,可能使用计算变量

时间:2012-11-06 22:30:29

标签: nginx

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

我看到两个可能的变量:

1)$request_time

2)$upstream_response_time

但是这两个变量都以微秒表示,我需要在几秒钟内渲染这个值。有没有办法将输出指定为表达式(即$request_time * 1000)或以其他方式完成此操作?

由于

1 个答案:

答案 0 :(得分: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" }

希望这有帮助。