Java 常见异常报警脚本
Java 常见异常报警脚本
1.首先确定需要监控的java应用的日志目录
2.考虑需要报警间隔多久
3.常见报错(ArithmeticExecption,NullPointerException,ClassCastException,
NegativeArrayException,ArrayIndexOutOfBoundsException,
SecturityException,EOFException,FileNotFoundException,
NumberFormatException,SQLException,IOException,NoSuchMethodException,
SocketTimeoutException)
4.进行钉钉报警
todo :自动识别服务,识别IP,支持多个应用
具体代码如下:
#!/bin/bash
#日志路径
server1='/xxx/xx.log'
#当前时间前一分钟,精确到分
curdate=`date -d "11 minute ago" +"%Y-%m-%d %H:%M"`
curdate_1=`date -d "1 minute ago" +"%Y-%m-%d %H:%M"`
#获取server要截取日期日志的开始和结束行号
start_line=`cat -n $server1 | grep "${curdate}" | head -1 | cut -f1`
end_line=`cat -n $server1 | grep "${curdate_1}" | tail -1 | cut -f1`
#获取server要截取日期日志的开始和结束行号
sed -n "${start_line},${end_line}p" $server1 > /opt/log_err/xxx.log
#清空错误日志文件
> /opt/log_err/xxx_err.txt
#将报错信息写入文件
err_list=(ArithmeticExecption NullPointerException ClassCastException NegativeArrayException ArrayIndexOutOfBoundsException SecturityException EOFException FileNotFoundException NumberFormatException SQLException IOException NoSuchMethodException SocketTimeoutException)
for i in ${err_list[*]}; do
cat /opt/log_err/xxx.log | grep -C 20 ERROR | grep -v INFO | grep -C 1 ${i} >> /opt/log_err/unify-basic_err.txt
done
alarm(){
atMobiles=
keyword="告警"
dintalkurl="https://oapi.dingtalk.com/robot/send?access_token=xxxxx"
curl ${dintalkurl} \
-H "Content-Type: application/json" \
-d '{"msgtype": "markdown",
"markdown": {
"title": "java出现异常",
"text": "'"${larm_msg}"'"
},"at": {
"atMobiles": ['${atMobiles}']
}
}'
}
all_num=0
if [ -s /opt/log_err/unify-basic_err.txt ]; then
for e in ${err_list[*]}; do
num=`cat /opt/log_err/unify-basic_err.txt | grep ${e} |wc -l`
all_num=$(expr $all_num + $num)
done
msg1=`cat /opt/log_err/unify-basic_err.txt | grep -C 2 ERROR | tail -3`
larm_msg="#### 收到告警@${curdate_1} \n - **告警主机:** xxxx \n - **IP地址:** xxxx \n - **告警信息:** java Exception \n - **告警时间:** ${curdate_1} \n - **告警项目:** unify-basic \n - **详细信息:** $msg1"
alarm
fi

0 评论