
Estou tentando fazer com que o Nginx (executando como um controlador de entrada do Kubernetes) faça login em milissegundos em vez de segundos. (Isso é para que possamos ingerir os logs em nosso sistema Elasticsearch existente, que já possui outros sistemas registrando em ms)
Com base nissopostagem no blogEu tentei o seguinte no contexto 'http':
map $host $request_time_ms {
default 'test';
}
log_by_lua_block {
ngx.var.request_time_ms = 'foo'
}
E então na minha string de log:
'{...."duration_ms":"$request_time_ms",....}'
Mas o valor registrado é sempre o valor padrão test
em vez do valor esperado de foo
.
No final das contas, deve acabar assim:
ngx.var.request_time_ms = math.floor(tonumber(ngx.var.request_time) * 1000)
Mas estou apenas tentando fazer com que a situação básica funcione primeiro.
Alguma idéia de por que isso não funciona? É como se o log_by_lua_block
just não estivesse funcionando.
Responder1
Não consigo reproduzir sua situação em meu próprio servidor (preciso dizer que não uso kubernetes ou docker para testes). Para mim, essa configuração funciona conforme o esperado. Realmente parece que log_by_lua_block
não está funcionando no seu controlador de entrada. Mas você pode usar a seguinte solução alternativa para obter o tempo de solicitação em milissegundos em vez de segundos:
map $request_time $request_time_ms {
~^0\.0*(\d+?)$ $1;
~(\d+)\.(\d+) $1$2;
}