定时任务稳定性解决方案-healthchecks监控系统
背景
目前crontab出现问题后无感知,发现问题不及时,几乎是靠业务部门或用户反馈的方式,研发部门再排查的方式,处理问题、发现问题相对滞后,由此可见需要进一步优化crontab的稳定性,降故障通知前置,在用户反馈之前接受故障处理故障.
历史问题总结:
- 人为误操作导致所有的crontab全部清空
- 定时任务服务器误操作后灾难恢复困难
- 未加锁机制检测启动多个进程导致数据错乱
- 定时任务被系统oom 导致任务失败
- 定时任务服务器重启后cron未开机自启导致任务未执行
- 定时任务失败后无监控、出问题无感知(发现问题&处理问题滞后)
- ...................
一、定时任务管理规范
问题描述:目前上线是通过运维在salt服务器分发的方式,发布方式不透明,还存在手动修改的方式,不规范,曾出现过误操作导致全清空事件,定时任务服务器误操作后灾难恢复困难的问题
解决方案: 统一规范成jenkins发布的模式,同发布代码走相同的逻辑
二、定时任务发布选择机器问题
问题描述: 目前发布代码需要选择服务器,存在错误选择的情况,从而引发问题.
解决方案:优化发布方式,发布无需选择服务器,自动判断发布服务器。
三、定时任务无法及时查看
问题描述:目前是通过定时同步任务列表到/tmp/work_cron的方式,存在延迟
解决方案: 研发直接查看gitlab的仓库即可
四、定时任务执行OOM中断
问题描述: 较大的程序执行会耗费很大的内存,从而出现被系统oom的风险,然而系统oom后目前并不能发现
解决方案:针对系统oom的问题,可以收集/var/log/message的方式进行报警处理,可第一时间发现问题.
五、定时任务进程数据安全保障(锁机制)
定时任务出现hang住进程,导致很多进程启动的问题 ;
多个进程同时运行导致数据错乱问题.
例如每次写的临时表名称一致,两个进程同时写则可能产生错误的数据结果.
解决方案: 对于不可同时启动两个进程的任务,程序需要加锁判断状态保证数据的可靠性
六、大型定时任务升级队列实现
问题描述: 定时任务应当尽量的轻量化,最优方案是只做定时任务的触发,而后程序通过队列方式进行数据处理.
例如定时任务程序单次运行需要几十分钟以上,或者处理的数据量达千万级别.
解决方案:
方案一
- 将重量级别的任务改造优化成队列的方式实现. 代码实现数据处理逻辑,数据放入队列依次处理的方式.
- 使用cronsun触发的方式进行定时任务的管理
方案二
- 迁移至大数据任务平台,利用大数据集群运算能力完成相关功能
七、定时任务状态感知
问题描述:目前每个定时任务的执行状态(成功/失败/hang/warn)无法感知,只能通过日志来排查(如果有日志)
- 如何知道任务是否开始执行?(目前靠人)【cron服务未开启】
- 如何知道任务执行成功/失败?(目前靠人)【脚本执行80%后失败】
- 任务执行失败如何第一时间发现?(目前基本靠业务&用户侧反馈)
解决方案:
- 增加判断crontab是否按照预期执行监控机制
- 增加状态汇报逻辑,使任务执行可视化&数据化,并且增加报警机制.(核心任务)
- 增加定时任务日志,提供关键字进行报警(核心任务)
八、healthchecks 监控系统
详情移步官网: https://healthchecks.io/ (开源软件)
Healthchecks 是一个用来 监控定时任务(cron job)是否按时运行 的系统。它通过一种非常简单有效的方式帮助你发现定时任务是否异常或失败。
主要作用
- 监控 cron、systemd timer、脚本等是否按时执行;
- 当任务没有按时“打卡”时,发送通知(邮件、Webhook、Slack、钉钉等);
- 提供简单的 Web UI 记录任务运行历史和状态。
Healthchecks 的工作原理如下:
- 系统为每个任务分配一个唯一的“ping URL”(如 https://hc.example.com/your-uuid);
- 每次任务执行成功后,向这个 URL 发一个 HTTP 请求(称为“ping”);
- Healthchecks 会为每个任务设置一个超时时间(比如 1 小时);
- 如果超时未收到“ping”,则认为该任务未执行或执行失败,触发告警
应用场景
- 生产环境中的定时脚本/任务监控
- 如 MySQL 备份脚本、日志归档、数据同步等。
- Kubernetes CronJob 监控
- CronJob 成功后加一个 ping 请求,Healthchecks 提供独立的状态记录和报警。
- 没有集成监控系统的小团队
- Healthchecks.io 提供简单、即开即用的 Web UI 和通知集成,非常适合中小项目快速接入。
- 与 Prometheus/Grafana 互补
- 可在任务层面提供更直观的“是否执行”状态,结合已有监控形成闭环。
如果你有多个定时任务,还可以用标签、项目分组等方式管理。如果你有兴趣搭建私有版本,它也支持 Docker 一键部署。
定时任务稳定性解决方案-healthchecks监控系统的更多相关文章
- Mercury:唯品会全链路应用监控系统解决方案详解(含PPT)
Mercury:唯品会全链路应用监控系统解决方案详解(含PPT) 原创: 姚捷 高可用架构 2016-08-08
- Prometheus+Grafana企业监控系统
Prometheus+Grafana企业监控系统 作者 刘畅 实验配置: 主机名称 Ip地址 controlnode 172.16.1.70/24 slavenode1 172.16.1.71/24 ...
- 安防视频监控系统前端摄像机——DSP与SOC摄像机
一.DSP摄像机 DSP(Digital Signal Processing)即数字信号处理,它是利用数字计算机或专用数字信号处理设备,以数值计算的方法对信号进行采集.变换.综合.估值.识别等加工处理 ...
- Opserver开源的服务器监控系统(ASP.NET)
Opserver是Stack Exchange下的一个开源监控系统,系统本身由C#语言开发的ASP.NET(MVC)应用程序,无需任何复杂的应用配置,入门很快.下载地址:https://github. ...
- 利用WCF的双工通讯实现一个简单的心跳监控系统
何为心跳监控系统? 故名思义,就是监控某个或某些个程序的运行状态,就好比医院里面的心跳监视仪一样,能够随时显示病人的心跳情况. 心跳监控的目的是什么? 与医院里面的心跳监视仪目的类似,监控程序运行状态 ...
- 监控系统Opserver的配置调试
Stack Exchange开源其监控系统Opserver有一段时间了.之前在项目中用过他们的MiniProfile来分析页面执行效率和帮助新人了解项目,当他们开源了其监控系统的时候正好部门也在关注监 ...
- Zabbix监控系统深度实践
Zabbix监控系统深度实践(企业级分布式系统自动化运维必选利器,大规模Zabbix集群实战经验技巧总结,由浅入深全面讲解配置.设计.案例和内部原理) 姚仁捷 著 ISBN 978-7-121-24 ...
- 利用WCF的双工通讯实现一个简单的心跳监控系统 z
利用WCF的双工通讯实现一个简单的心跳监控系统 http://www.cnblogs.com/zuowj/p/5761011.html 何为心跳监控系统? 故名思义,就是监控某个或某些个程序的运行状态 ...
- 转: 透过CAT,来看分布式实时监控系统的设计与实现
评注: 开源的分布式监控系统 转:http://www.infoq.com/cn/articles/distributed-real-time-monitoring-and-control-syste ...
- 监控系统Opserver
监控系统Opserver的配置调试 Stack Exchange开源其监控系统Opserver有一段时间了.之前在项目中用过他们的MiniProfile来分析页面执行效率和帮助新人了解项目,当他们 ...
随机推荐
- 从存钱罐到子数组:一个关于累加和的精妙问题|LeetCode 560 和为K的子数组
LeetCode 560 和为K的子数组 点此看全部题解 LeetCode必刷100题:一份来自面试官的算法地图(题解持续更新中) 生活中的算法 你有没有这样的经历:每天往存钱罐里存一些零钱,某一天突 ...
- SpringCloud自定义loadbalancer实现标签路由
一.背景 最近前端反应开发环境有时候调接口会很慢,原因是有开发图方便将本地服务注册到开发环境,请求路由到开发本地导致, 为了解决该问题想到可以通过标签路由的方式避免该问题,实现前端联调和开发自测互不干 ...
- Common.Logging+log4net搭建项目日志框架
原文参考链接:https://www.cnblogs.com/heys/p/5787123.html Common.Logging+(log4net/NLog/) common logging是一 ...
- 功率MOS管的参数说明
图解功率MOS管的每一个参数! 最大额定参数 最大额定参数,所有数值取得条件(Ta=25℃) VDSS 最大漏-源电压 在栅源短接,漏-源额定电压(VDSS)是指漏-源未发生雪崩击穿前所能施加的最 ...
- STM32的SYSTICK 定时器(系统滴答定时器)
什么是SysTick? 这是一个24位的系统节拍定时器system tick timer,SysTick,具有自动重载和溢出中断功能,所有基于Cortex_M3处理器的微控制器都可以由这个定时器获得一 ...
- Deepseek学习随笔(3)--- 高效提问技巧
明确需求 在与 DeepSeek 互动时,明确需求是获取高质量回复的关键.以下是一些示例: 错误示例:帮我写点东西 这样模糊的指令无法让 DeepSeek 理解你的具体需求,生成的回复可能无法满足你的 ...
- css 各种居中
1. 内部容器居中 flex <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- 记录WPS接入AI大模型
进入官网下载海鹦OfficeAI:https://www.office-ai.cn/ 安装OfficeAI 勾选打开一个测试表格看看是否已经安装成功 打开有些人的会弹出这个提示,点击进行管理,然后点击 ...
- 使用 kubeadm 创建高可用 Kubernetes 及外部 etcd 集群
博客链接:使用 kubeadm 创建高可用 Kubernetes 及外部 etcd 集群 前言 Kubernetes 的官方中文文档内容全面,表达清晰,有大量示例和解析 无论任何情况下都推荐先花几个小 ...
- C#方法练习
提示用户输入用户名和密码,写一个方法来判断用户输入的是否正确,返回给用户一个登陆结果,并且还要单独的返回给用户一个登陆信息 ,如果用户名错误,除了返回登陆结果之外,还要返回一个 "用户名错误 ...