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.
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.
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.
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:
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.
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). |
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';
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;
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;
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.
Para más información sobre cómo configurar logs avanzados y personalizados en Nginx, consulta la documentación oficial de Nginx.
Jorge García
Fullstack developer