Я хотел бы добиться ротации логов nginx, которые:
- будет работать без какого-либо дополнительного программного обеспечения (то есть - лучше всего, если без "logrotate")
- будет создавать повернутые файлы с именами на основе даты
Наилучший подход - это что-то похожее на PostgreSQL - то есть в его конфигурационной переменной log_filename я могу указать strftime-style% Y-% m-% d, и он автоматически изменит дату в журнале (или время).
Другой подход от Apache - отправка логов по конвейеру в программу rotatelogs.
Насколько я мог искать - такого подхода не существует. Все, что я могу сделать, это использовать logrotate с опцией dateext, но у него есть свой собственный набор недостатков, и я бы предпочел использовать что-то, что работает как | rotatelogs или log_filename в PostgreSQL.
Ответы:
Хотя мир разделен на то, является ли скромная именованная труба другом или врагом, это, вероятно, самое простое решение вашей проблемы. У него есть несколько недостатков (в том смысле, что вам нужно создавать каналы заранее), но он устраняет необходимость в cron и позволяет вам использовать выбранный фильтр-логов.
Вот пример использования cronolog
access.log
:/var/log/nginx
, поэтому я тоже поставлю свои трубы. Имя зависит от вас; Я добавляю.fifo
, и этоaccess.log
, так что мой будет в/var/log/nginx/access.log.fifo
.Создайте именованный канал для файла журнала:
Сконфигурируйте так,
nginx.conf
чтобы указывать журнал на только что созданную вами трубу:Измените сценарий init.d, чтобы запустить ротатор журнала, прослушивающий канал перед тем, как мы запустим сервер:
Аналогичная командная строка будет использоваться для,
rotatelogs
если вы предпочитаете этоcronolog
- см. Их документы для синтаксиса.Если у вашего дистрибутива есть
start-stop-daemon
, вы должны использовать его вместо этого, поскольку он теоретически обладает какими-то особыми знаниями о вашей платформе и заботится оpkill
вас. Просто оберните команду в сценарий, и передать его как--exec
кstart-stop-daemon
в вашейinit.d/nginx
.источник
Я написал простую программу datelog для разделения общих журналов на основе зарегистрированной даты, в отличие от текущего системного времени, когда программа просматривает строку журнала. Это может или не может быть именно тем, что cronolog или другой сплиттер журналов уже делают, но быстрее написать свой, чем узнать, что делают другие.
Используя год и месяц в зарегистрированном запросе, строка затем записывается в файл или канал, который включает в себя YYYYMM, вычисленный из зарегистрированных данных. Да, это несколько специфично для общего формата журнала. Первая [предполагается, что она разделяет дату. Остерегайтесь IPv6-адресов. :)
Для анализа журнала важно, чтобы каждый журнал действительно содержал только запросы на каждый соответствующий месяц, и каждый журнал в идеале должен быть полным для правильных результатов анализа. Недостаточно определить имя файла на основе текущего времени в разделителе журнала, потому что медленный запрос, начинающийся в 23:59:59, в итоге окажется в файле журнала за неправильный месяц.
Я использую это с nginx посредством именованного fifo, которое проверяется на существование до запуска nginx. Обратите внимание, что в программе есть компромисс между обнаружением ошибок и буферизованным выводом, где datelog в настоящее время предпочитает буферизованный вывод из соображений производительности, поэтому, пожалуйста, убедитесь, что ваша установка действительно работает, особенно при использовании оболочек, чтобы не потерять какие-либо данные журнала ,
Исходный код: http://stuge.se/datelog.c
Пожалуйста, не стесняйтесь присылать мне любые отзывы и, конечно же, патчи!
источник
Вы можете добиться этого, используя простой bash-скрипт и cron:
Более подробную информацию о настройке crontab и т. Д. Можно найти здесь: Вращение файлов журнала Nginx через Cron.
источник
Боюсь, я не совсем понимаю ваш вопрос: так как nginx не поддерживает встроенную logrotation, вам придется пойти с чем-то вроде
где-нибудь в /etc/cron.daily (вам, конечно, нужно указать имена файлов с полными путями) или установить утилиты apache2 для доступа к rotatelogs.
источник