Volver a la página principal
viernes 8 noviembre 2024
23

Cómo configurar logs avanzados y personalizados en Nginx

Nginx permite configurar registros (logs) avanzados y personalizados para capturar información detallada sobre las solicitudes y el rendimiento del servidor. Esta funcionalidad es clave para monitorear y optimizar aplicaciones web, ya que los logs personalizados permiten registrar solo la información relevante para los administradores, como tiempos de respuesta, encabezados específicos y más.

¿Qué son los logs personalizados en Nginx?

Los logs personalizados en Nginx permiten crear un formato de registro específico adaptado a las necesidades del sistema. A través de la directiva log_format, los usuarios pueden definir qué datos incluir en cada entrada de registro, como dirección IP del cliente, URL solicitada, tiempo de respuesta, y otros detalles específicos que pueden ayudar en la depuración y monitoreo.

Configuración básica de logs avanzados y personalizados en Nginx

Para personalizar los logs en Nginx, se utiliza la directiva log_format en el contexto http, donde se define el formato del log. Luego, se especifica el formato en la directiva access_log para el archivo de registro correspondiente.

Ejemplo de configuración de log personalizado

http {
    log_format formato_personalizado '$remote_addr - $remote_user [$time_local] "$request" '
                                     '$status $body_bytes_sent "$http_referer" '
                                     '"$http_user_agent" "$request_time" "$upstream_response_time"';

    server {
        listen 80;
        server_name ejemplo.com;

        access_log /var/log/nginx/ejemplo_access.log formato_personalizado;

        location / {
            root /var/www/ejemplo;
            index index.html;
        }
    }
}

En este ejemplo:

  • La directiva log_format define un formato de registro personalizado llamado formato_personalizado.
  • access_log especifica el archivo de destino (/var/log/nginx/ejemplo_access.log) y utiliza el formato personalizado para este servidor.
  • El log captura el IP del cliente, usuario, timestamp, la solicitud, estado de respuesta, bytes enviados, referencia, agente de usuario, tiempo de respuesta de la solicitud y tiempo de respuesta del servidor de respaldo.

Campos comunes en logs personalizados de Nginx

Variable Descripción
$remote_addr Dirección IP del cliente que realiza la solicitud.
$remote_user Nombre de usuario del cliente, si está autenticado.
$time_local Fecha y hora de la solicitud en formato local.
$request Solicitud completa, incluyendo método, URI y protocolo.
$status Código de estado HTTP de la respuesta.
$body_bytes_sent Número de bytes enviados en el cuerpo de la respuesta.
$http_referer Referente de la solicitud HTTP, si está presente.
$http_user_agent Cadena del agente de usuario (user agent) del cliente.
$request_time Tiempo total de procesamiento de la solicitud en segundos.
$upstream_response_time Tiempo que tomó el servidor de respaldo en responder (útil en balanceo de carga).

Ejemplos adicionales de logs personalizados

1. Log detallado para análisis de rendimiento:

Incluye tiempos de solicitud y de los servidores de respaldo.

log_format performance '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" $request_time $upstream_response_time';

2. Log de errores con variables adicionales:

Captura más detalles sobre la solicitud cuando ocurre un error.

log_format error_log '$remote_addr - $remote_user [$time_local] "$request" '
                        '$status $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" $request_time '
                        '"error"="$status"';
   access_log /var/log/nginx/error_log.log error_log;

3. Log para API con detalles del cuerpo de la solicitud:

Especialmente útil para monitorear el rendimiento de una API.

log_format api_logs '$remote_addr - $remote_user [$time_local] "$request" '
                       '$status $body_bytes_sent "$http_user_agent" '
                       '$request_time $upstream_response_time $request_body';
   access_log /var/log/nginx/api_access.log api_logs;

Filtrar logs de acceso

Es posible registrar solo ciertas solicitudes mediante el uso de condiciones, filtrando por IP, estado de respuesta, entre otros.

access_log /var/log/nginx/access.log formato_personalizado if=$condition;

Donde $condition puede ser, por ejemplo, una IP específica o un código de estado.

Referencias

Para más información sobre cómo configurar logs avanzados y personalizados en Nginx, consulta la documentación oficial de Nginx.

Etiquetas:
nginx
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer