我正在尝试修改我的nginx访问日志格式以包含请求持续时间,以秒为单位。
我看到两个可能的变量:
但是这两个变量都以微秒表示,我需要在几秒钟内渲染这个值。有没有办法将输出指定为表达式(即$request_time * 1000
)或以其他方式完成此操作?
由于
答案 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" }
希望这有帮助。