要实现linux定时备份任务的实时自动告警,需构建“脚本输出结构化状态→prometheus抓取→分级告警→grafana可视化”闭环:脚本末尾写入exit_code、success_timestamp、size_bytes至textfile;prometheus采集并定义紧急/排查/失联三级告警规则;grafana展示状态趋势、尺寸水位和摘要卡片。

要实现 Linux 定时备份任务的执行状态实时自动告警,核心不是等出问题再通知,而是把每次备份变成一个“可测量、可判断、可触发”的信号事件。关键在于打通脚本执行 → 状态采集 → 异常识别 → 告警推送这一闭环,避免依赖人工查日志或定时轮询。
让备份脚本主动输出结构化状态
备份脚本不能只管打包,还要在结束时留下明确的“健康凭证”。在脚本末尾添加三类指标写入(推荐写入 /var/lib/prometheus/textfile_collector/backup.prom):
-
退出码:用
$?判断是否成功,写为mysql_backup_last_exit_code 0(成功)或1/2(失败) -
时间戳:用
date +%s记录最后成功时间,写为mysql_backup_last_success_timestamp 1749998400 -
文件大小:用
stat -c%s /backup/db_$(date -d 'yesterday' +\%Y\%m\%d).sql 2>/dev/null || echo 0获取字节数,写为mysql_backup_last_size_bytes 12567890
确保该文件对 prometheus 用户可读,且每执行一次就覆盖更新 —— 这是后续所有监控和告警的数据源头。
用 Prometheus 抓取并识别异常模式
在 prometheus.yml 中启用 textfile collector,并配置 job 抓取上述文件:
- 确认
scrape_configs包含job_name: 'backup-status',static_configs指向 textfile 目录 - 访问
:9090/targets验证 job 状态为 UP,否则检查路径权限或 Prometheus 日志 - 在 Prometheus 表达式浏览器中测试:
mysql_backup_last_exit_code是否有最新值;time() - mysql_backup_last_success_timestamp > 86400是否为 true(超24小时未成功)
按业务影响分级定义告警规则
不要只写“不为0就告警”,而应结合 exit code 含义与业务容忍度设置不同响应级别:
-
紧急级:exit_code == 2(连接拒绝)或 == 11(I/O 错误),
for: 30s,立即推送到钉钉/企微 oncall 群 -
排查级:exit_code == 3(权限不足)或 == 4(参数错误),
for: 2m,仅邮件通知 DBA,并在告警注释中预置诊断命令如ls -l /backup/或sudo -u prometheus cat /var/lib/prometheus/textfile_collector/backup.prom - 失联级:连续 2 天无成功时间戳 且 文件大小为 0,触发自动创建 Jira 工单 + @ 主管
用 Grafana 构建一眼可知的实时看板
在 Grafana 中接入 Prometheus 数据源,搭建三类核心面板:
-
状态趋势图:以
mysql_backup_last_exit_code为指标,用不同颜色区分 0(绿色)、非0(红色),X轴为时间,直观看出失败发生时刻 -
尺寸水位图:用
mysql_backup_last_size_bytes绘制折线,叠加 10MB/100MB 警戒线,防止备份空包或膨胀失控 - 摘要卡片:显示“最近一次成功时间”、“距今小时数”、“当前文件大小”三项关键字段,顶部加红绿灯状态指示器
这样,运维人员打开看板就能秒懂备份是否可信、是否滞后、是否异常,无需翻日志、不靠经验猜。











