systemd-journal: qual é a relação de dev-log e syslog?

5

Estou tentando descobrir a relação dos dois,

/run/systemd/journal/dev-log
/run/systemd/journal/syslog

que eu não consegui encontrar documentação clara o suficiente. Em certo sentido, eles são basicamente os mesmos? Porque quando eu incluo um em "unix-dgram ()" do syslog-ng, eu praticamente obtenho a mesma saída. Existe alguma diferença? Enfim, qual a relação entre os dois?

Obrigado pelo esclarecimento.

    
por user180574 02.05.2017 / 21:43

1 resposta

2

É fácil quando você sabe como:)

$ systemctl list-sockets 
LISTEN                          UNIT                            ACTIVATES
...
/run/systemd/journal/dev-log    systemd-journald-dev-log.socket systemd-journald.service
/run/systemd/journal/socket     systemd-journald.socket         systemd-journald.service
/run/systemd/journal/stdout     systemd-journald.socket         systemd-journald.service
...

25 sockets listed.
Pass --all to see loaded but inactive sockets, too.

ok, eu menti sobre isso ser tão fácil. Eu não tenho um daemon syslog, e isso significa que eu não tenho syslog.socket ativado. Mas foi aí que encontrei os documentos:

$ systemctl cat syslog.socket
# /usr/lib/systemd/system/syslog.socket
...
Documentation=man:systemd.special(7)
Documentation=http://www.freedesktop.org/wiki/Software/systemd/syslog
...
# The default syslog implementation should make syslog.service a
# symlink to itself, so that this socket activates the right actual
# syslog service.
#
# Examples:
#
# /etc/systemd/system/syslog.service -> /lib/systemd/system/rsyslog.service
# /etc/systemd/system/syslog.service -> /lib/systemd/system/syslog-ng.service
#
# Best way to achieve that is by adding this to your unit file
# (i.e. to rsyslog.service or syslog-ng.service):
#
# [Install]
# Alias=syslog.service
#
# See http://www.freedesktop.org/wiki/Software/systemd/syslog for details.

link diz:

Note that it is now the journal that listens on /dev/log, no longer the BSD syslog daemon directly. If your logging daemon wants to get access to all logging data then it should listen on /run/systemd/journal/syslog instead via the syslog.socket unit file that is shipped along with systemd. On a systemd system it is no longer OK to listen on /dev/log directly, and your daemon may not bind to the /run/systemd/journal/syslog socket on its own. If you do that then you will lose logging from STDOUT/STDERR of services (as well as other stuff).

Assim, a resposta à sua pergunta é que você não deve usar nenhum desses caminhos com unix-dgram() . Você realmente precisa de suporte específico ao systemd se quiser rodar como um daemon syslog sob ele.

Para uma configuração individual, parece que você pode se livrar de /run/systemd/journal/syslog . Esta é definitivamente a opção menos malvada, porque a) evita lutar com o journald sobre quem possui /dev/log , b) o journald escreverá mensagens para ele a partir de STDOUT / STDERR de serviços, que nunca são gravados em /dev/log . Dado que aparece para funcionar, não vejo nenhuma desvantagem explícita listada nos documentos. A desvantagem óbvia é que "não recomendamos mais que as pessoas solicitem suas unidades após syslog.target ... mensagens de inicialização antecipada são perdidas completamente para a sua implementação". Há também um aviso de que "muitos serviços não poderão efetuar login na implementação do syslog", mas acho que isso é incorreto / só se aplica se você ouvir /dev/log .

    
por 23.09.2017 / 21:28