Ведение журнала nginx: существует ли способ регистрировать время запроса в миллисекундах со времен Unix?
Я знаю о $msec
параметр ведения журнала, который дает время запроса в секундах с эпохи Unix с точностью до миллисекунды. Тем не менее, формат этого включает точку "." например, "1407233265.472", и это проблема для функции импорта, которую я использую для анализа файлов журнала.
Есть ли способ (параметр журнала или плагин), который позволит записывать время запроса в полных миллисекундах? например, "1407233265472". Я рад скомпилировать nginx по мере необходимости.
1 ответ
Есть 2 способа добиться этого. Первый грязный, и я не буду его рекомендовать - это самый быстрый способ:
if ($msec ~ "(.*)\.(.*)") {
set $epoch_millis = "$1$2"
}
Это намного чище, но требует lua:
set_by_lua_block $epoch_millis { return string.gsub(ngx.var.msec, "%.", "") }
тогда просто войдите $epoch_millis
Расширяя ответ Сирка, вы также можете использовать карту для преобразования из формата 10,3 миллисекунды в формат эпохи 13 цифр миллисекунд, который не имеет десятичной дроби.
map $msec $msec_no_decimal { ~(.*)\.(.*) $1$2; }
В частности, мне нужно было поместить эту карту в http { ... }
блок nginx.conf, потому что DataDog автоматически не анализирует формат 10.3, но анализирует 13-значный формат.
(для решения проблемы sanigo; nginx добавляет нули к десятичной дроби, так что это всегда будет преобразовывать в 13 цифр.)