Linux 系統日誌是系統管理、故障診斷與安全稽核的核心依據。但你知道這些日誌訊息是如何產生、傳遞、儲存的嗎?本文將從核心環緩衝區、dmesg 指令、syslogd/klogd 守護行程,到 /var/log 目錄下的檔案分類,完整揭示日誌處理的來龍去脈。
dmesg 用於列印或控制核心環緩衝區。核心透過 printk() 將訊息寫入環緩衝區,dmesg 即從中讀取並顯示。啟動時螢幕顯示的核心訊息,同樣來源於此。
<0>、<2>),高優先級會直接輸出到主控台,低優先級僅留在緩衝區。| 參數 | 說明 |
|---|---|
-c | 列印後清除環緩衝區內容 |
-s bufsize | 指定查詢緩衝區大小,預設 16392 |
-n level | 設定主控台輸出的訊息等級(如 -n 1 僅顯示 panic) |
syslog() 系統呼叫、直接讀取 /proc/kmsg。syslog() 傳送的訊息,依 /etc/syslog.conf 規則寫入 /var/log/ 下對應檔案。系統啟動時,/etc/init.d/sysklogd 依序啟動 klogd 再 syslogd。
核心 printk() → 環緩衝區 → klogd (syslog()/proc/kmsg) → syslogd → /etc/syslog.conf → /var/log/*.log
↑
dmesg 直接讀取
syslogd 依據 /etc/syslog.conf 的 facility.priority 規則,將不同服務的日誌導向不同檔案。常見檔案:
| 檔案 | 內容 |
|---|---|
/var/log/messages | 大多數系統訊息(非 debug、私有、認證、郵件) |
/var/log/secure | 安全/認證相關訊息(登入、sudo、SSH 等) |
/var/log/maillog | 郵件系統日誌 |
/var/log/cron | 定時任務執行記錄 |
/var/log/boot.log | 開機過程訊息 |
/var/log/dmesg | 開機核心環緩衝區內容(部分發行版) |
dmesg 直接讀取該緩衝區。/etc/init.d/sysklogd 啟動 klogd 與 syslogd 兩個守護行程。klogd 透過 syslog() 或讀取 /proc/kmsg 取得核心訊息。syslogd 接收 klogd 轉發的核心訊息及用戶程式訊息,依 /etc/syslog.conf 分流寫入 /var/log/ 下對應檔案。dmesg -T 加上人類可讀時間戳記。logrotate 定期輪轉、壓縮舊日誌,避免磁碟爆滿。rsyslog + Elasticsearch/Graylog 架構。