En mi configuración, tengo rsyslog que está a cargo de seguir los cambios de /home/user/my_app/shared/log/unicorn.stderr.log
uso imfile
. El contenido se envía a otro servidor de registro remoto mediante TCP.
Cuando el archivo de registro gira, rsyslog deja de enviar datos al servidor remoto.
Intenté volver a cargar rsyslog, enviar una señal HUP y reiniciarlo por completo, pero nada funcionó.
Las únicas formas en que pude encontrar que realmente funcionaban eran sucias:
- detenga el servicio, elimine los archivos de estadísticas de rsyslog e inicie rsyslog nuevamente. Todo eso en un gancho postrotate en mi archivo logrotate.
kill -9
rsyslog y comenzar de nuevo.
¿Hay alguna manera adecuada de hacer esto sin tocar las partes internas de rsyslog?
Archivo Rsyslog
$ ModLoad immark $ ModLoad imudp $ ModLoad imtcp $ ModLoad imuxsock $ ModLoad imklog $ ModLoad imfile $ template WithoutTimeFormat, "[entorno] [% syslogtag%] -% msg%" $ WorkDirectory / var / spool / rsyslog $ InputFileName /home/user/my_app/shared/log/unicorn.stderr.log $ InputFileTag unicorn-stderr $ InputFileStateFile stat-unicorn-stderr $ InputFileSeverity info $ InputFileFacility local8 $ InputFilePollInterval 1 $ InputFilePersistStateInterval 1 $ InputRunFileMonitor # Reenviar al servidor remoto si $ syslogtag contiene 'apache-' entonces @@ my_server: 5000; SinTiempoFormato : syslogtag, contiene, "apache-" ~ *. * @@ my_server: 5000; SyslFormat
Logrotate file
/home/user/my_app/shared/log/*.log { diario missingok dateext girar 30 comprimir notifempty extensión gz copytruncate crear 640 usuario usuario guiones compartidos post-rotar (detener rsyslog && rm / var / spool / rsyslog / stat- * && iniciar rsyslog 2> & 1) || cierto escritura final }
Para su información, el archivo es legible para el usuario rsyslog, mi servidor es accesible y otros archivos de registro que no rotan en el mismo ciclo continúan siendo rastreados correctamente.
Estoy ejecutando Ubuntu 12.04.
post-rotate
(lo cual no es una cosa) en lugar de esopostrotate
, porque ese script original de logrotate que tenía debería haber funcionado bien con rsyslog (si el script postrotate se hubiera estado ejecutando ) ...?post-rotate
porlastaction
. Su comentario aún es muy sensato y puede haber resuelto mi problema en ese momento :). Sin embargo, para el registro, evitaré usarlocopytruncate
en el futuro de todos modos porque es lento y juega con controladores de archivos.Su archivo logrotate contiene una entrada para
/home/user/shared/log/*.log
, que no coincide con su archivo de registro/home/user/my_app/shared/log/unicorn.stderr.log
.copytruncate
Debe agregar una entrada logrotate para ese directorio y asegurarse de que contenga ; tal como está, rsyslog está cambiando el nombre del archivo actual y creando uno nuevo, y el archivo sigue el manejo del archivo ahora renombrado.fuente