Cómo configurar formatos de registro de errores y acceso personalizados en Nginx

Cómo configurar formatos de registro de errores y acceso personalizados en Nginx

El servidor Nginx HTTP. tiene una función de registro fenomenal que es altamente personalizable. En este artículo, explicaremos cómo configurar sus propios formatos para los registros de acceso y error para Nginx en Linux.

El objetivo de esta guía es ayudarlo a comprender cómo se generan los registros, a fin de configurar los registros personalizados. formatos de registro con fines de depuración, resolución de problemas o análisis de lo que se desarrolla dentro de su servidor web, así como aplicaciones web (como solicitudes de seguimiento).

Lea también. 4 Buen código abierto Herramientas de administración y monitoreo de registros para Linux

Este artículo consta de tres secciones que le ayudarán a configurar registros de acceso/error. y cómo habilitar el registro condicional en Nginx.

Configuración de registros de acceso en Nginx

En Nginx. todas las solicitudes del cliente al servidor se registran en el registro de acceso. en un formato específico usando el módulo ngx_http_log_module.

freestar.config.enabled_slots.push

T El archivo de registro predeterminado es log/access.log. (generalmente /var/log/nginx/access_log. en sistemas Linux) y el formato predeterminado para el registro es normalmente el combinado o principal. formato (esto puede variar de una distribución a otra).

La directiva access_log. (aplicable en http, servidor, ubicación, si está en ubicación y límite excepto contexto) se usa para configure el archivo de registro y la directiva log_format. (aplicable solo en el contexto http) se utiliza para configurar el formato de registro. El formato de registro se describe mediante variables comunes y variables que se generan solo en el momento en que se escribe un registro.

La sintaxis para configurar un formato de registro es:

log_format format_name ‘set_of_variables_to_define_format’;

y la sintaxis para configurar el registro de acceso es:

registro_acceso/ruta/a/archivo_registro nombre_formato; # forma más simple O access_log/path/to/log_file [formato [búfer = tamaño] [gzip [= nivel]] [flush = tiempo] [si = condición]];

El siguiente es un extracto del archivo de configuración predeterminado de Nginx /etc/nginx/nginx.conf. en CentOS 7.

/etc/nginx/nginx .conf http #formato de registro principal log_format main ‘$ remote_addr-$ remote_user [$ time_local] “$ request”‘ ‘$ status $ body_bytes_sent “$ http_referer”‘ ‘”$ http_user_agent” “$ http_x_fordered_for”‘; access_log/var/log/nginx/access.log;

Este formato de registro genera la siguiente entrada de registro.

127.0.0.1-dbmanager [20/Nov/2017: 18: 52: 17 +0000] “GET/HTTP/1.1” 401188 “-” ” Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv: 47.0) Gecko/20100101 Firefox/47.0 “

El siguiente es otro formato de registro útil que usamos para rastrear solicitudes a nuestras aplicaciones web usando algunas de las variables predeterminadas, lo más importante es que tiene el ID de solicitud y registra los detalles de la ubicación del cliente (país, código de país, región y ciudad).

/etc/nginx/nginx.conf log_format custom ‘$ remote_addr-$ remote_user [$ time_local]’ ‘” $ request “$ status $ body_bytes_sent ”” $ http_referer “” $ http_user_agent “”” $ http_x_fordered_for “$ request_id ” $ geoip_country_name $ geoip_country_code ” $ geoip_region_name $ geoip_city ‘;

Puede usarlo así:

access_log/var/log/nginx/access.log custom;

Esto producirá una entrada de registro con el siguiente aspecto.

153.78.107.192–[21/Nov/2017: 08: 45: 45 +0000] “POST/ngx_pagespeed_beacon? url = https% 3A% 2F % 2Fwww.example.com% 2Fads% 2Ffresh-oranges-1509260795 HTTP/2.0 “204 0″https://www.suasell.com/ads/fresh-oranges-1509260795 “” Mozilla/5.0 (X11; Ubuntu; Linux x86_64 ; rv: 47.0) Gecko/20100101 Firefox/47.0 “”-“a02b2dea9cf06344a25611c1d7ad72db Uganda UG Kampala Kampala

Puede especificar varios registros usando las directivas access_log. en el mismo nivel, aquí estamos usando más de un archivo de registro en el contexto http.

/etc/nginx/nginx.conf http ## formato de registro predeterminado log_format main ‘$ remote_addr-$ remote_user [$ time_local] “$ request”‘ ‘$ status $ body_bytes_sent “$ http_referer”‘ ‘”$ http_user_agent “” $ http_x_fordered_for “‘; ## seguimiento de solicitudes utilizando formato personalizado log_format custom ‘$ remote_addr-$ remote_user [$ time_local]’ ‘”$ request” $ status $ body_bytes_sent’ ‘”$ http_referer” “$ http_user_agent”‘ ‘”$ http_x_fordered_for” $ request_id’ ‘$ geoip_country_name $ geoip_country_code ” $ geoip_region_name $ geoip_city ‘; ## esto usa el formato de registro predeterminado access_log/var/log/nginx/access.log; ## esto usa nuestro formato de registro personalizado access_log/var/log/nginx/custom_log custom;

