Я знаю $msec
вход параметра, который дает время запроса как секунды с эпохи Unix с гранулярностью миллисекунды. Однако формат этого включает период '.', например, '1407233265.472', и это - проблема для функции импорта, которую я использую для парсинга файлов журнала.
Существует ли путь (параметр журнала или плагин), который позволит времени запроса быть зарегистрированным в общих миллисекундах? например, '1407233265472'. Радо скомпилировать nginx как требуется.
Для этого есть 2 способа. Первый грязный, и я не рекомендую его - хотя это самый быстрый способ:
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-значное число.)