Linux如何分析和排查系統故障——分析日志文件
在處理Linux系統出現的各種故障時,故障的癥狀是最易發現的,而導致這一故障的原因才是最終排除故障的關鍵。熟悉Linux系統中常見的日志文件,了解一般故障的分析與解決辦法,將有助于管理員快速定位故障點,"對癥下藥",及時解決各種系統問題。
日志的功能
- 用于記錄系統、程序運行中發生的各種事件
- 通過閱讀日志,有助于診斷和解決系統故障
一、主要日志文件
1.主要的日志類型:
- 內核及系統日志
由系統服務syslog統一進行管理,日志格式基本相似
- 用戶日志
記錄系統用戶登錄及退出系統的相關信息
- 程序日志
由各種應用程序獨立管理的日志文件,記錄格式不統一
注:Linux系統本身和大部分服務器程序的日志文件默認都放在目錄/var/log/下。一部分程序共用一個日志文件,一部分程序使用單個日志文件,而有些大型服務器程序由于日志文件不知一個,所以會在/var/log/目錄中建立相應的子目錄來存放日志文件,這樣既保證了日志文件目錄的結構清晰,又可以快速定位日志文件。有相當一部分日志文件只有root用戶才有權讀取,這保證了相關日志信息的安全性。
2.常見的日志文件
對于Linux系統中的日志文件,有必要了解其各自的用途,這樣才能在需要的時候更快地找到問題所在,及時解決各種故障。
- /var/log/messages:記錄Linux內核消息及各種應用程序的公共日志信息,包括啟動、I/O錯誤、網絡錯誤、程序故障等。對于未使用獨立日志文件的應用程序或服務,一般都可以從該日志文件中獲取相關的記錄信息。
- /var/log/cron:記錄crond計劃任務產生的事件信息。
- /var/log/dmesg:記錄Linux系統在引導過程中的各種事件信息。
- /var/log/maillog:記錄進入或發出系統的電子郵件活動。
- /var/log/lastlog:記錄每個用戶最近的登錄事件。
- /var/log/secure:記錄用戶認證相關的安全事件信息。
- /var/log/wtmp:記錄每個用戶登錄、注銷及系統啟動和停機事件。
- /var/log/btmp:記錄失敗的、錯誤的登錄嘗試及驗證事件。
圖示:
二、日志文件分析
對于大多數文本格式的日志文件(如內核及系統日志、大多數的程序日志),只要使用tail、more、less、cat(這些命令我以前都分享過,感興趣的話,可以在我的主頁找一下)等文本處理工具就可以查看日志內容。而對于一些二進制格式的日志文件(如用戶日志),則需要使用特定的查詢命令。
1.內核及系統日志
由系統服務 rsyslogd 統一管理
軟件包:rsyslog-5.8.10-8.el6.x86_64
主要程序:/sbin/rsyslogd
配置文件:/etc/rsyslog.conf,通過查看/etc/rsyslog.conf文件中的內容,可以了解到系統默認的日志設置。
示例:
從配置文件/etc/rsyslog.conf中可以看到,受rsyslogd服務管理的日志文件都是Linux系統中最主要的日志文件,它們記錄了Linux系統中內核、用戶認證、郵件、計劃任務等最基本的系統消息。在Linux內核中,根據日志消息的重要程度不同,將其分為不同的優先級別(數字等級越小優先級越高,消息越重要)。
日志消息的級別(這個很重要)
- 0 EMERG(緊急):會導致主機系統不可用的情況
- 1 ALERT(警告):必須馬上采取措施解決的問題
- 2 CRIT(嚴重):比較嚴重的情況
- 3 ERR(錯誤):運行出現錯誤
- 4 WARNING(提醒):可能會影響系統功能的事件
- 5 NOTICE(注意):不會影響系統但值得注意
- 6 INFO(信息):一般信息
- 7 DEBUG(調試):程序或系統調試信息等
內核及大多數系統消息都被記錄到公共日志文件/var/log/messages中,而其他一些程序消息被記錄到各自獨立的日志文件中,此外日志消息還能夠記錄到特定的存儲設備中,或者直接發送給指定用戶。查看/var/log/messages文件中內容如下:
如上圖所示:對于rsyslog服務統一管理的大部分日志文件,使用的日志記錄格式基本都是相同的。每一行表示一條日志消息,每一條消息均包括四個字段:
- 時間標簽:消息發出的日期和時間。
- 主機名:生成消息的計算機名稱。
- 子系統名稱:發出消息的應用程序的名稱。
- 消息:消息的具體內容。
注:在有些情況下,可以設置rsyslog,使其把日志信息記錄到文件的同時將日志信息發送到打印機進行打印,這樣無論網絡入侵者怎樣修改日志都不能清除入侵的痕跡。Rsyslog日志服務是一個常會被攻擊的顯著目標,破壞了它將會使管理員難以發現入侵及入侵痕跡,因此要特別注意監控其守護進程及配置文件。
2.用戶日志
在var/log下的wtmp、btmp、lastlog等日志文件中,保存了系統用戶登錄、退出等相關的事件消息。但是這些文件都是二進制的數據文件、不能直接使用tail、less等文本工具進行瀏覽,需要使用who、w、users、last和lastb等用戶查詢命令來獲取日志信息。
1) 查詢當前登錄的用戶情況——users、who、w
users命令:只簡單地輸出當前登錄的用戶名稱,每個顯示的用戶名對應一個登錄會話。
who命令:用于報告當前登錄到系統中的每個用戶的信息。默認輸出信息包括用戶名、終端類型、登錄日期及遠程主機。
w命令:用于顯示當前系統中每個用戶及其所運行的進程信息,輸出的信息比users、who更豐富。
示例:
2) 查詢用戶登錄的歷史記錄——last、lastb
last命令:用于查詢成功登錄到系統的用戶記錄,最近的登錄情況將顯示在最前面。
lastb命令:用于查詢登錄失敗的用戶記錄,如登錄名錯誤、密碼錯誤等情況。也可以直接從安全日志文件/var/log/secure中獲取相關信息
示例:
3.程序日志
在Linux系統中,還有相當一部分應用程序并沒有使用rsyslog服務來管理日志,而是由程序自己維護日志記錄。例如:
Web服務:/var/log/httpd/
access_log、error_log
代理服務:/var/log/squid/
access.log、cache.log、squid.out、store.log
FTP服務:/var/log/xferlog
總地來說,作為一名合格的系統管理人員,應該提高警惕,隨時注意各種可疑狀況,定期并隨機地檢查各種系統日志文件,包括一般信息日志、網絡連接日志、文件傳輸日志及用戶登錄日志記錄等。例如:
- 用戶在非正常規定的時間登錄,或者用戶登錄系統的IP地址和以往的不一樣。
- 用戶登錄失敗的日志記錄,尤其是那些一再連續嘗試進入失敗的日志記錄。
- 非法使用或不正當使用超級用戶權限。
- 無故或者非法重啟各項網絡服務的記錄。
- 不正常的日志記錄,如日志殘缺不全,或者是諸如wtmp這樣的日志文件無故缺少了中間的記錄文件。
另外,日志并不是完全可靠的,高明的黑客在入侵系統后,經常會打掃現場。所以需要綜合運用以上的系統命令,全面、綜合地進行審查和檢測,切忌斷章取義,否則可能做出錯誤的判斷。
三、日志管理策略
- 及時作好備份和歸檔
- 延長日志保存期限
- 控制日志訪問權限
日志中可能會包含各類敏感信息,如賬戶、口令等
- 集中管理日志
將服務器的日志文件發到統一的日志文件服務器
便于日志信息的統一收集、整理和分析
杜絕日志信息的意外丟失、惡意篡改或刪除