只有 Administrator 能開啟 Audit。事件類型篩選器會列出平台能記錄的全部 42 種事件,包含這台設備上還沒發生過的,所以不會有選了之後才發現背後根本沒有這個事件的情況。
紀錄可以依時間範圍(最近 24 小時或最近七天)、使用者、角色、事件類型與結果篩選。每一筆都寫明誰、什麼時候、對什麼做了什麼、結果如何,以及失敗或被拒絕時的原因。
紀錄格式
| 欄位 | 意義 |
|---|
actor | USER 表示由登入中的帳號執行。SYSTEM 表示平台自己記的——啟動、排程、服務憑證處理——背後沒有任何帳號。 |
result | SUCCESS:動作完成。FAIL:試了但失敗。DENY:權限或設備狀態在動作開始前就擋下來。ALLOW:這是觀察紀錄,不是拒絕。 |
reason_code | 只有在結果不是 SUCCESS 時才有意義。觀察性紀錄一律是 OBSERVED。 |
target_id | 這個事件作用的對象:帳號 ID、Agent 名稱、Task ID、模型名稱或保留期限。 |
producer | 記下這筆的元件,例如 dashboard.auth 或 dashboard.retention。Task 事件不帶這個欄位。 |
執行者的顯示名稱與角色是在寫入當下從帳號資料讀出來的,不是隨事件帶進來的;平台不認得的事件類型會直接丟掉。
登入與 Session
| 事件 | 觸發時機 | result / reason_code |
|---|
| Signed in | 一次登入嘗試 | SUCCESS;DENY = 同一來源嘗試過多的 LOGIN_RATE_LIMITED、INVALID_CREDENTIALS,或針對該帳號的封鎖碼。無法辨識是哪個帳號時,actor 是 SYSTEM。 |
| Signed out | 帳號登出 | SUCCESS |
| Session ended | Session 被作廢 | SUCCESS = 新登入取代舊 Session 的 SUPERSEDED_BY_NEW_LOGIN,或由 Administrator 強制登出的 ADMIN_FORCED;detail.sessions 是被結束的 Session 數。DENY = 操作者不是 bootstrap admin 時的 FIXED_ADMIN_REQUIRED。 |
| Expired session reused | 用已過期的 Session 重新連線被擋下 | 只有 DENY |
| Password changed | 帳號自己改密碼 | SUCCESS;DENY = PASSWORD_CHANGE_RATE_LIMITED,或舊密碼錯誤的 INVALID_CREDENTIALS。 |
| Administrator password reset | 在設備本機重設管理員密碼 | SUCCESS / LOCAL_BREAK_GLASS,actor 為 SYSTEM |
| Default administrator created | 首次啟動時建立 bootstrap admin | SUCCESS / DEFAULT_ADMIN_CREATED,actor 為 SYSTEM |
帳號與偏好設定
| 事件 | 觸發時機 | result / reason_code |
|---|
| Account created | 建立帳號 | SUCCESS;FAIL = 帳號名稱已被使用、REQUEST_INVALID、ACCOUNT_INVALID、指派的 Agent 不存在的 AGENT_NOT_FOUND,或權限碼。 |
| Account updated | 角色、顯示名稱或啟用狀態被更改 | SUCCESS;DENY = bootstrap admin 不可更改的 FIXED_ADMIN_PROTECTED,或停用自己帳號的 SELF_DISABLE_FORBIDDEN。FAIL = REQUEST_INVALID 或 ACCOUNT_INVALID。 |
| Account deleted | 刪除帳號 | SUCCESS;detail 記下帳號名稱、角色與被轉移的資源。FAIL 帶權限碼。 |
| Preferences updated | 導覽位置、主題或語言被更改 | SUCCESS;FAIL = REQUEST_INVALID 或 PREFERENCE_INVALID。 |
| Invitation email sent | 寄出邀請信 | SUCCESS;FAIL 帶寄送失敗碼。 |
| 事件 | 觸發時機 | result / reason_code |
|---|
| Agent access granted | 把 Agent 指派給某個帳號 | SUCCESS,target 是該帳號;FAIL = AGENT_NOT_FOUND 或 AGENT_INVALID。 |
| Agent access revoked | 移除指派 | 同上。 |
| Access denied | 登入中的帳號被拒絕存取某個路徑 | 只有 DENY / AUTHORIZATION_DENIED,target 是該路徑。 |
Agent 與模型
| 事件 | 觸發時機 | result / reason_code |
|---|
| Agent imported | 匯入 Agent 套件 | SUCCESS;FAIL 帶套件驗證碼,預設為 PACKAGE_FAILED。有掃描結果時記在 detail.risk。 |
| Agent updated | 差異包併入既有 Agent | 同上。 |
| Agent removed | 刪除 Agent | 同上。 |
| Agent model changed | 把 Agent 指到另一個模型 | SUCCESS;DENY = MODEL_INVALID 或其他適用碼,target 是模型名稱。 |
Task 與 Material
| 事件 | 觸發時機 | result / reason_code |
|---|
| Material uploaded | Material ZIP 解開到該 Agent 的 materials/ | SUCCESS;FAIL 帶 workspace 錯誤碼。 |
| Task created | 新增一份 Task Markdown | SUCCESS;FAIL 帶格式或路徑驗證碼,detail.filename 是被拒絕的檔名。 |
| Task deleted | 刪除一份 Task Markdown | 同上。 |
| Task started | 從 Dashboard 或透過服務憑證啟動 Task | SUCCESS 記下 Task ID;DENY = PLAN_INPUT_INVALID、PLAN_NOT_FOUND 或派工回傳的錯誤碼。以服務憑證啟動時,操作者記為 Server。 |
| Task stopped | 中止執行中的 Task Run | SUCCESS;FAIL = TASK_STOP_FAILED;DENY = TASK_STOP_INPUT_INVALID、TASK_NOT_FOUND 或 TASK_NOT_RUNNING。中止別人啟動的 Task 也記在這裡。 |
| Task log not found | 要求了不屬於自己、或根本不存在的 Task log | 只有 DENY / TASK_LOG_NOT_FOUND。兩種情況共用同一個碼,回應才不會透露這個 Task 存不存在。成功讀取不會留下紀錄。 |
Main Agent Chat
| 事件 | 觸發時機 | result / reason_code |
|---|
| Chat session opened | 開啟一個對話 Session | SUCCESS,target 是 session key hash 的前 16 個字元。 |
| Chat access denied | 存取對話被拒絕 | FAIL = CHAT_SESSION_NOT_FOUND、Session 屬於別人的 CHAT_SESSION_NOT_OWNED,或權限碼。 |
| Chat request method | 不允許的方法被擋下,或記下實際使用的方法 | FAIL = METHOD_NOT_ALLOWED;ALLOW / OBSERVED 是觀察紀錄,方法記在 detail.method。 |
| Chat response fields | 檢視 Session 第一次 agents.list 的回應 | 只有 ALLOW / OBSERVED,屬觀察紀錄,欄位名稱記在 detail.fields。 |
| Chat connection rejected | WebSocket 連線的 Origin 不合法 | FAIL / ORIGIN_INVALID |
設備設定
| 事件 | 觸發時機 | result / reason_code |
|---|
| Data retention changed | 更改 Token & Task Run History 的保留期限 | SUCCESS,target 是 DAY、WEEK、MONTH 或 FOREVER;FAIL = DATA_RETENTION_INVALID 或 DATA_RETENTION_UNAVAILABLE。 |
| OverlayFS turned on | 開啟寫入保護 | SUCCESS;FAIL = 仍有 Task 在跑的 OVERLAYFS_TASKS_RUNNING,或該次操作的失敗碼。 |
| OverlayFS turned off | 關閉寫入保護 | 同上。 |
| Device rebooted | 從該頁觸發重新開機 | SUCCESS / FAIL |
| OverlayFS password rejected | 該頁的作業系統密碼驗證失敗 | FAIL = 嘗試過多的 OVERLAYFS_RATE_LIMITED,或驗證失敗碼。 |
平台與服務憑證
| 事件 | 觸發時機 | result / reason_code |
|---|
| System database backed up | 建立加密備份(ENCRYPTED_BACKUP_CREATED),或還原前先備份(PRE_RESTORE_BACKUP_CREATED) | SUCCESS,actor 為 SYSTEM |
| System database restored | 從備份還原控制資料庫 | SUCCESS / ENCRYPTED_BACKUP_RESTORED |
| Old records cleared | 自動移除超過 90 天的稽核事件與通知;只有真的刪掉東西才會留下紀錄 | SUCCESS / RETENTION_POLICY_90_DAYS,actor 為 SYSTEM |
| Service credential issued | 發出一份服務憑證 | SUCCESS,actor 為 SYSTEM |
| Service credential revoked | 撤銷一份有效的服務憑證 | SUCCESS |
| Service credential already revoked | 對已撤銷的憑證再撤銷一次 | SUCCESS / ALREADY_REVOKED |
| Service credential authenticated | 服務憑證被拒絕 | 只有 DENY,帶拒絕原因。驗證成功不會留下紀錄:每一次 REST 呼叫、每 30 秒的重新確認都會經過它,全記下來只會是機器的保活訊號,不是任何人做的事。 |
兩個常見誤會
修改 Task 會出現兩筆紀錄。 Task 定義不能就地修改,所以一次修改是一筆 Task deleted 加一筆 Task created,兩筆指向同一個檔名。
成功不一定會被記錄。 讀取自己的 Task log 不會留下紀錄,只有被拒絕才會;服務憑證驗證也是一樣。
相關文件