定时任务监控轮子?

2017-12-22 15:10:57 +08:00
 kkfnui

服务中有很多数据是定时任务计算出来的,定时任务运行是会有很多异常情况导致任务异常退出

本想程序中增加异常捕获,在最外层加上 try catch,然后通过 微信或者邮件发出通知告警。 但有些情况监控不了:

  1. 进程被其他人 kill,内存不足被系统强杀
  2. 运行节点断网或者停机(这个其实可以监控节点状态

task and job

设想有个定时任务的框架,每个定时程序作为一个 task,每次运行是一个 job。 有个统一的服务可以收集到 task 的运行状态,每个 job 运行的详情。

这样可以监控:

  1. 如果一个 task 长时间没有 job,则报警
  2. 如果一个 job 运行时间过久 报警

想到有两种实现方式:

  1. 托管方式,有用过 jenkins,但是感觉太重了,不适合这样的定时任务。现状是有多个人写了脚本,定时执行,并且在不同机器上,对配置要求不一样
  2. 脚本侵入式,可以避免上面需要搭建平台服务,并且可以服用原来的资源分配。缺点是需要修改原来所有的脚本,所以是想该的简单些。类似的暴露三个接口:init(task_info ), run(argv), uninit()

  1. 托管方式的不知道是不是有类似 jenkins,但是轻量点适合定时任务的
  2. 侵入式的,就有些开发工作量了。需要搭建服务,做定时检查报警这些工作了。不知道有没有现成的轮子。
2878 次点击
所在节点    问与答
9 条回复
kkfnui
2017-12-22 15:12:38 +08:00
第二种,可能还想夹带私货。
在 job 运行完成后,附带上报该 job 的一些附带属性。

- 更新了多少条 mysql 记录
- 耗时多少
mpich
2017-12-22 15:14:05 +08:00
airflow?
Livid
2017-12-22 15:21:10 +08:00
如果是用 Python 写的话:

APScheduler + Sentry.io
kkfnui
2017-12-22 15:35:03 +08:00
@mpich 我看看,学习学习
kkfnui
2017-12-22 15:44:52 +08:00
@Livid 语言不仅仅是 python, 我先了解下
dong3580
2017-12-22 16:11:00 +08:00
如果是 C#直接创建个 service 服务,或者新建个 win/console 程序开个进程监控时间,你这个场景可以用前者。
fjkfwz406
2017-12-23 13:30:33 +08:00
airflow 满足所有需求
kkfnui
2017-12-25 10:43:03 +08:00
@fjkfwz406
@mpich

看了下确实大部分都能够满足,但是对于运行时间过长的任务,希望能够报警(但是不杀死任务),应该怎么做?
没有看到类似 trigger
fjkfwz406
2017-12-25 13:44:58 +08:00
@kkfnui 看下 airfow 的 SLA

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/416839

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX