背景

目前crontab出现问题后无感知,发现问题不及时,几乎是靠业务部门或用户反馈的方式,研发部门再排查的方式,处理问题、发现问题相对滞后,由此可见需要进一步优化crontab的稳定性,降故障通知前置,在用户反馈之前接受故障处理故障.

历史问题总结:

  • 人为误操作导致所有的crontab全部清空
  • 定时任务服务器误操作后灾难恢复困难
  • 未加锁机制检测启动多个进程导致数据错乱
  • 定时任务被系统oom 导致任务失败
  • 定时任务服务器重启后cron未开机自启导致任务未执行
  • 定时任务失败后无监控、出问题无感知(发现问题&处理问题滞后)
  • ...................

一、定时任务管理规范

问题描述:目前上线是通过运维在salt服务器分发的方式,发布方式不透明,还存在手动修改的方式,不规范,曾出现过误操作导致全清空事件,定时任务服务器误操作后灾难恢复困难的问题

解决方案: 统一规范成jenkins发布的模式,同发布代码走相同的逻辑

二、定时任务发布选择机器问题

问题描述: 目前发布代码需要选择服务器,存在错误选择的情况,从而引发问题.

解决方案:优化发布方式,发布无需选择服务器,自动判断发布服务器。

三、定时任务无法及时查看

问题描述:目前是通过定时同步任务列表到/tmp/work_cron的方式,存在延迟

解决方案: 研发直接查看gitlab的仓库即可

四、定时任务执行OOM中断

问题描述: 较大的程序执行会耗费很大的内存,从而出现被系统oom的风险,然而系统oom后目前并不能发现

解决方案:针对系统oom的问题,可以收集/var/log/message的方式进行报警处理,可第一时间发现问题.

五、定时任务进程数据安全保障(锁机制)

定时任务出现hang住进程,导致很多进程启动的问题 ;

多个进程同时运行导致数据错乱问题.

例如每次写的临时表名称一致,两个进程同时写则可能产生错误的数据结果.

解决方案: 对于不可同时启动两个进程的任务,程序需要加锁判断状态保证数据的可靠性

六、大型定时任务升级队列实现

问题描述: 定时任务应当尽量的轻量化,最优方案是只做定时任务的触发,而后程序通过队列方式进行数据处理.

例如定时任务程序单次运行需要几十分钟以上,或者处理的数据量达千万级别.

解决方案:

方案一

  1. 将重量级别的任务改造优化成队列的方式实现. 代码实现数据处理逻辑,数据放入队列依次处理的方式.
  2. 使用cronsun触发的方式进行定时任务的管理

方案二

  • 迁移至大数据任务平台,利用大数据集群运算能力完成相关功能

七、定时任务状态感知

问题描述:目前每个定时任务的执行状态(成功/失败/hang/warn)无法感知,只能通过日志来排查(如果有日志)

  1. 如何知道任务是否开始执行?(目前靠人)【cron服务未开启】
  2. 如何知道任务执行成功/失败?(目前靠人)【脚本执行80%后失败】
  3. 任务执行失败如何第一时间发现?(目前基本靠业务&用户侧反馈)

    解决方案:
  • 增加判断crontab是否按照预期执行监控机制
  • 增加状态汇报逻辑,使任务执行可视化&数据化,并且增加报警机制.(核心任务)
  • 增加定时任务日志,提供关键字进行报警(核心任务)

八、healthchecks 监控系统

详情移步官网: https://healthchecks.io/ (开源软件)

Healthchecks 是一个用来 监控定时任务(cron job)是否按时运行 的系统。它通过一种非常简单有效的方式帮助你发现定时任务是否异常或失败。

主要作用

  • 监控 cron、systemd timer、脚本等是否按时执行;
  • 当任务没有按时“打卡”时,发送通知(邮件、Webhook、Slack、钉钉等);
  • 提供简单的 Web UI 记录任务运行历史和状态。

