Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 日誌系統運作機制深度解析:從 dmesg 到 syslogd 的完整流程

編輯:Linux 教學

前言

Linux 系統日誌是系統管理、故障診斷與安全稽核的核心依據。但你知道這些日誌訊息是如何產生、傳遞、儲存的嗎?本文將從核心環緩衝區、dmesg 指令、syslogd/klogd 守護行程,到 /var/log 目錄下的檔案分類,完整揭示日誌處理的來龍去脈。

一、核心環緩衝區與 dmesg

1. dmesg 的本質

dmesg 用於列印或控制核心環緩衝區。核心透過 printk() 將訊息寫入環緩衝區,dmesg 即從中讀取並顯示。啟動時螢幕顯示的核心訊息,同樣來源於此。

2. 環緩衝區特性

  • 固定大小的循環緩衝區,新訊息會覆蓋舊訊息。
  • 訊息帶有優先級(如 <0>、<2>),高優先級會直接輸出到主控台,低優先級僅留在緩衝區。
  • 預設大小隨核心版本演進:早期 4096、1.3.54 後 8192、2.1.113 後 16384 位元組。

3. 常用參數

參數說明
-c列印後清除環緩衝區內容
-s bufsize指定查詢緩衝區大小,預設 16392
-n level設定主控台輸出的訊息等級(如 -n 1 僅顯示 panic)

二、syslogd 與 klogd:日誌的分流與持久化

1. 兩個守護行程的角色

  • klogd:負責從核心取得訊息,兩種方式:syslog() 系統呼叫、直接讀取 /proc/kmsg。
  • syslogd:接收 klogd 傳來的核心訊息,以及使用者空間程式透過 syslog() 傳送的訊息,依 /etc/syslog.conf 規則寫入 /var/log/ 下對應檔案。

2. 啟動流程

系統啟動時,/etc/init.d/sysklogd 依序啟動 klogd 再 syslogd。

3. 訊息流向圖解

核心 printk() → 環緩衝區 → klogd (syslog()/proc/kmsg) → syslogd → /etc/syslog.conf → /var/log/*.log
                         ↑
                    dmesg 直接讀取

三、/var/log 目錄下的檔案分類

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開機核心環緩衝區內容(部分發行版)

四、總結:日誌處理完整鏈路

  1. 所有系統訊息(含核心)輸出到核心環緩衝區;dmesg 直接讀取該緩衝區。
  2. /etc/init.d/sysklogd 啟動 klogd 與 syslogd 兩個守護行程。
  3. klogd 透過 syslog() 或讀取 /proc/kmsg 取得核心訊息。
  4. syslogd 接收 klogd 轉發的核心訊息及用戶程式訊息,依 /etc/syslog.conf 分流寫入 /var/log/ 下對應檔案。

實務建議

  • 善用 dmesg -T 加上人類可讀時間戳記。
  • 配合 logrotate 定期輪轉、壓縮舊日誌,避免磁碟爆滿。
  • 集中式日誌管理可考慮 rsyslog + Elasticsearch/Graylog 架構。
Copyright © Windows教程網 All Rights Reserved