為了保證Linux系統正常運行、准確解決遇到的各種各樣的系統問題,認真地讀取日志文件是系統管理員的一項非常重要的任務。本文將簡單解釋什麼是日志文件、在哪裡可以找到日志文件以及如何處理它們。
Linux內核由很多子系統組成,包括網絡、文件訪問、內存管理等。子系統需要給用戶傳送一些消息,這些消息內容包括消息的來源及其重要性等。所有的子系統都要把消息送到一個可以維護的公用消息區,於是,就有了一個叫Syslog的程序。
Syslog程序有什麼用
系統核心和許多系統程序會產生錯誤信息、警告信息和其他信息。這些信息很重要的,所以它們應該被寫到一個文件。執行這個過程的程序就是Syslog,它能設置成根據輸出信息的程序或重要程度將信息排序到不同的文件。例如,由於核心信息更重要且需要有規律地閱讀以確定問題出在哪裡,所以要把核心信息與其他信息分開來,單獨定向到一個分離的文件中。
日志文件通常存放在“/var/log”目錄下。為了查看日志文件的內容必須要有“Root”權限。日志文件中的信息很重要,只能讓超級用戶有訪問這些文件的權限。
查看日志文件
日志文件其實是純文本的文件,每一行就是一個消息。只要是在Linux下能夠處理純文本的工具都能用來查看日志文件。日志文件總是很大的,因為從你第一次啟動Linux開始,消息就都累積在日志文件中。看日志文件的一個比較好的方法是用像More或Less那樣的分頁顯示程序,或者用Grep查找特定的消息。我們先用Less顯示“/var/log/messages”,可以看到從日志文件中取出來的一些消息。每一行表示一個消息,而且都由四個域的固定格式組成:
*時間標簽(Timestamp),表示消息發出的日期和時間。
*主機名(Hostname),表示生成消息的計算機的名字。如果只有一台計算機,主機名就可能沒有必要了。但是,如果在網絡環境中使用Syslog,那麼就可能要把不同主機的消息發送到一台服務器上集中處理。在我們的例子中主機名為lcbj。
*生成消息的子系統的名字。可以是“Kernel”,表示消息來自內核或者是進程的名字,表示發出消息的程序的名字。在方括號裡的是進程的PID。
*消息(Message),即消息的內容。
圖1中,第一行是Sendmail發出的消息,Sendmail守護進程(Daemon)負責管理收到和發出的消息。這一行是守護進程正常啟動的消息。
第二行是來自Passwd的消息,提醒用戶“Progs”的口令被“Root”改變過。以後的其他消息,是向用戶報告系統的運行情況。
實際上在“/var/log/message”文件中的消息都不是特別重要或緊急的。
有一個很有趣的消息是“MARK”消息,在默認情況下每隔20分鐘就會生成一次表示系統還在正常運行的消息。“MARK”消息很像經常用來確認遠程主機是否還在運行的“心跳信號”(Heartbeat)。“MARK”消息另外的一個用途是用於事後分析,能夠幫助系統管理員確定系統死機發生的時間。
配置日志
讓我們仔細地研究一下Syslog守護進程的運行情況吧。這個程序是在後台運行,從系統中獲取新的消息,並把消息發送到合適的地方。每一個子系統發出日志消息的時候都會給消息指定一個類型。一個消息可以分成兩個部分:“設備”和“優先級”。“設備” 表示發出消息的子系統,“優先級”表示消息的重要性,其范圍從0(最重要)到7(最不重要)。請見圖2
Syslog的基本配置是很簡單的,而進行一些高級特性的配置需要一些經驗。我們現在看看基本的配置,也就是根據“設備”和“優先級”確定哪些文件應該收到哪些消息。可以通過編輯文件(通常是“/etc/syslog.conf”)對任務進行定制。以“#”號開頭的行都是注釋行。其他的一些行也很容易理解,它們是由兩個域組成,分別是“選擇器(Selector)”和“動作(Action)”。“選擇器”用相應的“設備”和“優先級”(都可以用“*”通配符表示“任何一個”)來表示消息的類型。“動作”表示一旦有一個新的消息和“選擇器”相匹配的時候要采取什麼行動。
圖3中,你會發現“優先級”等於“Info”和“Notice”的消息,無論它們的“設備”是什麼,都發到“/usr/adm/messages”文件,因為在“選擇器”中使用了通配符。同樣“優先級”為“Debug”和“Err”的消息都分別送到“/usr/adm/debug”和“/usr/adm/syslog”文件。
編輯完“/etc/syslog”文件之後,還必須運行“Killall -HUP Syslogd”,這樣所做的改變才會生效。這個命令發送“HUP”信號給Syslog守護進程,通知守護進程重新讀取配置文件。
日志文件對於管理員來說很重要,通過對日志文件的管理,可以更好地維護系統,保障各種應用的正常進行。