Ведение журнала 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 цифр.)

Другие вопросы по тегам