Linux 服務(wù)器日志文件查找技巧精粹
來源:程序員人生 發(fā)布時(shí)間:2014-04-07 02:32:04 閱讀次數(shù):3887次
用來在日志文件里搜索特定活動(dòng)事件的工具不下幾十種,本文將介紹搜索日志文件時(shí)應(yīng)該采取的策略。然后,通過幾個(gè)具體示例介紹一些使用grep命令手動(dòng)搜索日志文件的辦法。接下來,我們將看到logwatch工具和logsurfer工具的用法。最后,將看到需要自行下載和安裝的工具,如swatch等。
1、查找日志文件簡(jiǎn)單方法
一般來說,系統(tǒng)日志文件幾乎都保存在/var/子目錄(該路徑由syslog.conf文件定義)。如果想讓所有的應(yīng)用程序都把日志文件集中存放到/var/子目錄下,需要依次對(duì)每一個(gè)應(yīng)用程序的配置文件進(jìn)行編輯。把日志集中到/var/子目錄下是個(gè)很好的主意。首先,當(dāng)需要查看它們、修改它們的權(quán)限或者對(duì)它們進(jìn)行備份的時(shí)候,只要到一個(gè)地方就可以找到所有的日志文件。
其次,/var/子目錄通常是在一個(gè)獨(dú)立于根目錄(/)的文件系統(tǒng)里,這有助于防止日志文件迅速變大并占滿可用空間,避免操作系統(tǒng)和應(yīng)用程序受到影響。可以利用find命令把你不知道的日志文件查找出來具體做法是:先切換到根目錄下,然后以根用戶(root)身份執(zhí)行下面這條命令把最近被修改過的文件全部找出來:
find . -type f -mtime -5 –print | grep -v proc | grep -v lock
2、搜索日志文件時(shí)的策略
日志文件分析工作中的第一個(gè)挑戰(zhàn)是把異常活動(dòng)從正常活動(dòng)中識(shí)別出來。完成這項(xiàng)挑戰(zhàn)的前提是你必須知道系統(tǒng)和網(wǎng)絡(luò)上的正常活動(dòng)在日志文件里是什么樣子。如果沒有事先積累的經(jīng)驗(yàn),很難知道按規(guī)律發(fā)生的事件在日志文件里的表現(xiàn)。熟悉正常的日志文件活動(dòng)要有一個(gè)時(shí)間過程,要求大家一上來就把日志文件看明白顯然不現(xiàn)實(shí),這是一個(gè)需要時(shí)間積累的過程。
要知道,隨著網(wǎng)絡(luò)上的應(yīng)用程序和用戶的數(shù)量不斷增減和變化,日志文件的內(nèi)容肯定會(huì)發(fā)生相應(yīng)的改變。把異常情況孤立出來之后,接下來的步驟是正確地判斷這種異常情況是否屬于警報(bào)條件。要想正確地做出判斷,只能通過加深對(duì)公司日常活動(dòng)的了解才能做到。往往需要在系統(tǒng)的可用性與防范風(fēng)險(xiǎn)之間把握一種平衡。
3、以手動(dòng)方式搜索日志文件
grep是Unix系統(tǒng)上功能最強(qiáng)大的shell命令之一。利用grep命令在日志文件里搜索各種可疑線索是這個(gè)文本文件搜索命令的絕佳用途。grep命令的用法很簡(jiǎn)單——在命令行上輸入:
grep "failed" /var/log/messages
上面這條grep命令將把/var/log/messages文件里包含單詞“failed”的文本行全部找出來。在默認(rèn)情況下,grep命令是大小寫敏感的,你可能需要根據(jù)具體情況使用grep命令和它的“-i”選項(xiàng)來進(jìn)行對(duì)大小寫不敏感的搜索。搜索日志文件的挑戰(zhàn)之一是你必須先知道自己想找什么東西,然后才可以把可能存在的這個(gè)東西找出來。有幾種辦法可以幫助解決這一問題。
如果你知道自己想找的事件或活動(dòng)——比如,用戶試圖使用su命令切換為根用戶——可以先自己進(jìn)行一次這樣的活動(dòng),然后去日志文件里看看它是什么樣子。比如,在SUSE Linux系統(tǒng)上,執(zhí)行失敗的su命令將在日志文件里留下這樣一條記錄:
Apr 1 11:15:54 chim su: FAILED SU (to root) rreck on /dev/pts/1
于是,如果想把所有這類活動(dòng)都查出來,應(yīng)該使用下面這樣的命令:
grep "FAILED SU" /var/log/messages
上面示例里的活動(dòng)是黑客攻擊的一種標(biāo)志。如果grep命令只在日志文件里零零散散地找到了幾個(gè)這樣的失敗事件,那很可能是有人忘記了口令字或者是打字時(shí)出現(xiàn)了錯(cuò)誤。反之,如果grep命令在日志文件里找到幾十個(gè)這樣的失敗事件,很可能是有人在試圖闖入你的系統(tǒng),應(yīng)該立刻采取措施在網(wǎng)絡(luò)級(jí)拒絕他們的訪問。
4、使用logsurfer工具搜索日志文件
logsurfer是一個(gè)日志文件搜索工具。與swatch等日志搜索工具相比,logsurfer允許人們做出更細(xì)致的決定。與其他日志搜索程序相似,logsurfer工具也是把日志文件里的每一行與一些規(guī)則表達(dá)式進(jìn)行匹配,每找到一個(gè)匹配就相應(yīng)地執(zhí)行某個(gè)動(dòng)作,而那些動(dòng)作被表達(dá)為“規(guī)則”。logsurfer工具在某些方面比swatch工具做得還要好。
首先,logsurfer工具使用兩組規(guī)則表達(dá)式匹配文本行;日志文件中的文本行必須匹配第一組表達(dá)式,但不需要匹配可選的第二組表達(dá)式。這種安排在某些場(chǎng)合非常有用,它可以讓人們方便地排除異常情況。logsurfer工具的另外一個(gè)突出優(yōu)點(diǎn)是它可以結(jié)合上下文進(jìn)行檢查而不是只檢查單個(gè)的文本行。這很方便,因?yàn)槿罩疚募锏膯为?dú)一行文本往往不足以包含做出某個(gè)決定所需要的信息。
要說不足,不少人認(rèn)為logsurfer工具比較難以配置,因?yàn)閷?duì)它進(jìn)行配置必須精通規(guī)則表達(dá)式,而且它本身提供的配置示例不夠多。如果想了解更多關(guān)于logsurfer工具的信息,它的man文檔是最好的地方。列在表1里的細(xì)節(jié)都可以在這個(gè)工具的man文檔里查到。logsurfer配置文件里的每
一行可以是以下三種情況之一:如果第一個(gè)字符是“#”,它是一個(gè)注釋行;如果第一個(gè)字符是空格,它是上一行的繼續(xù);如果第一個(gè)字符既不是“#”也不是空格,它是一條新規(guī)則的開始。每條新規(guī)則由六個(gè)必要字段(第1、2、3、4、5、7字段)和一個(gè)可選字段(第6字段)組成,對(duì)這七個(gè)字段的詳細(xì)解釋見表1。
表1 logsurfer配置行上的各個(gè)字段
字段編號(hào)
是否是可選
字段名
字段解釋
1
必要
match_regex
“字段1”被解釋為一個(gè)規(guī)則表達(dá)式。如果文本行匹配“字段1”(match_regex),按后續(xù)各項(xiàng)定義依次處理;如果不匹配,logsurfer將用下一條規(guī)則匹配這個(gè)文本行,本規(guī)則后續(xù)各項(xiàng)定義不起作用
2
必要或-
not_match_regex
這個(gè)字段將被解釋為一個(gè)規(guī)則表達(dá)式。用“字段1”(match_regex)匹配到的文本行只有在不匹配“字段2”(not_match_regex)的情況下才繼續(xù)按后續(xù)各項(xiàng)定義依次處理
3
必要或-
stop_regex
如果不是減號(hào)(-)字符,本字段將被解釋為一個(gè)規(guī)則表達(dá)式。如果這個(gè)表達(dá)式得到匹配,本規(guī)則將從活躍規(guī)則表里被刪除
4
必要或-
not_stop_regex
如果不是減號(hào)(-)字符,本字段將被解釋為一個(gè)規(guī)則表達(dá)式。只有在“字段3”(stop_regex)存在且已得到匹配和“字段4”(not_stop_regex)不匹配的情況下才刪除這個(gè)規(guī)則
5
必要或0
timeout
以秒計(jì)算logsurfer規(guī)則的壽命,把“字段5”設(shè)置為0表示規(guī)則永遠(yuǎn)有效
6
可選
Continue
如果這個(gè)字段被設(shè)置為“continue”,logsurfer將繼續(xù)使用下一條規(guī)則來匹配文本行;如果沒有“continue”,后續(xù)的規(guī)則將全部被跳過
7
必要
Action
以下幾種動(dòng)作之一:ignore、exec、pipe、open、delete、report、rule
表2 logsurfer動(dòng)作解釋
動(dòng)作名稱
解釋
Ignore
什么都不做,忽略被匹配到的文本行。有時(shí)候,雖然用logsurfer工具找到了一些日志文本行,但如果知道它們并不重要,可以用這個(gè)動(dòng)作不讓logsurfer發(fā)出警報(bào)
exec
這個(gè)動(dòng)作的參數(shù)被解釋為一個(gè)程序,規(guī)則得到匹配時(shí)logsurfer將調(diào)用該程序
pipe
類似于exec動(dòng)作,但被調(diào)用的程序?qū)膕tdin設(shè)備讀入一個(gè)日志文本行
open
增加(打開)一個(gè)新的上下文,但在匹配match_regex(“字段1”)時(shí)已經(jīng)存在的上下文就不必再次打開了
Delete
如果一個(gè)現(xiàn)已存在的match_regex被用做這個(gè)動(dòng)作的參數(shù),指定的上下文將被關(guān)閉并刪除,而且不采取“default_action”選項(xiàng)定義的默認(rèn)動(dòng)作
report
這個(gè)動(dòng)作的第1個(gè)參數(shù)是一個(gè)將被調(diào)用執(zhí)行的程序(及其命令行選項(xiàng))。隨后的參數(shù)是一些將被用做該程序的標(biāo)準(zhǔn)輸入的上下文定義
Rule
這個(gè)動(dòng)作將創(chuàng)建一條新規(guī)則。關(guān)鍵字“rule”的后面必須有一個(gè)告訴logsurfer按什么順序使用新規(guī)則的指示符:before(在本規(guī)則之前使用)、behind(在本規(guī)則之后使用)、top(在本配置文件所有規(guī)則之前使用)、bottom(在本配置文件所有規(guī)則之后使用)
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)