Na minha configuração, tenho o rsyslog que é responsável por seguir as alterações de /home/user/my_app/shared/log/unicorn.stderr.log
uso imfile
. O conteúdo é enviado para outro servidor de registro remoto usando TCP.
Quando o arquivo de log gira, o rsyslog para de enviar dados para o servidor remoto.
Tentei recarregar o rsyslog, enviar um sinal HUP e reiniciá-lo completamente, mas nada funcionou.
As únicas maneiras de descobrir que realmente funcionavam eram sujas:
- interrompa o serviço, exclua os arquivos estatísticos do rsyslog e inicie o rsyslog novamente. Tudo isso em um gancho pós-rotação no meu arquivo de logrotate.
kill -9
rsyslog e inicie novamente.
Existe uma maneira adequada de fazer isso sem tocar nos internos do rsyslog?
Arquivo 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 unicorn-stderr $ InputFileStateFile stat-unicorn-stderr Informações sobre $ InputFileSeverity $ InputFileFacility local8 $ InputFilePollInterval 1 $ InputFilePersistStateInterval 1 $ InputRunFileMonitor # Encaminhar para servidor remoto se $ syslogtag contiver 'apache-' @ @ my_server: 5000; WithoutTimeFormat : syslogtag, contém, "apache-" ~ *. * @@ my_server: 5000; SyslFormat
Arquivo de logrotate
/home/user/my_app/shared/log/*.log { diariamente missingok dateext girar 30 comprimir notifempty extensão gz copytruncate criar 640 usuário usuário sharedscripts pós-rotação (interrompa rsyslog && rm / var / spool / rsyslog / stat- * && start rsyslog 2> & 1) || verdade final }
Para sua informação, o arquivo é legível para o usuário do rsyslog, meu servidor está acessível e outros arquivos de log que não rodam no mesmo ciclo continuam sendo rastreados corretamente.
Estou executando o Ubuntu 12.04.
post-rotate
(o que não é uma coisa) em vez depostrotate
, porque o script original de logrotate que você tinha deveria ter funcionado bem com o rsyslog (se o script pós-rotativo estivesse em execução ) ...?post-rotate
paralastaction
. Seu comentário ainda é muito sensato e pode ter resolvido meu problema na época :). Para o registro, porém, evitarei usarcopytruncate
no futuro de qualquer maneira, porque é lento e brinca com identificadores de arquivo.Seu arquivo logrotate contém uma entrada para
/home/user/shared/log/*.log
, que não corresponde ao seu arquivo de log/home/user/my_app/shared/log/unicorn.stderr.log
. Você precisa adicionar uma entrada de logrotate para esse diretório e garantir que ela contenhacopytruncate
- como está, o rsyslog renomeia o arquivo atual e cria um novo e o imfile continua seguindo a manipulação de arquivo do arquivo agora renomeado.fonte