异常作业检测的设计说明

1.需求描述
一个作业跑了很久都没有跑完,或者非常快就跑完了,我们认为这种作业可能存在异常那个,需要把这种作业监控出来,及时查看情况进行相应的处理。

2.实现方式
每个作业被创建出来后,都会在 ZK 上创建节点保存相关信息,作业的启用、运行、结束、停止都会引起 ZK 节点上数据的变化。
只要搞清楚 每个作业在ZK上的数据结构,然后直接读取ZK 数据,就可以结合业务逻辑做监控了。
一个作业的节点信息中,非常重要的有下面几个:namespace、jobName、execution、item等。
作业正在执行的节点为running,执行完毕为 completed。如果作业没有启用过,那么这些节点也不会存在。不同状态节点的数据提取方式稍微不同。
总之,要把握好对节点的判断。
举一个例子,DemoJob在ZK节点上的数据结构如下:

异常作业检测的设计说明

我们读取ZK做逻辑处理速度是非常快的。
异常作业监控实现类 :com.******.****.job.monitor.TimeoutJobMonitor
一个对其他作业运行状态监控的作业配置,主要涉及到三个自定义参数(不区分大小写):
flag:超时时间(单位:秒),非必填,默认为900。如果我们配置flag=600,则意味着检测运行时间超过600秒的作业;
system:ZK节点的地址(ip:port),必填。ZK集群,配置一个节点即可,例如:system=10.0.42.18:2181。这个必须配置正确,否则直接返回错误提示信息;
enterprise_code:域(namespace),非必填,默认为 ******.******.com。一定要注意,该域应该在 system配置的Zk下面存在,否则,检测出来的结果肯定为0。

3.异常检测的作业配置

异常作业检测的设计说明