Назад | Перейти на главную страницу

Ротация и непрерывная запись больших файлов журналов с помощью rsyslogd

У меня очень загруженный файл журнала (назовем его /var/log/service.log), который также часто ищут для устранения неполадок. Вывод на него почти непрерывный и круглосуточный. Вероятно, он выдает около 1-2 ГБ в день, но нам нужно все.

Так как fgrep работы с большим файлом журнала непрактично медленным, необходимо часто менять его. у меня есть logrotate настроен на запуск /etc/cron.hourly, с hourly директива и ограничение размера 512M или так.

Это работает так, как ожидалось: файл вращается с /var/log/service.log к /var/log/service.log-20150810 или что у тебя. Проблема в том, что переименование - это просто косметическое изменение записи inode / directory, поэтому rsyslogd продолжает писать в /var/log/service.log-20150810 сейчас и на некоторое время, пока вновь созданный /var/log/service.log сидит пусто. В какой-то момент, rsyslogd вместо этого решает начать писать в новый, но я не понимаю его рифму или причину этого.

В любом случае, мне нужно как-то "пнуть" rsyslogd сказать ему начать писать на новый, первозданный /var/log/service.log после ротации журнала. Отправка SIGHUP, похоже, не помогает. Любые идеи, которые не связаны с потенциальной потерей большого количества записей журнала (например, перезапуск rsyslogd) будет оценена!

(Примечание: я так понимаю, logrotate схема именования приведет к /var/log/service.log.1 и еще много чего, я немного озадачен, увидев /var/log/service.log-20150810 рядом с ним. Делает rsyslogd сделать собственное вращение тоже внутри? Есть ли у этого какие-то отрицательные последствия?)

Спасибо заранее!