
Estoy intentando que Nginx (que se ejecuta como controlador de ingreso de Kubernetes) inicie sesión en milisegundos en lugar de segundos. (Esto es para que podamos ingerir los registros en nuestro sistema Elasticsearch existente, que ya tiene otros sistemas iniciando sesión en ms)
Basado en estoentrada en el blogProbé lo siguiente en el contexto 'http':
map $host $request_time_ms {
default 'test';
}
log_by_lua_block {
ngx.var.request_time_ms = 'foo'
}
Y luego en mi cadena de registro:
'{...."duration_ms":"$request_time_ms",....}'
Pero el valor registrado es siempre el valor predeterminado de test
en lugar del esperado de foo
.
Al final debería terminar así:
ngx.var.request_time_ms = math.floor(tonumber(ngx.var.request_time) * 1000)
Pero solo estoy tratando de que la situación básica funcione primero.
¿Alguna idea de por qué esto no funciona? Es como si el log_by_lua_block
justo no estuviera funcionando.
Respuesta1
No puedo reproducir su situación en mi propio servidor (debo decir que no uso Kubernetes ni Docker para las pruebas). Para mí esta configuración funciona como se esperaba. Realmente parece que log_by_lua_block
no se está ejecutando en absoluto en su controlador de ingreso. Pero puede utilizar la siguiente solución para obtener el tiempo de solicitud en milisegundos en lugar de segundos:
map $request_time $request_time_ms {
~^0\.0*(\d+?)$ $1;
~(\d+)\.(\d+) $1$2;
}