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

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

Но простой тест с: set $date "2018-08-24"; access_log /home/tim/log/access-http-$date.log default;

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

Обновить

После долгих взломов и подстройки я придумал следующий скрипт 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, и это не позволяет скриптовому детскому дерьму попадать в логи моей страницы.

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)
Другие вопросы по тегам