Linux脚本(2)__到服务器log文件上抓异常信息并统计后发邮件
作用:到服务器的log文件中查找关键字,并进行统计.最后发邮件.
使用到的主要命令:
mutt 发送邮件
grep 查找内容
sort 排序
head 截取文件
uniq 统计
废话不多说,直接上脚本:
1 #!/bin/sh 2 cd /data/script/grep_exception 3 export PATH="/usr/kerberos/bin:$PATH" 4 export KRB5CCNAME=/tmp/krb5cc_pub_$$ 5 trap kdestroy 0 1 2 3 5 15 6 kinit -k -t /etc/krb5.keytab 7 8 TODAY="`date -d "today" +%Y%m%d%H%M`" 9 LOG_FILE=rs/exception.log 10 HOSTS=hostlist.txt 11 12 #reset lof file 13 cat /dev/null > ${LOG_FILE} 14 for SERVER in `cat ${HOSTS} |grep -v "#"|sort|uniq` 15 do 16 echo "====================================="${SERVER}"=====================================" 17 CONTENT1="`ssh web@${SERVER} "cat /data/logs/server.log | grep Exception | sort | uniq -c | sort -nr | head -n 50"`" 18 if [ -n "${CONTENT1}" ]; then 19 echo "[${SERVER}]" >> ${LOG_FILE} 20 echo "${CONTENT1}" >> ${LOG_FILE} 21 echo "" >> ${LOG_FILE} 22 echo "============== `hostname` ==========" >> ${LOG_FILE} 23 echo "" >> ${LOG_FILE} 24 fi 25 done 26 27 #send mail 28 if [ -s "${LOG_FILE}" ]; then 29 echo "over" | mutt -F ./muttrc.q -s "[Server] LOG STATISTICS ${TODAY}" -i "${LOG_FILE}" admin@admin.com,dev@admin.com 30 fi
具体解释一下这里:
1 cat /data/logs/server.log | grep Exception | sort | uniq -c | sort -nr | head -n 50
cat后现实文件内容
grep后仅显示包含"Exception"的行
sort后把相同的行排列到一起
uniq -c去除相同行;-c添加数量统计
sort -nr 按照数字倒序排列 这样就会把出现次数最多的异常显示在最前边.
head -n 50 只取头50行
发邮件部分:
1 mutt -F ./muttrc.q -s "[Server] LOG STATISTICS ${TODAY}" -i "${LOG_FILE}" admin@admin.com,dev@admin.com
mutt是linux发邮件的命令
-F 指定./muttrc.q为mutt的配置文件
-s 指定邮件的主题。
-i 指定文件
关于mutt具体可以参考 http://blog.sina.com.cn/s/blog_6cde2617010142kp.html
之后再把这个sh脚本加入到crontab中即可实现定时发送异常监控邮件的功能.