Ротация логов в nginx

Ротация логов в nginx

Я нашел пример ротации логов в Nginxздесь

Но простой тест:

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

создает файл журнала с именем access-http-.log. Я использую nginx 1.13.6 (с openresty).

Обновлять

После долгих хаков и доработок я придумал следующий скрипт logrotate для ротации различных файлов журнала, которые создает nginx. Я поместил его в /etc/logrotate. Оставшаяся проблема в том, что журналы не ротируются ежедневно (сейчас я не уверен, почему), но он logrotate -f <filename>выдает именно тот результат, который мне нужен.

Интересное замечание: его nginx -s reloadможно использовать вместо USR1. К сожалению, на странице ведения журнала nginx об этом нет ссылки, но я ее нашел (на странице руководства IIRC). Я вручную собираю openresty/nginx, чтобы включить дополнительные модули, которые мне нужны, поэтому я не получаю различные дополнения, которые идут в упакованной версии, например, сохранение 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
}

Я думаю, это будет полезно для тех, у кого большая конфигурация nginx, обслуживающая как веб-страницы, так и API. Я держу http отдельно, так как не обслуживаю не-https страницы, и это не дает хламу script kiddie попадать в мои журналы страниц.

решение1

Просто установите задачу cron на минуту до полуночи, чтобы переместить файл журнала и переименовать его с указанием даты, а затем отправьте сигнал USR1 в Nginx. Это заставит его повторно открыть файлы журнала и создать новый на следующий день.

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

Связанный контент