萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 日誌系統架構全景:Syslog 協議、字段結構、守護進程與 rsyslog 實作

Linux 日誌不僅是文字檔案,更是結構化事件流。本文系統闡述 Syslog 三重含義 (守護進程/協議/訊息格式)、標準字段結構 (PRI、時間戳、HOSTNAME、APP-NAME、PROCID、MSGID)、rsyslog 實作架構,助你從「看日誌」進階到「管日誌」。

一、 系統日誌自動創建來源

核心日誌位於 /var/log/,由 syslog 守護進程 接收、處理、寫入:

二、 Syslog 三重含義

日誌檔內容典型發行版路徑
系統活動開機、服務啟停、核心事件Debian/Ubuntu: /var/log/syslog
RHEL/CentOS: /var/log/messages
認證授權登入成功/失敗、sudo、PAM 事件Debian/Ubuntu: /var/log/auth.log
RHEL/CentOS: /var/log/secure
核心日誌內核錯誤、警告、驅動程式訊息/var/log/kern.log 或 dmesg
定時任務cron 執行記錄/var/log/cron

三、 Syslog 訊息格式與字段 (RFC 5424)

<34>1 2003-10-11T22:14:15.003Z server1.com sshd - - pam_unix(sshd:auth): authentication failure

標準 Header 字段

含義描述典型實現
Syslog 守護進程接收、處理、轉發日誌訊息的程式rsyslogd、syslog-ng、systemd-journald
Syslog 協議 (RFC 5424)網絡傳輸協議 (UDP 514 / TLS 6514) + 訊息格式定義遠程日誌聚合、SIEM 對接
Syslog 訊息符合 RFC 5424 格式的結構化事件程式主動發送、庫函數 syslog()
字段範例值說明
PRI (優先級)<34>Facility×8 + Severity。Facility: 0=kern, 1=user... 23=local7; Severity: 0=emerg ... 7=debug
VERSION1協議版本 (RFC 5424 = 1)
TIMESTAMP2003-10-11T22:14:15.003ZRFC 3339 格式,Z=UTC,可帶時區偏移如 -08:00
HOSTNAMEserver1.com發送主機名 (或 IP、FQDN)
APP-NAMEsshd產生訊息的應用程式名
PROCID-進程 ID,無則為 -
MSGID-訊息類型標識,無則為 -
STRUCTURED-DATA-結構化數據 (SD-ELEMENT),無則為 -
MSGpam_unix(...): authentication failure自由文本訊息內容

PRI 計算與解讀


# 數值計算
PRI = Facility × 8 + Severity

# 文本格式 (推薦,易搜尋)
PRI = "facility.severity"  # 如 "authpriv.err"

Severity 等級 (0-7)

0 Emergency  系統不可用
1 Alert      需立即處理
2 Critical   嚴重錯誤
3 Error      錯誤
4 Warning    警告
5 Notice     正常但重要事件
6 Informational  一般資訊
7 Debug      除錯資訊

四、 rsyslog 實作架構


[應用/內核] → /dev/log (Unix Socket) → [rsyslogd 主進程]
                                                      │
                        ┌─────────────────────────────┼─────────────────────────────┐
                        ▼                             ▼                             ▼
               [本地檔案規則]                   [遠程轉發規則]                  [資料庫/其他模組]
               /var/log/syslog                  @logserver:514                ommysql/omelasticsearch
               /var/log/auth.log                @@logserver:6514 (TLS)

五、 關鍵配置片段 (/etc/rsyslog.conf)


# 模組載入
module(load="imuxsock")   # 本地 Unix Socket
module(load="imklog")     # 內核日誌
module(load="imtcp")      # TCP 接收
module(load="omfile")     # 檔案輸出

# 模板: 標準 RFC 5424 格式
template(name="RFC5424" type="list") {
    property(name="pri")
    constant(value=" ")
    property(name="protocol-version")
    constant(value=" ")
    property(name="timereported" dateFormat="rfc3339")
    constant(value=" ")
    property(name="hostname")
    constant(value=" ")
    property(name="app-name")
    constant(value=" ")
    property(name="procid")
    constant(value=" ")
    property(name="msgid")
    constant(value=" ")
    property(name="msg")
    constant(value="\n")
}

# 規則: 所有 authpriv.* 寫入 /var/log/secure
authpriv.*    /var/log/secure;RFC5424

# 規則: 遠程轉發 (TCP + TLS)
*.*     @@(o)logserver.example.com:6514;RFC5424

Syslog 架構圖

現代趨勢:systemd-journald 取代傳統 syslog 成為核心收集器,支援二進制索引、字段索引、ACL、轉發到 rsyslog/Elasticsearch。建議新部署採用 journald → rsyslog → 遠程存儲 架構。
copyright © 萬盛學電腦網 all rights reserved