历史任务
夜莺 v9 自愈脚本历史任务:查询脚本被告警触发或人工临时下发的执行历史,看每台目标机器上的输出、退出码和耗时。
概述
历史任务 = 自愈脚本被触发后的所有执行记录。
侧栏路径:告警 → 告警自愈 → 历史任务 Tab,URL /job-tasks。
每次「自愈脚本」被触发,平台都会生成一条任务记录:
- 任务来源(告警触发 / 用户主动 / API 创建的临时任务)
- 下发到哪些目标机器
- 每台机器的执行结果(stdout / stderr / 退出码)
- 执行耗时
适用场景:
- 自愈脚本"看起来"没生效?查历史看是真的没触发还是触发了但失败;
- 大规模批量操作完成后,看每台机器的输出确认状态;
- 一次性的临时运维操作(重启某服务、清磁盘空间),用「创建临时任务」一键下发到一组机器;
- 合规 / 复盘:谁、什么时候、给哪些机器跑过什么脚本。
列表 & 筛选
页面顶部过滤:
| 控件 | 说明 |
|---|---|
| 关键字搜索 | 在任务标题里搜 |
| 时间范围 | 默认最近 7 天,最长不限 |
| 只看自己 | 默认勾上 — 只看当前账号创建的任务;取消勾后看到全业务组的任务 |
| 业务组(左侧) | 按业务组过滤 |
列表字段:
| 列 | 含义 |
|---|---|
| ID | 任务的数据库主键,跨页定位用 |
| 标题 | 任务标题,告警触发的会显示告警规则名;临时任务显示用户填的标题 |
| 操作 | 点击进入任务详情,看每台目标机的输出 |
| 创建人 | 谁触发的:用户名(手工)/ 告警引擎名(自动) |
| 创建时间 | 任务下发时间 |
创建临时任务
页面右上「创建临时任务」按钮 — 在不绑告警规则的情况下一次性下发一个脚本到一组机器。常见用法:
- 批量重启某服务;
- 清磁盘空间紧急止血;
- 一次性的运维巡检(比如收集所有机器的 OS 版本)。
点击后会跳到任务创建表单,主要字段:
- 标题:方便后续在历史任务列表里识别;
- 脚本内容:bash/python/PowerShell 等,直接写在编辑器里;
- 目标机器:从设备列表选,支持按业务组 / 标签筛选;
- 超时时间:单机执行的最长时间,超时自动 kill;
- 执行模式:所有机器并发 / 滚动(一批一批)/ 暂停模式(手工 next-step)。
临时任务跑完后任务记录还在,可以重复看输出 — 不会随机器重启或会话过期消失。
任务详情:看每台机器的执行结果
点击列表行进入任务详情:
- 总览:任务标题、脚本预览、目标机器数、成功/失败计数、执行时间线;
- 目标机器列表:每台一行,展示当前状态(pending / running / success / failed / killed);
- 点单行展开该机器的具体输出:
- stdout:脚本的标准输出
- stderr:错误输出
- 退出码:0 = 成功,非 0 = 失败
- 耗时:单机执行时间
- 失败的机器:单独可以一键重跑,不需要全任务重新下发。
常见问题
Q1:告警规则配了自愈脚本,但历史任务里没看到执行记录?
A:按这个顺序排查:
- 告警是否真的触发了:去 活跃告警 看是否有事件;没事件就不会触发自愈脚本;
- 自愈脚本是否绑定到了该告警规则:去告警规则编辑页"自愈"区域确认;
- 目标机器是否在线:自愈脚本通过 Categraf 下发,机器无心跳会跳过;
- 告警引擎日志:去 告警引擎 看 server 日志,找
job dispatch failed之类的错误。
Q2:临时任务下发后某些机器一直是 pending 状态?
A:常见原因:
- 机器无心跳:Categraf 没在线,自然收不到任务下发;
- Agent 版本太低:很老的 Categraf 不支持任务下发;升级到当前 ent 版本;
- 并发限流:任务设置了"滚动模式"且前一批未完成,后面的就在排队等待。
Q3:历史任务的数据保留多久?
A:默认长期保留(不参与自动清理)。如果任务量很大,DBA 可以根据需要在 n9e.toml 配置保留天数 + 自动清理。
Q4:脚本里的输出会不会被泄露 / 看到敏感信息?
A:脚本本身和执行输出都完整存数据库 — 不要在脚本里写明文密码、Token 这种敏感信息。建议:
- 敏感凭证用环境变量从目标机的
/etc/environment或 vault 拉取; - 任务的查看权限通过 角色管理 控制,只给运维角色看;
- 出 P0 后清理涉及敏感操作的历史记录(需要 DBA 操作)。