我知道$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 位数字。)