Простите меня, если я неясен, но я стараюсь сохранить это как можно безопаснее.
У меня есть сервер CentOS, настроенный как центральный удаленный сервер регистрации. Серверы отправляли свои журналы на этот сервер уже несколько месяцев без проблем. Эти файлы журналов обновляются ежемесячно и работают без происшествий. Однако в этом месяце (без каких-либо изменений конфигурации, о которых я знаю) rsyslog as решил отправить новые файлы журнала в свернутый файл журнала (access_log-20150901
), а не развернутый файл (access_log
).
Странно то, что я даже свернул бревно (access_log-20150901
) в каталог архивов, и rsyslog все еще отправляет обновления в этот файл.
Я использую специальные фильтры, которые выглядят так:
if $programname contains 'access_log' then /var/log/remotelog/access_log
Однако он обновляет файл по адресу:
/var/log/remotelog/archive/access_log-20150901
Кто-нибудь знает, что здесь происходит?
К вашему сведению. Разрешения одинаковы для всех этих файлов и папок.
Изменить: исправлен logrotate с методом postrotate для перезапуска rsyslog после поворота журналов
/var/log/remotelog/access_log
{
missingok
notifempty
monthly
create 0660 <user> <group>
rotate 12
postrotate
/sbin/service rsyslog reload > /dev/null 2>/dev/null || true
endscript
}
Версия rsyslog: rsyslogd 8.9.0.ad1
ИМХО, у вас есть два основных варианта.
1) добавьте предложение "postrotate" в раздел logrotate для выдачи HUP для pid rsyslog
2) добавьте этот файл в спецификацию файлов rsyslog в /etc/logrotate.d/rsyslog
файл.
Проблема в том, что вы никогда не перезапускали демон rsyslog после ротации, поэтому он по-прежнему внутренне сохраняет старый дескриптор файла. Вероятно, до сих пор это работало нормально, потому что ротация файлов rsyslog занимала больше времени, чем ротация этого файла, что означает, что HUP для файлов rsyslog наступил после ротации этого файла. В последнее время эта ротация занимала больше времени, чем ротация файлов rsyslog, поэтому HUP выполнялась до закрытия / ротации этого файла журнала. После HUP, rsyslog
по-прежнему был открыт старый файл, и функция rotate никогда не уведомляла rsyslog об обновлении его внутреннего дескриптора файла.