Rotação de log no nginx

Rotação de log no nginx

Encontrei um exemplo de rotação de log no Nginxaqui

Mas um teste simples com:

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

produz um arquivo de log chamado access-http-.log. Estou usando o nginx 1.13.6 (com openresty).

Atualizar

Depois de muitos hacks e ajustes, criei o seguinte script logrotate para girar os diferentes arquivos de log que o nginx produz. Eu coloquei em /etc/logrotate. O problema restante é que os logs não giram diariamente (não tenho certeza do porquê no momento), mas logrotate -f <filename>produzem exatamente o resultado que desejo.

Uma observação interessante é que nginx -s reloadpode ser usado no lugar do USR1. Infelizmente, isso não é mencionado na página de registro do nginx, mas eu o encontrei (na página de manual do IIRC). Eu construo o openresty/nginx manualmente para incorporar os módulos extras necessários, para não receber vários extras que vêm na versão empacotada, como a manutenção do 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
}

Acho que isso será útil para qualquer pessoa com uma configuração grande do nginx servindo páginas da web e uma API. Eu mantenho o http separado, pois não sirvo páginas que não sejam https e isso mantém a porcaria do script infantil fora dos registros da minha página.

Responder1

Basta definir uma tarefa cron por um minuto até meia-noite para mover o arquivo de log e renomeá-lo com a data e, em seguida, enviar um sinal USR1 para o Nginx. Isso fará com que ele reabra os arquivos de log e crie um novo para o dia seguinte.

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

informação relacionada