Relacionamento do rsyslog e journald no Ubuntu 16.04

18

Estou executando o que é um servidor baunilha Ubuntu 16.04 e estou tentando entender como o log é configurado por padrão. Eu posso ver que tanto journalde rsyslogsão instalados e funcionando, mas não é de todo claro para mim como mensagens de log estão sendo processados.

A maioria das mensagens parece aparecer tanto na /var/log/syslogvia quanto na via journalctl, mas não consigo ver nenhuma configuração explícita para encaminhamento entre as duas /etc/systemd/journald.conf(que é basicamente todas comentadas por padrão) /etc/rsyslog.confou /etc/rsyslog.d/50-default.conf. Tentei procurar documentação oficial ou até mesmo um post no blog explicando como esses dois são configurados no Ubuntu, mas não consegui encontrar nada.

Para aumentar ainda mais minha confusão, eu executei logger -p local1.info Testno host e descobri que nada foi gravado /var/log/syslog, enquanto a mensagem era exibida abaixo journalctl.

Minhas perguntas são:

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

Atualização: Acontece que loggernão funcionar como esperado foi um erro do meu lado, por isso não é relevante para a questão principal.

motns
fonte

Respostas:

12

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

a capacidade de aceitar mensagens syslog via soquetes locais do Unix. Mais importante, esse é o mecanismo pelo qual a chamada syslog (3) entrega mensagens syslog para o rsyslogd [1] .

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

Pode ser carregado como:

module(load="imjournal") 

dentro:

/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 log. Ele cria e mantém diários estruturados e indexados com base nas informações de registro recebidas de várias 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 desativar rsyslogdenquanto ainda tem acesso aos logs 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, o centos está usando o módulo "imuxsock" para capturar todos os dados "systemd-journald" via rsyslog enquanto o opensuse não possui "syslog".


Para descobrir por que sua mensagem não acabou /var/log/syslog , verifique este arquivo:

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

olhe para *.info , ver onde eles serão armazenados, pode ser outro arquivo como messages.

Para mim, ele aparece em ambos journalctle syslog.

Ravexina
fonte
logger -p .info hellonão é válido. Você não forneceu nenhum nome para a instalação.
luv.preet
Atualizado a resposta ....
Ravexina 14/06
Como observei na minha edição, a loggerculpa não foi do meu funcionamento, então isso foi corrigido agora (obrigado pelas dicas de qualquer maneira). Quanto aos logs que aparecem em dois lugares, sua nota imuxsockparece ser a chave: parece que o rsyslog e o journald estão ouvindo as mensagens do syslog local, por isso, essas entradas entram em dois logs separados.
motns
Eu segui o acima no ubuntu e agora não estou recebendo nenhum log do logger, hmm: root @ T: ~ # logger -p mail.info Helllooo root @ T: ~ # journalctl Nenhum arquivo de diário foi encontrado. - Sem entradas - alguma idéia?
Hacker #
Ótima resposta. O que estou perdendo, no entanto, é uma observação sobre como o journald sabe abrir um soquete do syslog (ou, caso contrário, como é que as mensagens do syslog chegam) quando o rsyslog está desativado? Ou é necessária alguma configuração manual do journald?
Matthijs Kooijman
4

Systemd é um sistema init usado para iniciar os serviços quando o sistema é inicializado. O Journald é responsável por criar logs para os serviços iniciados pelo systemd. Ao integrar o journald ao systemd, até as primeiras 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. Ele pode acessar os logs de várias maneiras e produzi-los de várias maneiras. Por padrão, não está ativado que ele também recebe mensagens de log do journald. Para isso, você deve escrever no arquivo /etc/rsyslog.conf,

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

Agora, ele também aceitará logs fromm journald. Mas sugiro que você não deva alterar 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 terminam na pasta /etc/rsyslog.d/ devem ser incluídos durante o carregamento do rsyslog. Portanto, todas as suas configurações personalizadas devem estar nesses arquivos

Eu sugiro que você crie um arquivo /etc/rsyslog.d/journald.conf e cole o trecho abaixo.

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 modelo

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

5 - Envia esses logs para um arquivo, a saber / var / log / ceelog, de acordo com a estrutura fornecida no modelo fornecido, 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.

luv.preet
fonte
Obrigado pela explicação, mas acho que a resposta da @Ravexina está mais perto de me ajudar a entender o que está acontecendo com o rsyslog e o journald, por padrão (sem configuração extra).
motns