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