formato - ¿Cómo generar un registro JSON desde nginx?
json javascript (3)
Finalmente, parece que tenemos una buena forma de hacerlo con vanilla nginx sin ningún módulo. Solo defina:
log_format json_combined escape=json
''{''
''"time_local":"$time_local",''
''"remote_addr":"$remote_addr",''
''"remote_user":"$remote_user",''
''"request":"$request",''
''"status": "$status",''
''"body_bytes_sent":"$body_bytes_sent",''
''"request_time":"$request_time",''
''"http_referrer":"$http_referer",''
''"http_user_agent":"$http_user_agent"''
''}'';
Tenga en cuenta que escape = json se agregó en nginx 1.11.8. http://nginx.org/en/docs/http/ngx_http_log_module.html#log_format
Intento generar un registro JSON desde nginx.
Conozco soluciones como esta, pero algunos de los campos que deseo registrar incluyen entradas generadas por el usuario (como encabezados HTTP) que deben ser escapadas correctamente.
Soy consciente de las entradas de registro de nginx desde octubre de 2011 y mayo de 2008 que dicen:
*) Change: now the 0x7F-0x1F characters are escaped as /xXX in an
access_log.
*) Change: now the 0x00-0x1F, ''"'' and ''/' characters are escaped as /xXX
in an access_log.
pero esto todavía no ayuda, ya que /xXX
no es válido en una cadena JSON .
También he examinado el módulo HttpSetMiscModule que tiene una directiva set_quote_json_str
, pero parece que agrega /x22
a las cadenas, lo que no ayuda.
¿Alguna idea de otras soluciones para iniciar sesión en formato JSON desde nginx?
Puede intentar utilizar ese único https://github.com/jiaz/nginx-http-json-log - módulo de adición para Nginx.
Puedes intentar usar:
módulo de adición para Nginx nginx-http-json-log
Use cualquier idioma como se hace en nginx-json-logformat con el ejemplo /etc/nginx/conf.d/ json_log.conf
Una versión del módulo de estado de stip de Nginx HTTP que se genera en formato JSON
PD: el parámetro if (1.7.0) habilita el registro condicional . Una solicitud no se registrará si la condición se evalúa como "0" o una cadena vacía:
map $status $http_referer{
~/xXX 0;
default 1;
}
access_log /path/to/access.log combined if=$http_referer;
Es una buena idea utilizar una herramienta como https://github.com/zaach/jsonlint para verificar sus datos JSON. Puede probar el resultado de su nuevo formato de registro y asegurarse de que sea JSON real y correcto.