夜鶯 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 操作)。