El comportamiento predeterminado de rsyslog es agregar rastros a un archivo de registro existente .
Ahora, he visto (CentOs, Scientific Linux) que cuando rsyslog ya se está ejecutando, eliminas el archivo de registro (por ejemplo, el que está dedicado a registrar rastros de tu aplicación), luego ejecutas tu aplicación, rsyslog no creará un archivo de registro y no se grabará ningún rastro.
¿Hay alguna opción de configuración que pueda decirle a rsyslog que cree un archivo de registro si no está allí antes de agregarle rastros?
Nota : hacer un service rsyslog restart
forzará la creación de un archivo de registro vacío.
rsyslog.conf (nada agregado)
# rsyslog v5 configuration file
# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
#### MODULES ####
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog # provides kernel logging support (previously done by rklogd)
#$ModLoad immark # provides --MARK-- message capability
$SystemLogRateLimitInterval 1
$SystemLogRateLimitBurst 50000
# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514
# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514
#### GLOBAL DIRECTIVES ####
# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
# File syncing capability is disabled by default. This feature is usually not required,
# not useful and an extreme performance hit
#$ActionFileEnableSync on
# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf
#### RULES ####
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none;local1.none /var/log/messages
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
# Log cron stuff
cron.* /var/log/cron
# Everybody gets emergency messages
*.emerg *
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
# ### begin forwarding rule ###
# The statement between the begin ... end define a SINGLE forwarding
# rule. They belong together, do NOT split them. If you create multiple
# forwarding rules, duplicate the whole block!
# Remote Logging (we use TCP for reliable delivery)
#
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
#$WorkDirectory /var/lib/rsyslog # where to place spool files
#$ActionQueueFileName fwdRule1 # unique name prefix for spool files
#$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible)
#$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
#$ActionQueueType LinkedList # run asynchronously
#$ActionResumeRetryCount -1 # infinite retries if host is down
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
#*.* @@remote-host:514
# ### end of the forwarding rule ###
Respuestas:
Desde el punto de vista de rsyslog, el archivo de registro eliminado todavía existe. Esto se debe a que rsyslog no escribe en el nombre del archivo, sino en el identificador de archivo que tiene abierto para el archivo de registro.
Los sistemas Unix en realidad no eliminan un archivo hasta que no haya procesos con identificadores abiertos para el archivo. Esto significa que el espacio en disco utilizado por el archivo eliminado no se libera hasta que se cierren todos los identificadores de archivo abiertos. También significa que cualquier proceso con identificadores de archivo abiertos al archivo eliminado puede continuar leyendo y / o escribiendo en el archivo.
El envío de una señal HUP (por ejemplo, a través de
pkill -HUP rsyslog
o/etc/init.d/rsyslog rotate
) a rsyslog le dice que cierre todos sus archivos abiertos, vuelva a cargar su archivo de configuración y vuelva a abrir todos los archivos de registro para escribir (creándolos si es necesario).Reiniciar rsyslogd también funciona.
Tenga en cuenta que esta es una característica, no un error, con algunas implicaciones útiles, por ejemplo, es por eso que rsyslog sigue escribiendo en el mismo archivo de registro incluso después de que se ha rotado (es decir, renombrado / mv-ed) hasta que rsyslog recibe una señal HUP. Esto significa que las secuencias de comandos y las utilidades de procesamiento de registros no tienen que ser escrupulosamente cuidadosas con respecto al tiempo; solo pueden rotar todos los registros, enviar rsyslog un HUP, y todo continúa funcionando, sin pérdida de datos de registro.
Por cierto, la única forma de que esto no suceda con rsyslog sería si se cierra y se vuelve a abrir cada archivo de registro en cada escritura (o al menos se llama
sync()
). El rendimiento sería abismal.fuente
$ FileCreateMode
¿Esta opción no hace lo que quieres, $ FileCreateMode ?
extracto
Módulo de salida de archivo
De acuerdo con la documentación de rsyslog, el argumento File del File Output Module podría usarse para hacer esto.
extracto del módulo omfile
Enviar syslog una señal HUP
Creo que, en última instancia, debe "activar" rsyslog para hacer esto. No creo que sea lo que quieres automáticamente. Por lo tanto, podría darle una señal HUP para activar la recreación del archivo de registro después de que se elimine.
Al hacerlo, se crearon los siguientes mensajes en mi
/var/log/messages
archivo de registro:fuente