В моей конфигурации у меня есть rsyslog, который отвечает за следующие изменения /home/user/my_app/shared/log/unicorn.stderr.log
использования imfile
. Содержимое отправляется на другой удаленный сервер регистрации по протоколу TCP.
Когда файл журнала вращается, rsyslog прекращает отправку данных на удаленный сервер.
Я попытался перезагрузить rsyslog, отправить сигнал HUP и перезапустить его, но ничего не получалось.
Единственные способы, которые я мог найти, которые действительно работали, были грязными:
- остановите службу, удалите файлы статистики rsyslog и снова запустите rsyslog. Все это в хакере postrotate в моем файле logrotate.
kill -9
rsyslog и начните все сначала.
Есть ли для меня правильный способ сделать это, не касаясь внутренних rsyslog?
Rsyslog файл
$ ModLoad immark $ ModLoad imudp $ ModLoad imtcp $ ModLoad imuxsock $ ModLoad imklog $ ModLoad imfile $ template WithoutTimeFormat, "[environment] [% syslogtag%] -% msg%" $ WorkDirectory / var / spool / rsyslog $ InputFileName /home/user/my_app/shared/log/unicorn.stderr.log $ InputFileTag единорог-stderr $ InputFileStateFile stat-unicorn-stderr $ InputFileSeverity info $ InputFileFacility local8 $ InputFilePollInterval 1 $ InputFilePersistStateInterval 1 $ InputRunFileMonitor # Переслать на удаленный сервер если $ syslogtag содержит «apache-», тогда @@ my_server: 5000; WithoutTimeFormat : syslogtag, содержит, "apache-" ~ *. * @@ my_server: 5000; SyslFormat
Logrotate файл
/home/user/my_app/shared/log/*.log { ежедневно missingok dateext повернуть 30 компресс notifempty расширение gz copytruncate создать 640 пользователей sharedscripts после поворота (остановите rsyslog && rm / var / spool / rsyslog / stat- * && start rsyslog 2> & 1) || правда endscript }
К вашему сведению, файл доступен для чтения для пользователя rsyslog, мой сервер доступен, а другие файлы журнала, которые не вращаются в одном и том же цикле, продолжают правильно отслеживаться.
Я использую Ubuntu 12.04.
post-rotate
(а это не вещь) вместоpostrotate
, потому что тот оригинальный скрипт logrotate, который у вас был, должен был нормально работать с rsyslog (если скрипт postrotate выполнялся ) ...?post-rotate
дляlastaction
. Ваш комментарий все еще очень разумный и, возможно, решил мою проблему в то время :). Для записи, однако, я всеcopytruncate
равно буду избегать использования в будущем, потому что он медленный и воспроизводится с помощью файловых дескрипторов.Ваш файл logrotate содержит запись для
/home/user/shared/log/*.log
, которая не соответствует вашему лог- файлу в/home/user/my_app/shared/log/unicorn.stderr.log
. Вам нужно добавить запись logrotate для этого каталога и убедиться, что он содержитcopytruncate
- как есть, rsyslog переименовывает текущий файл и создает новый, а imfile продолжает следовать дескриптору файла переименованного файла.источник