Healthchecks 的工作原理如下:

  1. 系统为每个任务分配一个唯一的“ping URL”(如 https://hc.example.com/your-uuid);
  2. 每次任务执行成功后,向这个 URL 发一个 HTTP 请求(称为“ping”);
  3. Healthchecks 会为每个任务设置一个超时时间(比如 1 小时);
  4. 如果超时未收到“ping”,则认为该任务未执行或执行失败,触发告警

应用场景

  • 生产环境中的定时脚本/任务监控
  • 如 MySQL 备份脚本、日志归档、数据同步等。
  • Kubernetes CronJob 监控
  • CronJob 成功后加一个 ping 请求,Healthchecks 提供独立的状态记录和报警。
  • 没有集成监控系统的小团队
  • Healthchecks.io 提供简单、即开即用的 Web UI 和通知集成,非常适合中小项目快速接入。
  • 与 Prometheus/Grafana 互补
  • 可在任务层面提供更直观的“是否执行”状态,结合已有监控形成闭环。

如果你有多个定时任务,还可以用标签、项目分组等方式管理。如果你有兴趣搭建私有版本,它也支持 Docker 一键部署。

定时任务稳定性解决方案-healthchecks监控系统的更多相关文章

  1. Mercury:唯品会全链路应用监控系统解决方案详解(含PPT)

    Mercury:唯品会全链路应用监控系统解决方案详解(含PPT) 原创: 姚捷 高可用架构 2016-08-08    

  2. Prometheus+Grafana企业监控系统

    Prometheus+Grafana企业监控系统 作者 刘畅 实验配置: 主机名称 Ip地址 controlnode 172.16.1.70/24 slavenode1 172.16.1.71/24 ...

  3. 安防视频监控系统前端摄像机——DSP与SOC摄像机

    一.DSP摄像机 DSP(Digital Signal Processing)即数字信号处理,它是利用数字计算机或专用数字信号处理设备,以数值计算的方法对信号进行采集.变换.综合.估值.识别等加工处理 ...

  4. Opserver开源的服务器监控系统(ASP.NET)

    Opserver是Stack Exchange下的一个开源监控系统,系统本身由C#语言开发的ASP.NET(MVC)应用程序,无需任何复杂的应用配置,入门很快.下载地址:https://github. ...

  5. 利用WCF的双工通讯实现一个简单的心跳监控系统

    何为心跳监控系统? 故名思义,就是监控某个或某些个程序的运行状态,就好比医院里面的心跳监视仪一样,能够随时显示病人的心跳情况. 心跳监控的目的是什么? 与医院里面的心跳监视仪目的类似,监控程序运行状态 ...

  6. 监控系统Opserver的配置调试

    Stack Exchange开源其监控系统Opserver有一段时间了.之前在项目中用过他们的MiniProfile来分析页面执行效率和帮助新人了解项目,当他们开源了其监控系统的时候正好部门也在关注监 ...

  7. Zabbix监控系统深度实践

    Zabbix监控系统深度实践(企业级分布式系统自动化运维必选利器,大规模Zabbix集群实战经验技巧总结,由浅入深全面讲解配置.设计.案例和内部原理) 姚仁捷 著  ISBN 978-7-121-24 ...

  8. 利用WCF的双工通讯实现一个简单的心跳监控系统 z

    利用WCF的双工通讯实现一个简单的心跳监控系统 http://www.cnblogs.com/zuowj/p/5761011.html 何为心跳监控系统? 故名思义,就是监控某个或某些个程序的运行状态 ...

  9. 转: 透过CAT,来看分布式实时监控系统的设计与实现

    评注: 开源的分布式监控系统 转:http://www.infoq.com/cn/articles/distributed-real-time-monitoring-and-control-syste ...

  10. 监控系统Opserver

    监控系统Opserver的配置调试   Stack Exchange开源其监控系统Opserver有一段时间了.之前在项目中用过他们的MiniProfile来分析页面执行效率和帮助新人了解项目,当他们 ...

随机推荐

  1. AI编程:cursor使用教程

    这是小卷对AI编程工具学习的第1篇文章,今天以cursor为例,通过给提示词,让不懂编程的小白也能自己用代码实现需求 1.什么是AI编程工具? 可以分为两类: 狭义的AI编程工具 面向程序员的,主要用 ...

  2. hashmap为什么要引入红黑树?

    在JDK1.6,JDK1.7中,HashMap采用位桶+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里.但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依 ...

  3. kubernets学习笔记二

    Kubernetes部署"容器化应用" Kubernetes整体架构 何为"容器化应用"? 通俗点来说,就是你把一个程序放在docker里部署,这个docker ...

  4. element vue 动态单选_VUE 动态构建混合数据Treeselect选择树,同时解决巨树问题

    今天在项目中需要通过行政区域选择,然后选择该行政区域下面的景区,也就是要构建行政区划.景区两表数据表的树.全国的行政区域到县已经3500多了,再加上景区会有几万个点,这棵选择树不论是在后台还是在前台构 ...

  5. 【COM3D2Mod 制作教程(3)】Mod 制作概要

    [COM3D2Mod 制作教程(3)]Mod 制作概要 制作工具整合包:https://mod.3dmgame.com/mod/205516 该工具包简单整合了些本章需要的小型工具.插件.以及其他一些 ...

  6. 超详细的 Linux - conda 环境安装教程

    一.引言 在 Linux 系统中安装 conda 环境可以为您提供便捷的 Python 环境管理和包管理功能.本教程将详细介绍在 Linux 系统中安装 conda 的步骤. 二.安装前的准备 确保您 ...

  7. AngleSharp :在 C# 中轻松解析和操作 HTML/XML 文档

    AngleSharp 是一个 C# 库,主要用于解析和操作 HTML 和 XML 文档,类似于浏览器的 DOM 操作.允许你在 C# 中使用类似浏览器的方式处理网页数据,进行网页抓取.数据提取和处理等 ...

  8. 2024.11.19随笔&联考总结

    联考 看到 T1 就知道一定是简单计数题然后发现 \(O(n)\) 可以过于是就大概写了写式子就开写.写的过程中犯了一些低级错误,代码重构了一次才过.耽误的时间比较久.然后开 T2,一眼有一个 \(O ...

  9. 读论文-电子商务产品推荐的序列推荐系统综述与分类(A Survey and Taxonomy of Sequential Recommender Systems for E-commerce Product Recommendation)

    前言 今天读的这篇文章是于2023年发表在"SN Computer Science"上的一篇论文,这篇文章主要对序列推荐系统进行了全面的调查和分类,特别是在电子商务领域的应用.文章 ...

  10. Windows 提权-不安全的 GUI 程序

    本文通过 Google 翻译 Insecure GUI Applications – Windows Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进 ...