Cómo configurar los formatos de registro de acceso y acceso personalizado en Nginx

Cómo configurar los formatos de registro de acceso y acceso personalizado en Nginx

Nginx http El servidor tiene una instalación de registro fenomenal que es altamente personalizable. En este artículo, explicaremos cómo configurar sus propios formatos para el acceso y los registros de errores 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 formatos de registro personalizados para la depuración, la solución de problemas o el análisis de lo que se desarrolla dentro de su servidor web, así como aplicaciones web (como solicitudes de rastreo).

Leer también: 4 Buenas herramientas de administración de registro de código abierto para Linux para Linux

Este artículo está hecho de tres secciones que le iluminarán sobre la configuración Registros de acceso/error y cómo habilitar el registro condicional en Nginx.

Configuración de registros de acceso en nginx

Bajo Nginx, Todas las solicitudes del cliente al servidor se reciben en el registro de acceso en un formato especificado utilizando el ngx_http_log_module módulo.

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

El access_log La directiva (aplicable en el http, servidor, ubicación, si está en ubicación y límite, excepto el contexto) se utiliza para establecer el archivo de registro y el Log_format La directiva (aplicable solo en el contexto HTTP) se usa para establecer 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_variebles_to_define_format'; 

y la sintaxis para configurar el registro de acceso es:

access_log/path/a/log_file format_name; #Simplest Form o access_log/path/a/log_file [format [buffer = size] [gzip [= nivel]] [flush = time] [if = condición]]; 

El siguiente es un extracto del archivo de configuración NGINX predeterminado /etc/nginx/nginx.confusión en Centos 7.

/etc/nginx/nginx.confusión
http #Main Log Format log_format Main '$ Remote_addr - $ remoto_user [$ Time_local] "$ request" "$ status $ body_bytes_sent" $ http_referer "" "$ http_user_agent" "$ http_x_forced_for"; "; access_log/var/log/nginx/access.registro;  

Este formato de registro produce la siguiente entrada de registro.

127.0.0.1 - DBManager [20/nov/2017: 18: 52: 17 +0000] "Get/http/1.1 "401 188"-"" 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 utilizamos para rastrear solicitudes a nuestras aplicaciones web utilizando algunas de las variables predeterminadas, lo más importante es que tiene los detalles de ubicación del cliente de ID y registros de solicitudes (país, código de país, región y ciudad).

/etc/nginx/nginx.confusión
log_format custom '$remote_addr - $remote_user [$time_local]""$request" $status $body_bytes_sent""$http_referer" "$http_user_agent"""$http_x_forwarded_for" $request_id"$geoip_country_name $geoip_country_code"$geoip_region_name $geoip_city '; 

Puedes usarlo así:

access_log/var/log/nginx/access.Registro a la costumbre; 

Esto producirá una entrada de registro que aparece así.

153.78.107.192 - - [21/nov/2017: 08: 45: 45 +0000] "Post/ngx_pagespeed_beacon?url = https%3a%2f%2fwww.ejemplo.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 utilizando el access_log Directivas en el mismo nivel, aquí estamos utilizando más de un archivo de registro en el contexto HTTP.

/etc/nginx/nginx.confusión
http ## Formato de registro predeterminado log_format Main '$ Remote_addr - $ remoto_user [$ Time_local] "$ request" "$ status $ body_bytes_sent" $ http_referer "" "$ http_user_agent" "$ http_x_forced_for"; "; ## Solicitud de rastreo Uso de formato personalizado log_format Custom '$ Remote_addr - $ remoto_user [$ Time_local] "" $ request "$ status $ body_bytes_sent" "$ http_referer" $ http_user_agent "" $ http_x_forwarded_for "request_id" $ geoip_county_name_county_name $ geoip_region_name $ geoip_city '; ## Esto usa el formato de registro predeterminado access_log/var/log/nginx/access.registro; ## Esto utiliza nuestro formato de registro personalizado access_log/var/log/nginx/custom_log custom;  

Los siguientes son ejemplos de configuraciones de registro más avanzados, 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/rath/to/log.GZ Compresión GZIP FLUSH = 5M; 

Configuración de registros de errores en Nginx

En caso Nginx Experimenta cualquier falla, registra información sobre ellos en el registro de errores. Estos problemas caen en diferentes niveles de gravedad: depurar, información, aviso, advertir, error (Este es el nivel predeterminado y funciona a nivel mundial), crítico, alerta, o emerger.

El archivo de registro predeterminado es registro/error.registro, pero normalmente se encuentra en /var/log/nginx/ En distribuciones de Linux. El registro de errores La directiva se utiliza para especificar el archivo de registro, y se puede usar en el contexto principal, HTTP, correo, transmisión, servidor, ubicación (en ese orden).

También debe tener en cuenta que:

  • Las configuraciones en el contexto principal siempre son heredadas por niveles más bajos en el orden anterior.
  • y las configuraciones en los niveles más bajos 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 instruirá a Nginx que registre todos los mensajes de tipo advertir y nivel de registro más severo crítico, alerta, y emerger mensajes.

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

Error_log/var/www/ejemplo1.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 un 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.confusión
http log_format compresión '$ remoto_addr - $ remoto_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; SERVER_NAME Ejemplo1.com; #Esos Mensajes de errores de registro por ejemplo1.com solo error_log/var/log/nginx/ejemplo1.error_log warn;… servidor escuchar 80; SERVER_NAME Ejemplo2.com; #Este registra mensajes de errores por ejemplo2.com solo error_log/var/log/nginx/ejemplo1.registro de errores;… .  

Si usa más de uno registro de errores Directivas como en la configuración a continuación (mismo nivel), los mensajes se escriben en todos los registros especificados.

/etc/nginx/nginx.confusión
servidor escuchar 80; SERVER_NAME Ejemplo1.com; Error_log/var/www/ejemplo1.com/log/error_log warn; ERROR_LOG/VAR/LOG/NGINX/Ejemplo1.error_log crit;… 

Configuración de registro condicional en Nginx

En algunos casos, es posible que deseemos que NGINX realice el registro condicional de los mensajes. No todos los mensajes deben registrarse por Nginx, por lo tanto, podemos ignorar entradas de registro insignificantes o menos importantes de nuestros registros de acceso para casos particulares.

Podemos usar el ngx_http_map_module módulo que crea variables cuyos valores dependen de los valores de otras variables. Los parámetros dentro de un bloque de mapa (que solo debería existir 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 para "0" o una cadena vacía. Este ejemplo excluye las solicitudes con los códigos de estado HTTP 2xx y 3xx.

/etc/nginx/nginx.confusión
http map $ status $ condición ~^[23] 0; predeterminado 1;  servidor access_log/rath/to/access.Registro a Custom 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 registra información de depuración.

/etc/nginx/nginx.confusión
 http map $ info $ debuggable predeterminado 0; depuración 1;  servidor ... access_log/var/log/nginx/testApp_debug_access_log debug if = $ Debuggable; #logs otras solicitudes access_log/var/log/nginx/testApp_access.registro principal;… .  

Puede obtener más información, incluido el registro para syslog aquí.

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