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