功能描述
1、腳本截取服務器一個時間段內的日志tomcat.out,根據預先保存的異常關鍵詞文件error_keyword.txt,提取日志中包含關鍵詞的異常結果另存為文件(result+時間.txt);
2、腳本定時執行,每5分鍾執行一次。
思路
1、執行get_Tomcatlog_Error腳本,讀取time_cache.txt中記錄的時間點,截取按該時間點到當前時間之間的日志內容,保存到臨時文件log_temp.txt。
2、將NullPointerException等異常關鍵字放入error_keyword.txt文件中,把log_temp.txt包含這些關鍵字的內容,輸出並另存到result文件夾中。
3、根據運維實際需要,后續可使用zabbix將結果發送,或者直接將結果郵件發送給相關人員。

腳本內容
1 #!/bin/bash 2 time_today=`date -d now "+%Y-%m-%d"` 3 #取出當前時間作為讀取結束時間 4 time_endRead=`date -d now "+%H:%M:%S"` 5 #取出時間加1秒 6 time_startRead=`date -d "$(cat /data/shell/time_cache.txt) 1 second" "+%H:%M:%S"` 7 #取出時間段內的日志 8 #假如取出的時間是上一天的時間,可能比當前時間要大,做判斷 9 if [ `date -d "${time_startRead}" +%s` -gt `date -d "${time_endRead}" +%s` ] 10 then
11 awk 'BEGIN{RS="'"${time_today}"'"}$1>"00:00:00" && $1<"'"${time_endRead}"'"{printf("%s","NOTE-Tab:"$0)}' /usr/share/tomcat7/logs/tomcat.out >/data/shell/log_temp.txt 12 else
13 awk 'BEGIN{RS="'"${time_today}"'"}$1>"'"${time_startRead}"'" && $1<"'"${time_endRead}"'"{printf("%s","NOTE-Tab:"$0)}' /usr/share/tomcat7/logs/catalina-daemon.out >/data/shell/log_temp.txt 14 fi
15 #根據關鍵詞遍歷該時間段內日志,將結果輸出 16 cat /data/keywords/error_keyword.txt|while read keyword 17 do
18 cat /data/shell/log_temp.txt | awk 'BEGIN{RS="NOTE-Tab:"}/'"${keyword}"'/{print $0"=====================\n"}' >>/data/logs/icrm/error/errorResult_"${time_today}"_"${time_endRead}".txt 19 done
20 #把本次讀取的最終時間寫入到time_cache.txt文件,作為下次讀取的起始時間 21 echo "${time_endRead}" > /data/shell/time_cache.txt
過程問題匯總
Q1、按時間段提取服務器日志時,選擇sed還是awk?
time_startRead="07:49:36" time_endRead=`date -d now "+%H:%M:%S"` sed -n "/${time_startRead}/,/${time_endRead}/p" log.txt >test.txt
使用sed取倆個時間點時,倆個時間點必須均存在於日志中,否則取不到數據,所以建議用awk。
另外,如果使用sed截取時間段內服務器日志,引用時間變量時,不能用單引號只能用雙引號,否則執行無效。參考:
Q2、if判斷倆個時間大小,使用大於號時,執行腳本后會自動生成空的時間文件


初步懷疑是執行腳本后, > 號不是作為判斷,而是被執行為重定向輸出。
因此,判斷時間大小時,將時間轉換為時間戳,再使用-gt進行判斷,即
if [ `date -d "${time_startRead}" +%s` -gt `date -d "${time_endRead}" +%s` ]
Q3、awk輸出行內容,使用printf,當行內容較大時報“fatal: not enough arguments to satisfy format string”
awk中使用printf時,要加%s,否則報如上錯誤,參考:https://blog.csdn.net/wireless_tech/article/details/6576861
