功能描述
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
