收到业务告警邮件,某个跑批未执行成功。结果是生产上跑批到某个时间点时,突然所有跑批都断批了,查看日志quartz也没有了调度日志,spring-batch也没有报错日志
排查了:
一、查看最后一次跑批内容、最后一条日志内容(info级别),考虑到无影响
二、查看uat是否有此现象,uat正常,对比生产、uat项目配置文件(包都是一样的,uat、pat配置做了分离)
三、服务节点是否有异常,申请重启跑批服务,跑批内部服务,对外无影响,结果无效
四、查看batch、quartz系统的表,查看调度器、锁、触发器、最后一个跑批execution、上下文信息、跑批状态等。。。均未发现问题
五、没有办法找不到问题,又查看代码trigger、源码对应service,判断还是应该不会有问题
找不到原因,习惯性又查看uat跑批日志,下午一点多发现uat十点后也没有日志,心里想着是不是uat复现了,查看跑批发现只剩下一些每天某个时间点执行的跑批,间隔时间重复执行的跑批被停止了,
打开一个每分钟执行一次的跑批发现正常调度执行了,日志又正常打印了。哎,白激动一场!等等,好像get到了什么,有点思路,嗯,想想,
uat有段时间没有日志-》因为没有跑批需要执行(间隔时间的跑批被停止了,定点跑批哪个时间段没有)
pat排查下来代码、配置、服务器节点都没问题,某个时间点后没有日志-》(间隔时间的跑批被停止了,定点跑批这个时间段没有或者也被停止了)
卧槽,赶紧联系业务,登录账号远程桌面查看后台跑批状态,结果惊掉一下把,所有跑批全被停止了(ps我们有个全部启动、全部停止按钮,方便业务勾选多个跑批进行操作,不选的时候默认全部)
重新启动跑批,手动执行跑批,通知对接系统执行相应逻辑处理,查看业务操作记录,寻找背锅侠,谁误操作把所有跑批停止了。
总结:累死累活大半天,万万想不到会人为的把跑批全停止,所以如果实在代码、配置、服务没有排查出问题,想一想是不是业务人为操作导致的,大胆想,说不定业务脑抽把配置、数据全清了呢!然后赶紧加重要配置、跑批的监控