nginx 日志记录:有没有办法记录自 Unix 纪元以来的请求时间(以毫秒为单位)?

nginx 日志记录:有没有办法记录自 Unix 纪元以来的请求时间(以毫秒为单位)?

我知道$msec日志参数它以毫秒为单位给出自 Unix 纪元以来的秒数作为请求时间。但是,它的格式包含句点“.”例如“1407233265.472”,这对我用来解析日志文件的导入函数来说是一个问题。

有没有办法(日志参数或插件)可以以总毫秒数记录请求时间?例如“1407233265472”。很高兴按要求编译 nginx。

答案1

有两种方法可以实现这一点。第一种方法比较粗糙,我不推荐它——但它是最快的方法:

if ($msec ~ "(.*)\.(.*)") {
    set $epoch_millis = "$1$2"
}

这更干净,但需要 lua:

set_by_lua_block $epoch_millis { return string.gsub(ngx.var.msec, "%.", "") }

然后只需记录$epoch_millis

答案2

扩展 Sirk 的答案,您还可以使用地图将 10.3 毫秒格式转换为没有小数的 13 位毫秒纪元格式。

map $msec $msec_no_decimal { ~(.*)\.(.*) $1$2; }

具体来说,我需要将此映射放在http { ... }nginx.conf 块内,因为 DataDog 不会自动解析 10.3 格式,但会解析 13 位数字格式。

(为了解决 sanigo 的顾虑;nginx 在小数点上填充了零,因此这将始终转换为 13 位数字。)

相关内容