Relación de rsyslog y journald en Ubuntu 16.04

18

Estoy ejecutando lo que es un servidor Ubuntu 16.04 de vainilla, y estoy tratando de entender cómo se configura el registro de forma predeterminada. Puedo ver que tanto journaldy rsyslogestán instalados y en funcionamiento, pero no es del todo claro cómo se procesan los mensajes de registro.

La mayoría de los mensajes parecen aparecer tanto a /var/log/syslogtravés como a través de journalctl, pero no puedo ver ninguna configuración explícita para el reenvío entre los dos en ninguno de los dos /etc/systemd/journald.conf(que básicamente está comentado por defecto) /etc/rsyslog.confo /etc/rsyslog.d/50-default.conf. Traté de buscar documentación oficial, o incluso una publicación de blog que explicara cómo estos dos están configurados en Ubuntu, pero no he logrado encontrar nada.

Para aumentar aún más mi confusión, ejecuté logger -p local1.info Testen el host y descubrí que no se escribió nada /var/log/syslog, mientras que el mensaje apareció debajo journalctl.

Mis preguntas son:

  1. ¿Cómo funcionan exactamente journald y rsyslog juntos en Ubuntu 16.04 (por defecto)?
  2. ¿Cómo es que los mensajes enviados loggeraparentemente terminan en el diario, pero no en syslog?

Actualización: Resulta que loggerno funcionó como se esperaba, fue un error de mi parte, por lo que no es relevante para la pregunta principal.

motns
fuente

Respuestas:

12

Por defecto rsyslogestá utilizando el módulo "imuxsock", el módulo proporciona:

la capacidad de aceptar mensajes de syslog a través de sockets locales de Unix. Lo más importante, este es el mecanismo por el cual la llamada syslog (3) entrega mensajes syslog a rsyslogd [1] .

Es posible rsyslogimportar mensajes de registro estructurados desde systemd-journal usando un módulo llamado "imjournal" [2] .

Se puede cargar como:

module(load="imjournal") 

en:

/etc/rsyslog.conf

Por otro lado, "systemd-journald" captura todos los datos en sí:

man systemd-journald

systemd-journald es un servicio del sistema que recopila y almacena datos de registro. Crea y mantiene revistas estructuradas e indexadas basadas en la información de registro que se recibe de una variedad de fuentes:

   ·   Kernel log messages, via kmsg
   ·   Simple system log messages, via the libc syslog(3) call
   ·   Structured system log messages via the native Journal API, 
       see sd_journal_print(4)
   ·   Standard output and standard error of system services
   ·   Audit records, via the audit subsystem

Puede deshabilitar rsyslogdmientras todavía tiene acceso a los registros del sistema mediante journalctl.

$ sudo systemctl mask rsyslogd
$ sudo systemctl stop syslog.socket
$ sudo systemctl stop rsyslog.service
$ systemctl is-active rsyslog.service 
inactive
$ logger -p mail.info Helllooo
$ journalctl

Por ejemplo, centos está utilizando el módulo "imuxsock" para capturar todos los datos de "systemd-journald" rsyslogmientras que opensuse no tiene "syslog" en absoluto.


Para averiguar por qué su mensaje no terminó /var/log/syslog, debe verificar este archivo:

less /etc/rsyslog.d/50-default.conf

busque *.info, vea dónde se almacenarán, podría ser otro archivo como messages.

Para mí aparece en ambos journalctly syslog.

Ravexina
fuente
logger -p .info hellono es válido. No ha dado ningún nombre de instalación.
luv.preet
Actualizó la respuesta ....
Ravexina
Como noté en mi edición, loggerno funcionó fue mi culpa, así que eso está arreglado ahora (gracias por los consejos de todos modos). En cuanto a los registros que aparecen en dos lugares, su nota imuxsockparece ser la clave: parece que tanto rsyslog como journald están escuchando los mensajes locales de syslog, por lo tanto, esas entradas van en dos registros separados.
Motns
Seguí lo anterior en ubuntu y ahora no obtengo ningún registro del registrador, hmm: root @ T: ~ # logger -p mail.info Helllooo root @ T: ~ # journalctl No se encontraron archivos de diario. - No hay entradas - alguna idea?
Hackeron el
Gran respuesta. Sin embargo, lo que me falta es una nota sobre cómo journald sabe abrir un socket de syslog (o si no lo hace, cómo llega a los mensajes de syslog de lo contrario) cuando rsyslog está desactivado. ¿O se necesita alguna configuración manual de journald?
Matthijs Kooijman
4

Systemd es un sistema de inicio utilizado para iniciar los servicios cuando el sistema se inicia. Journald es responsable de crear registros de los servicios iniciados por systemd. Al integrar journald con systemd, incluso los primeros mensajes del proceso de arranque están disponibles para journald.

Rsyslog es un demonio hecho especialmente para el procesamiento de registros, nada que ver con journald. Puede tomar registros de muchas maneras y generarlos de muchas maneras. No está habilitado de forma predeterminada que también toma mensajes de registro de journald. Para eso, debe escribir en el archivo /etc/rsyslog.conf,

$ModLoad imjournal # im -> input module
OR
load(type="imjournal")

Ahora, aceptará registros de m journald también. Pero le sugiero que no cambie su archivo /etc/rsyslog.conf.

Al final del archivo /etc/rsyslog.conf, hay una línea escrita,

$IncludeConfig /etc/rsyslog.d/*.conf

Significa que todos los archivos que tienen .conf en ese extremo en la carpeta /etc/rsyslog.d/ deben incluirse durante la carga de rsyslog. Por lo tanto, todas sus configuraciones personalizadas deben ir en estos archivos

Te sugiero que hagas un archivo /etc/rsyslog.d/journald.conf y pegues el fragmento a continuación.

A continuación se muestra el fragmento de la página oficial de rsyslog de Imjournal.

module(load="imjournal" PersistStateInterval="100"
   StateFile="/path/to/file") #load imjournal module
module(load="mmjsonparse") #load mmjsonparse module for structured logs

template(name="CEETemplate" type="string" string="%TIMESTAMP% %HOSTNAME% %syslogtag% @cee: %$!all-json%\n" ) #template for messages

action(type="mmjsonparse")
action(type="omfile" file="/var/log/ceelog" template="CEETemplate")

Línea 1: carga el módulo de diario para aceptar los registros de journald

2 - El módulo mmjsonparse se carga para analizar los registros

3 - Están estructurados en el formato descrito en la plantilla

4 - Analiza esos registros utilizando el módulo mmjsonparse.

5 - Envía esos registros a un archivo llamado / var / log / ceelog de acuerdo con la estructura provista en la plantilla dada, usando el módulo omfile (archivo del módulo de salida - salidas al archivo).

Realice cambios en la configuración según sus necesidades.

luv.preet
fuente
Gracias por la explicación, pero creo que la respuesta de @Ravexina está más cerca de ayudarme a comprender lo que está sucediendo con rsyslog y journald, de forma predeterminada (sin configuración adicional).
Motns