Rotación de registros en nginx

Rotación de registros en nginx

Encontré un ejemplo de cómo realizar una rotación de registros en Nginx.aquí

Pero una prueba simple con:

    set $date "2018-08-24";
    access_log /home/tim/log/access-http-$date.log default;

genera un archivo de registro llamado access-http-.log. Estoy usando nginx 1.13.6 (con openresty).

Actualizar

Después de mucho pirateo y ajustes, se me ocurrió el siguiente script logrotate para rotar los diferentes archivos de registro que produce nginx. Lo puse en /etc/logrotate. El problema restante es que los registros no rotan diariamente (no estoy seguro de por qué en este momento), pero logrotate -f <filename>produce exactamente el resultado que quiero.

Una nota interesante es que nginx -s reloadse puede utilizar en lugar de USR1. Desafortunadamente, no se hace referencia a eso en la página de registro de nginx, pero lo encontré (en la página de manual IIRC). Construyo openresty/nginx manualmente para incorporar los módulos adicionales que necesito para no obtener varios extras que vienen en la versión empaquetada como el mantenimiento de pid.

/path/to/log/access-http.log /path/to/log/access-https.log /path/to/log/api.log /path/to/log/error.log {
    daily
    missingok
    notifempty
    create 664 nobody tim
    dateext
    dateformat -%Y-%m-%d
    dateyesterday
    rotate 10
    su tim tim
    postrotate
        /usr/local/bin/openresty -s reload
    endscript
}

Supongo que esto será útil para cualquiera con una configuración nginx grande que sirva tanto para páginas web como para una API. Mantengo el http separado ya que no sirvo páginas que no sean https y mantiene los scripts infantiles fuera de los registros de mis páginas.

Respuesta1

Simplemente configure una tarea cron durante un minuto hasta la medianoche para mover el archivo de registro y cambiarle el nombre con la fecha y luego enviar una señal USR1 a Nginx. Esto hará que vuelva a abrir los archivos de registro y cree uno nuevo para el día siguiente.

59 23 * * * mv /var/log/nginx/access.log /var/log/nginx/$(date +%F).access.log && kill -USR1 $(cat /run/nginx.pid)

información relacionada