Назад | Перейти на главную страницу

Ведение журнала nginx: есть ли способ записывать время запроса в миллисекундах с эпохи Unix?

Я знаю о $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 цифр.)