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

Я знаю $msec вход параметра, который дает время запроса как секунды с эпохи Unix с гранулярностью миллисекунды. Однако формат этого включает период '.', например, '1407233265.472', и это - проблема для функции импорта, которую я использую для парсинга файлов журнала.

Существует ли путь (параметр журнала или плагин), который позволит времени запроса быть зарегистрированным в общих миллисекундах? например, '1407233265472'. Радо скомпилировать nginx как требуется.

2
задан 6 August 2014 в 12:32
2 ответа

Для этого есть 2 способа. Первый грязный, и я не рекомендую его - хотя это самый быстрый способ:

if ($msec ~ "(.*)\.(.*)") {
    set $epoch_millis = "$1$2"
}

Это намного чище, но требует lua:

set_by_lua_block $epoch_millis { return string.gsub(ngx.var.msec, "%.", "") }

, затем просто зарегистрируйте $ epoch_millis

2
ответ дан 3 December 2019 в 11:41

Расширяя ответ Sirk, вы также можете использовать карту для преобразования из формата 10,3 миллисекунды в формат эпохи миллисекунды 13 цифр, который не имеет десятичной дроби.

map $msec $msec_no_decimal { ~(.*)\.(.*) $1$2; }

В частности, мне нужно было поместить эту карту в блок http {...} nginx.conf, потому что DataDog не выполняет автоматический синтаксический анализ формата 10.3, но анализирует 13-значный формат.

(для решения проблемы sanigo; nginx добавляет нули в десятичную дробь, так что это всегда будет преобразовано в 13-значное число.)

0
ответ дан 3 December 2019 в 11:41

Теги

Похожие вопросы