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