Relação de rsyslog e journald no Ubuntu 16.04

7

Estou executando o que é um servidor Ubuntu Ubuntu 16.04, e estou tentando entender como o registro está configurado por padrão. Posso ver que journald e rsyslog estão instalados e em execução, mas não está claro para mim como as mensagens de log estão sendo processadas.

A maioria das mensagens parece aparecer em /var/log/syslog e via journalctl , mas não consigo ver nenhuma configuração explícita para encaminhamento entre as duas em /etc/systemd/journald.conf (que é basicamente toda comentada por padrão), /etc/rsyslog.conf ou /etc/rsyslog.d/50-default.conf . Eu tentei procurar por documentação oficial, ou até mesmo uma postagem no blog explicando como esses dois estão configurados no Ubuntu, mas não conseguiram encontrar nada.

Para aumentar ainda mais a minha confusão, executei logger -p local1.info Test no host e descobri que nada foi gravado em /var/log/syslog , enquanto a mensagem apareceu em journalctl .

Minhas perguntas são:

  1. Como exatamente o journald e o rsyslog trabalham juntos no Ubuntu 16.04 (por padrão)?
  2. Como as mensagens enviadas de logger aparentemente acabam no diário, mas não no syslog?

Atualização: Acontece que logger não está funcionando como esperado foi um erro do meu jeito, então não é relevante para a questão principal.

    
por motns 14.06.2017 / 21:15

2 respostas

4

Por padrão rsyslog está usando o módulo "imuxsock", o módulo fornece:

  

a capacidade de aceitar mensagens syslog através de sockets Unix locais. Mais importante ainda, este é o mecanismo pelo qual a chamada syslog (3) envia mensagens syslog para o rsyslogd [1 ] .

É possível que rsyslog importe mensagens de log estruturadas do systemd-journal usando um módulo chamado "imjournal" [2] .

Pode ser carregado como:

module(load="imjournal") 

em:

/etc/rsyslog.conf

Por outro lado, "systemd-journald" captura todos os dados em si:

man systemd-journald
  

systemd-journald é um serviço do sistema que coleta e armazena dados de registro. Cria e mantém periódicos estruturados e indexados baseados em informações de registro que são recebidas de uma variedade de fontes:

   ·   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

Você pode desabilitar rsyslogd enquanto ainda tiver acesso aos registros do sistema usando 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 exemplo, centos está usando o módulo "imuxsock" para capturar todos os dados "systemd-journald" via rsyslog , enquanto o opensuse não tem "syslog".

Para descobrir por que sua mensagem não acabou em /var/log/syslog , você deve verificar este arquivo:

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

procure *.info , veja onde eles serão armazenados, pode ser um outro arquivo como messages .

Para mim, aparece em journalctl e syslog .

    
por Ravexina 14.06.2017 / 21:29
0

O Systemd é um sistema init usado para iniciar os serviços quando o sistema é inicializado. O Journald é responsável por criar logs para serviços iniciados pelo systemd. Ao integrar o journald com o systemd, mesmo os primeiros mensagens do processo de inicialização estão disponíveis para o journald.

O Rsyslog é um daemon feito especialmente para o processamento de logs, nada a ver com o journald. Pode levar os logs de várias maneiras e gerá-los de várias maneiras. Não está ativado por padrão que ele também receba mensagens de log do journald. Para isso, você tem que escrever no arquivo /etc/rsyslog.conf,

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

Agora, ele também aceitará registros do journald. Mas eu sugiro que você não altere seu arquivo /etc/rsyslog.conf.

No final do arquivo /etc/rsyslog.conf, há uma linha escrita,

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

Isso significa que todos os arquivos com .conf no final da pasta /etc/rsyslog.d/ devem ser incluídos durante o carregamento do rsyslog. Então, todas as suas configurações personalizadas devem estar nesses arquivos

Eu sugiro que você faça um arquivo /etc/rsyslog.d/journald.conf e cole o trecho abaixo nele.

Abaixo está o trecho da página oficial do rsyslog do 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")

Linha 1 - carrega o módulo imjournal para aceitar os logs do journald

2 - O módulo mmjsonparse é carregado usado na análise dos logs

3 - Eles estão estruturados no formato descrito no template

4 - Analisa esses logs usando o módulo mmjsonparse.

5 - Envia os logs para um arquivo chamado / var / log / ceelog de acordo com a estrutura fornecida no template dado, usando o módulo omfile (arquivo do módulo de saída - saídas para o arquivo).

Faça alterações na configuração de acordo com sua necessidade.

    
por luv.preet 14.06.2017 / 22:27