Syslog

systemd-journald 是 syslog 實現嗎?

  • December 23, 2016

我想知道systemd-journald是否是syslog協議的新實現,或者更確切地說,它使用了syslog實現,例如rsyslog,syslog-ng

我用Google搜尋了一下,但我沒有發現任何令人信服的東西。

就協議而言,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 庫中,並且該協議不是標準化的,而是一個僅 systemd 協議,在每個數據報中包含一個鍵=值對數組,以及可選的可讀文件描述符.

GNU C 庫中的函式所使用的協議syslog()既不是 RFC 5424 也不是 RFC 3164,實際上是它自己的事實上的標準。它不是 RFC 5424,因為它沒有正確數量的空格和用 NIL 值指定可選欄位的破折號。它不是 RFC 3164,因為它有一個PROCID欄位而不是HOSTNAME.

幾年前,您的 systemd 作業系統將具有:

  • systemd-journald完成上述所有工作(以及一些與協議無關的事情)並成為 GNU C 庫和 systemd C 庫使用各自協議與之通信的伺服器
  • 呼叫可選的 syslog 或 rsyslog 或 syslog-ng 程序,xinetdinetd某些東西嘗試將消息發送到/run/systemd/journal/syslog和接收套接字作為打開的文件描述符或作為配置為/run/systemd/journal/syslog使用其打開和偵聽的直接服務(相當於rsyslog)imuxsock模組;並說 GNU C 庫協議
  • 可選的 syslog 或 rsyslog 或 syslog-ng 或 udp-syslog-read 服務,用於偵聽 RFC 5426 流量

如今,您的 systemd 作業系統具有:

  • systemd-journald再次執行上述所有操作並成為 GNU C 庫和 systemd C 庫與之通信的伺服器
  • 一個可選的 rsyslog 程序,作為直接服務而不是通過套接字呼叫,它使用其imjournal模組直接從 systemd 日誌文件中讀取內容
  • 可選的 syslog 或 rsyslog 或 syslog-ng 或 udp-syslog-read 服務,用於偵聽 RFC 5426 流量

進一步閱讀

引用自:https://unix.stackexchange.com/questions/332274