Los siguientes son ejemplos de configuraciones de registro más avanzadas, que son útiles para formatos de registro que contienen variables relacionadas con la compresión y para crear archivos de registro comprimidos:

access_log/var/log/nginx/custom_log custom buffer 32k; access_log/path/to/log.gz compresión gzip flush = 5m;

Configuración de registros de errores en Nginx

En caso de que Nginx. experimente algún problema técnico, registra la información relacionada con ellos en el registro de errores. Estos problemas se encuentran en diferentes niveles de gravedad: depuración. información. aviso. advertencia. error (este es el nivel predeterminado y funciona globalmente), crítico. alerta. o emerg.

El valor predeterminado El archivo de registro es log/error.log. pero normalmente se encuentra en /var/log/nginx/ en distribuciones de Linux. La directiva error_log. se usa para especificar el archivo de registro, y se puede usar en el contexto principal, http, correo, flujo, servidor, ubicación (en ese orden).

También debe tener en cuenta que:

  • Las configuraciones en el contexto principal siempre son heredadas por los niveles inferiores en el orden anterior.
  • y las configuraciones en los niveles inferiores anulan las configuraciones heredadas de los niveles superiores.

Puede configurar el registro de errores utilizando la siguiente sintaxis:

error_log/path/to/log_file log_level;

Por ejemplo:

error_log/var/log/nginx/error_log warn;

Esto le indicará a Nginx que registre todos los mensajes de tipo advertencia. y el nivel de registro más grave crítico. alerta. y emerg. mensajes.

En el siguiente ejemplo, los mensajes de los niveles crítico. alerta. y emerg. se registrarán .

error_log/var/www/example1.com/log/error_log crit;

Considere la configuración a continuación, aquí, hemos definido el registro de errores en diferentes niveles (en el contexto http y del servidor). En caso de error, el mensaje se escribe en un solo registro de errores, el más cercano al nivel donde ha aparecido el error.

/etc/nginx/nginx.conf http log_format compresión ‘$ remote_addr-$ remote_user [$ time_local] ” “$ request” $ status $ body_bytes_sent ” “$ http_referer” “$ http_user_agent” “$ gzip_ratio” ‘; error_log/var/log/nginx/error_log crit; servidor escuchar 80; nombre_servidor example1.com; # esto registra mensajes de error para example1.com solamente error_log/var/log/nginx/example1.error_log warn; … … servidor escuchar 80; nombre_servidor example2.com; # esto registra mensajes de error para example2.com solamente error_log/var/log/nginx/example1.error_log; …….

Si usa más de una directiva error_log. como en la configuración siguiente (mismo nivel), los mensajes se escriben en todos los registros especificados.

/etc/nginx/nginx. conf servidor escuchar 80; nombre_servidor example1.com; error_log/var/www/example1.com/log/error_log warn; error_log/var/log/nginx/example1.error_log crit; … …

Configuración del registro condicional en Nginx

En algunos casos, es posible que deseemos que Nginx realice un registro condicional de mensajes. No todos los mensajes tienen que ser registrados por Nginx, por lo tanto, podemos ignorar las entradas de registro insignificantes o menos importantes de nuestros registros de acceso para instancias particulares.

Podemos usar el módulo ngx_http_map_module. que crea variables cuyos valores dependen de valores de otras variables. Los parámetros dentro de un bloque de mapa (que deberían existir solo en el contenido http) especifican una asignación entre los valores de origen y resultantes.

Para este tipo de configuración, no se registrará una solicitud si la condición se evalúa como “0” o una cadena vacía. Este ejemplo excluye solicitudes con códigos de estado HTTP 2xx. y 3xx.

/etc/nginx/nginx.conf http map $ status $ condition ~ ^ [23 ] 0; predeterminado 1; servidor access_log/path/to/access.log personalizado if = $ condición;

Aquí hay otro ejemplo útil para depurar una aplicación web en una fase de desarrollo. Esto ignorará todos los mensajes y solo registrará la información de depuración.

/etc/nginx/nginx.conf http map $ info $ debuggable default 0; depurar 1; servidor …… .. registro_acceso/var/log/nginx/testapp_debug_access_log debug if = $ debuggable; #logs otras solicitudes access_log/var/log/nginx/testapp_access.log main; …….

Puede encontrar más información, incluido el inicio de sesión en syslog aquí.

¡Eso es todo por ahora! En esta guía, explicamos cómo configurar el formato de registro personalizado para los registros de acceso y error en Nginx. Utilice el formulario de comentarios a continuación para hacer preguntas o compartir sus pensamientos sobre este artículo.