É systemd-journald uma implementação de syslog?

11

Gostaria de saber se o systemd-journald é uma nova implementação do protocolo syslog, ou melhor, ele usa implementações syslog, como rsyslog, syslog-ng

Eu pesquisei um pouco, mas não achei nada convincente sobre isso.

    
por sebelk 23.12.2016 / 00:19

1 resposta

20

No que diz respeito aos protocolos, systemd-journald

  • … é o ouvinte em um soquete de fluxo chamado /run/systemd/journal/stdout . O systemd conecta as saídas padrão brutas e os erros de serviços (que foram padronizados ou que têm explicitamente StandardOutput=journal / StandardError=journal ) para este soquete. Assim, ele recebe o protocolo de registros de formato livre de comprimento variável terminados com feeds de linha.
  • … é o ouvinte em soquetes de datagrama chamado /run/systemd/journal/dev-log , que é simbolicamente vinculado a partir de /dev/log . Isso recebe o protocolo que a função syslog() da biblioteca na biblioteca GNU C, vinculada aos aplicativos, fala.
  • … tenta ser um cliente de outro serviço que ouve em um soquete de datagrama chamado /run/systemd/journal/syslog . Isso também recebe o protocolo que a função de biblioteca syslog() na biblioteca GNU C fala (embora systemd-journald na verdade use outra biblioteca e outra função para falar).
  • … é um leitor de um dispositivo de caracteres chamado /dev/kmsg . Isso recebe o protocolo que o kernel Linux fala, que é um protocolo de comprimento variável, em grande parte de formato livre, com registros terminados com feeds de linha.
  • … é o ouvinte em um soquete de datagrama chamado /run/systemd/journal/socket . Isso é análogo ao caso da biblioteca GNU C em que os aplicativos ligam a uma biblioteca que fala um certo protocolo para esse soquete; exceto que a função é sd_journal_sendv() , está em uma biblioteca C do systemd à qual os aplicativos se vinculam e o protocolo não é padronizado, mas é um protocolo apenas systemd que compreende uma matriz de pares chave = valor e, opcionalmente, um descritor de arquivo legível. em cada datagrama.

O protocolo falado pela função syslog() na biblioteca GNU C não é nem RFC 5424 nem RFC 3164, e é efetivamente seu próprio padrão de facto. Não é o RFC 5424 porque não tem a quantidade correta de espaço em branco e os traços designam campos opcionais com valores NIL. Não é o RFC 3164 porque tem um campo PROCID em vez de um HOSTNAME .

Alguns anos atrás, seu sistema operacional systemd teria:

  • systemd-journald fazendo todos os itens acima (e algumas coisas que são irrelevantes quando se trata de protocolos ) e sendo o servidor com o qual a biblioteca GNU C e a biblioteca C systemd conversam usando seus respectivos protocolos
  • um programa syslog ou rsyslog ou syslog-ng opcional chamado, xinetd / inetd -style quando algo tenta enviar mensagens para /run/systemd/journal/syslog e receber o soquete como um descritor de arquivo aberto ou como um serviço direto configurado para abrir e ouvir em /run/systemd/journal/syslog com seu módulo (equivalente do rsyslog) imuxsock ; e falando o protocolo da biblioteca GNU C
  • um serviço syslog ou rsyslog ou syslog-ng ou udp-syslog-read opcional que atende ao tráfego RFC 5426

Hoje em dia, o sistema operacional do seu sistema tem:

  • systemd-journald novamente fazendo todos os itens acima e sendo o servidor com o qual a biblioteca GNU C e a biblioteca C systemd falam
  • um programa rsyslog opcional chamado como um serviço direto, em vez de um soquete, que lê diretamente os arquivos de diário do systemd usando seu imjournal module
  • um serviço syslog ou rsyslog ou syslog-ng ou udp-syslog-read opcional que atende ao tráfego RFC 5426

Leitura adicional

por 23.12.2016 / 05:12