systemd-journald是syslog实现吗?


22

我想知道systemd-journald是syslog协议的新实现,还是它使用syslog实现,例如rsyslog,syslog-ng

我已经在Google上搜索了一下,但没有发现任何令人信服的内容。


您可能想澄清一下,通过“ syslog协议”是指在tcp | udp 514上接收syslog,还是发送,或两者都发送。
亚历克斯·斯特拉吉斯

Answers:


33

就协议而言,systemd-journald

  • …是名为的流套接字上的侦听器/run/systemd/journal/stdout。systemd将原始标准输出和服务错误(默认为StandardOutput=journal/ 显式具有/ StandardError=journal)连接到此套接字。因此,它接收以换行符结尾的可变长度自由格式记录的协议。
  • …是名为的数据报套接字上的侦听器/run/systemd/journal/dev-log,它是从符号链接的/dev/log。这接收到syslog()链接到应用程序中的GNU C库中的库函数所说的协议。
  • …尝试成为另一个服务的客户端,该服务在名为的数据报套接字上侦听/run/systemd/journal/syslog。这也接受syslog()GNU C库中的库函数说的协议(尽管systemd-journald实际上使用另一个库和另一个函数来说)。
  • …是来自名为的字符设备的读取器/dev/kmsg。它接收Linux内核说的协议,该协议是长度可变,很大程度上是自由格式的记录,以换行符终止。
  • …是名为的数据报套接字上的侦听器/run/systemd/journal/socket。这类似于GNU C库的情况,即应用程序链接到对该套接字讲某种协议的库。除了函数是sd_journal_sendv(),它在应用程序链接到的systemd C库中,并且该协议未标准化,而是一个纯系统的协议,包括每个数据报中的键=值对数组以及一个可选的可读文件描述符。

syslog()GNU C库中的函数所说的协议既不是RFC 5424也不是RFC 3164,并且实际上是它自己的事实上的标准。它不是RFC 5424,因为它没有正确数量的空格,并且用破折号指定了NIL值的可选字段。它不是RFC 3164,因为它具有PROCID字段而不是HOSTNAME

几年前,您的systemd操作系统应该具有:

  • systemd-journald完成上述所有操作(以及与协议无关的某些事情),并成为GNU C库和systemd C库使用各自协议与之通信的服务器
  • 一个可选的系统日志或rsyslog现在或syslog-ng的程序调用,要么xinetd/ inetd风格的东西时尝试消息发送到/run/systemd/journal/syslog和接收插座作为一个开放的文件描述符,或作为配置为在打开的直服务并侦听/run/systemd/journal/syslog与它的(等效的rsyslog)imuxsock模块;说GNU C库协议
  • 可选的syslog或rsyslog或syslog-ng或udp-syslog读取服务,可监听RFC 5426流量

如今,您的systemd操作系统具有:

  • systemd-journald 再次执行上述所有操作,并成为GNU C库和systemd C库与之通信的服务器
  • 可选的rsyslog程序,作为直接服务而不是通过套接字调用,该程序使用其imjournal模块直接从systemd日志文件中读取内容
  • 可选的syslog或rsyslog或syslog-ng或udp-syslog读取服务,可监听RFC 5426流量

进一步阅读

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.