当前已经引入了自动化部署, 但是由于能力有限和其他限制, 目前只是通过监控端口是否存在来判断程序
正常启动与否. 常常 jenkins 上返回服务部署成功, 用户访问时却失败, 只能靠人手动登录系统查看日志进行判断, 反应不灵敏, 且 jenkins 已下放于各级开发人员操作
这引发了诸多不便和难以管理. 因此, 增加了启动日志关键字判断脚本, 当部署应用程序时, 会主动触发脚本进行关键字过滤, 达到退出条件时返回并发送提示信息.
目前收集到的关键字, 主要由以下:
- ^Caused by
- ^at
- Error
- Exception
废话不多说, 直接上脚本了.
- #!/bin/bash
- APP=$(cd `dirname $0`;pwd)
- # 判断应用程序是 jar 还是 tomcat
- FILETYPE=`ls *.jar &>/dev/null | wc -l`
- if [ ${FILETYPE} -eq 0 ];then
- LOGFILE=${APP}/logs/catalina.out
- else
- LOGFILE=`ls ${APP}/*.log`
- fi
- # 告警条件
- WARN=0
- # 当前读取的行数
- LAST=1
- # 当前环境所包含的地址有限, 故使用简单的正则收集
- MANAGERIP=`ip a | grep -E '192.168.15.|192.168.100.' | awk '{print $2}'`
- #`which tail` -fn 220 ${LOGFILE} | awk '/^Caused by|^ at |Error|Exception/{print }'
- while true
- do
- total_line=`wc -l $LOGFILE | awk '{print $1}'`
- line=`head -n $LAST ${LOGFILE} | tail -1`
- num=$(echo $line | awk '/^Caused by|^at |Error|Exception/{ print}' | wc -l)
- LAST=$(( LAST + 1 ))
- WARN=$(( WARN + num ))
- #退出条件的处理
- if [ ${LAST} -gt 1000 ];then
- break
- fi
- if [ ${WARN} -gt 10 ];then
- break
- fi
- if [ ${LAST} -eq 150 ];then
- sleep 1
- fi
- if [ ${LAST} -eq ${total_line} ];then
- if [ `echo $line | awk '/success/{print}'| wc -l` -ne 0 ];then
- break
- else
- if [ ${LAST} -lt 300 ];then
- continue
- fi
- fi
- fi
- done
- if [ ${WARN} -gt 9 ];then
- MESSAGE="路径:${APP}, 管理地址: ${MANAGERIP}, 启动出现错误, 请登录系统查看"
- else
- MESSAGE="路径:${APP}, 管理地址: ${MANAGERIP}, 启动成功"
- fi
- # 此处触发消息发送
- curl -X POST -H "'Content-type':'application/x-www-form-urlencoded', 'charset':'utf-8','Accept':'text/plain'" -d "${MESSAGE}" http://192.168.15.212:9000/alarm
- echo "success finished"
以上, 只是对日志中过滤关键字判断进行了简单的处理, 且个人能力有限, 未做深入探索
来源: http://www.bubuko.com/infodetail-2691724.html