![¿Cómo decirle a rsyslog que cree un archivo de registro si no está allí?](https://rvso.com/image/50566/%C2%BFC%C3%B3mo%20decirle%20a%20rsyslog%20que%20cree%20un%20archivo%20de%20registro%20si%20no%20est%C3%A1%20all%C3%AD%3F.png)
El comportamiento predeterminado de rsyslog es agregar seguimientos a unexistentearchivo de registro.
Ahora, he visto (CentOs, Scientific Linux) que cuando rsyslog ya se está ejecutando, eliminas el archivo de registro (por ejemplo, el dedicado a registrar seguimientos de tu aplicación), luego ejecutas tu aplicación, rsyslogno lo harácree un archivo de registro y no se registrará ningún rastro.
¿Existe alguna opción de configuración que pueda indicarle a rsyslog que cree un archivo de registro si no está allí antes de agregarle rastros?
Nota: al realizar un service rsyslog restart
forzará la creación de un archivo de registro vacío.
rsyslog.conf(no se le agrega nada)
# 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 ###
Respuesta1
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 hay 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 cierran todos y cada uno de los identificadores de archivos abiertos. También significa que cualquier proceso con identificadores de archivo abiertos para el archivo eliminado puede continuar leyendo y/o escribiendo en el archivo.
Enviar una señal HUP (por ejemplo, a través de pkill -HUP rsyslog
o /etc/init.d/rsyslog rotate
) a rsyslog le indica que cierre todos los archivos abiertos, vuelva a cargar su archivo de configuración y vuelva a abrir todos los archivos de registro para escribirlos (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 qué rsyslog sigue escribiendo en el mismo archivo de registro incluso después de haberlo rotado (es decir, renombrado/mv-ed) hasta que rsyslog recibe una señal HUP. Esto significa que los scripts y utilidades de procesamiento de registros no tienen que ser escrupulosamente cuidadosos con el tiempo: simplemente pueden rotar todos los registros, enviar un HUP a rsyslog 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 cerrar y volver a abrir cada archivo de registro en cada escritura (o al menos llamarlo sync()
). El rendimiento sería abismal.
Respuesta2
$ modo de creación de archivos
¿Esta opción no hace lo que quieres?$ modo de creación de archivos?
extracto
$FileCreateMode 0600
This sample lets rsyslog create files with read and write access only for the
users it runs under.
The following sample is deemed to be a complete rsyslog.conf:
$umask 0000 # make sure nothing interferes with the following definitions
*.* /var/log/file-with-0644-default
$FileCreateMode 0600
*.* /var/log/file-with-0600
$FileCreateMode 0644
*.* /var/log/file-with-0644
Módulo de salida de archivos
Según la documentación de rsyslog, el argumento Archivo del módulo de salida de archivos podría usarse para hacer esto.
extractomódulo de archivo om
Archivo
Si el archivo ya existe, se le agregan datos nuevos. Los datos existentes no se truncan. Si el archivo aún no existe, se crea. Los archivos se mantienen abiertos mientras rsyslogd esté activo. Esto entra en conflicto con la rotación de archivos de registro externos. Para cerrar un archivo después de la rotación, envíe a rsyslogd una señal HUP después de que el archivo haya sido rotado.
Enviar a syslog una señal HUP
Creo que, en última instancia, es necesario "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 eliminarlo.
$ sudo pkill -HUP rsyslog
Al hacerlo, se crearon los siguientes mensajes en mi /var/log/messages
archivo de registro:
Sep 26 15:16:17 grinchy rsyslogd: [origin software="rsyslogd" swVersion="4.6.3" x-pid="1245" x-info="http://www.rsyslog.com"] rsyslogd was HUPed, type 'lightweight'.
Sep 26 15:16:44 grinchy rsyslogd: [origin software="rsyslogd" swVersion="4.6.3" x-pid="1245" x-info="http://www.rsyslog.com"] rsyslogd was HUPed, type 'lightweight'.