成功率趋势诊断表需依赖prometheus+grafana,用promql基于job_exit_code指标计算,因top/sar等命令仅监控资源使用、不采集任务退出码,而该指标须由exporter上报并正确打标(job和exit_code),否则无法分组聚合。

成功率趋势诊断表不是 Linux 原生命令能直接生成的,它依赖 Prometheus + Grafana 的监控栈,核心是用 PromQL 查询 job_exit_code 指标。
为什么不能用 top 或 sar 查成功率
top、vmstat、sar 这些工具只反映“资源用了多少”,不记录“任务执行结果”。job_exit_code 是 Prometheus 从 exporter(如 node_exporter 配合自定义脚本、blackbox_exporter 或 custom job scraper)采集的业务级指标,Linux 基础命令压根看不到这个字段。
- 你运行
crontab -l只能看到定时任务“有没有被调度”,看不到 exit code -
journalctl -u mybackup.service能查单次日志,但没法自动聚合“过去 24 小时失败率” - 手动 grep 日志再 awk 统计,临时可行,但无法形成趋势图或告警
怎么拿到 hour-level 成功率(PromQL 关键写法)
成功率 = 成功次数 / 总执行次数。Prometheus 不支持除法直接跨指标运算,得用 rate() + count by 拆解:
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 总执行次数(1 小时内):
count_over_time(job_exit_code{job=~".+"}[1h]) - 成功次数(exit_code == 0):
count_over_time(job_exit_code{job=~".+", exit_code="0"}[1h]) - 正确成功率公式(避免除零):
count_over_time(job_exit_code{job=~".+", exit_code="0"}[1h]) / count_over_time(job_exit_code{job=~".+"}[1h])
注意:job_exit_code 必须带 job 和 exit_code 标签,否则无法按任务分组;如果 exporter 没打标,查出来全是 {},结果就全归一堆了。
常见失败原因和排查点
即使查询跑通,图表为空或数值异常,大概率卡在这几个环节:
- Exporter 没采集到数据:检查
curl http://localhost:9100/metrics | grep job_exit_code是否有输出 - 标签不一致:脚本里上报的是
job="mysql_backup",但 PromQL 写成job="backup_mysql"→ 匹配不到 - 时间范围不对:Grafana 时间选择器设成 “Last 7 days”,但数据只保留 24 小时 → 图表空白
- 采样间隔太粗:
job_exit_code是 counter 类型,必须用rate()或count_over_time(),直接查原始值没意义
真正要落地这张表,得先确认你的定时任务是否已通过 exporter 上报 exit_code —— 没这步,所有 PromQL 都是空中楼阁。










