運維

審計日誌

閱讀不可變的審計軌跡和診斷日誌,它們記錄了你的部署上的每一次變更、每一次登入和每一個發出的事件。

審計日誌是你的部署上所發生之事的不可變記錄:誰、在什麼時候、從哪裡改了什麼。本頁 是 Setup → Diagnostics 下各診斷介面的深入參考。關於日誌、指標和請求身份的 運維概覽,參見可觀測性。

這些介面需要 manage_platform_settings 許可權。

當你需要證明或調查以下事項時,就去查審計日誌:

  • 許可權敏感的變更;
  • 設定和配置變更;
  • 使用者和會話活動;
  • 整合和自動化活動;
  • 訪問被拒絕的分析。

審計日誌

位於 Setup → Diagnostics → Audit Logs(sys_audit_log)。該物件是只讀且 不可變的 —— 一條只追加的平臺事件軌跡。你可以過濾、分組和檢視行,但在 Setup 中 沒有任何東西能編輯或刪除它們。

每個讀者能看到什麼

每一行都會保持儲存,但從 ObjectStack 17.6 起,只有當讀者自己能讀取某條記錄時, 才會向其返回關於這條記錄的行 —— 判斷依據與決定他們能否開啟這條記錄的物件許可權、 共享和行級安全相同。這會排除:

  • 每一條 delete 行,以及關於此後已被刪除的記錄的其他每一行;
  • 登出行,以及其會話此後已被移除的登入行;
  • 關於讀者無法開啟的記錄的行。

與任何記錄無關的行 —— 配置變更、使用者匯入執行、不帶會話的認證事件 —— 與以前一樣, 按該日誌自身的授權返回。

view_all_audit_log 能力會解除這種收窄(ObjectStack 17.7):持有者可以看到 刪除和登出軌跡,以及關於他們無法開啟的記錄的行。平臺管理員預設持有它;組織管理員 則不持有,所以請把它顯式授予其他必須閱讀完整軌跡的人。

欄位級安全在每一行內部仍然適用。old_value 和 new_value 只向能以未掩碼形式讀取 某個欄位的讀者返回該欄位,並且在它們上面過濾、排序或分組會被拒絕(403),除非 過濾條件以相等方式指定了一個物件(object_name),且你能讀取它的每個欄位。

預設檢視

列表開啟時帶有按動作類別過濾的標籤頁。每個標籤頁都應用上述規則:

檢視顯示
Recent所有事件,最新的在前
Writes建立 / 更新 / 刪除動作 —— delete 行僅在持有 view_all_audit_log 時顯示
Auth登入和登出事件 —— 登出,以及其會話此後已被移除的登入,僅在持有 view_all_audit_log 時顯示
Config設定和配置變更

列與欄位

預設列為 Timestamp、Action(一個彩色標籤 —— create / update / …)、Object、 Record ID 和 Actor。頁尾顯示記錄總數(例如 36 records)。

每一行都帶有完整的欄位集:

欄位含義
created_at事件被記錄的時間
action操作(create、update、delete、auth……)
user_id指向執行操作的使用者的查詢
actor文本形式的執行者身份
object_name事件涉及的物件(例如 sys_user)
record_id受影響的記錄
old_value之前的值(textarea)
new_value新的值(textarea)
ip_address請求的來源 IP
user_agent客戶端的 user agent
tenant_id所屬租戶
metadata額外的結構化上下文

Config 檢視是回答"誰改了這個設定?"的最快方式 —— 它在你開始閱讀行之前,就把 軌跡收窄到配置動作。

解讀一次變更

對於寫入動作,值得關注的細節是變更前後。開啟某一行的 ⋮ 選單,展開 old_value 和 new_value,檢視這條記錄上改了什麼 —— 你能讀取的每個欄位都完整顯示,其他的 一概不顯示。Object 和 Record ID 列告訴你什麼被改動了; old_value/new_value 告訴你如何改動;actor、ip_address 和 user_agent 告訴你誰改的,以及從哪裡改的。

對於受監管的環境,請在儲存層為不可變性提供保障 —— 在資料庫層把表設為只追加, 並定義保留策略。

通知事件

位於 Setup → Diagnostics → Notification Events(sys_notification)。這是 通知系統的入口日誌 —— 每次 emit() 一行,在任何投遞決策之前寫入。用它來診斷 一條通知為什麼到達或沒有到達收件箱;之後的路由和物化過程記錄在 通知中。

預設檢視為 Recent 和 By Topic。預設列:Topic(例如 project.digest)、 Severity(一個 info/warn/… 標籤)、Actor、Source Object 和 Created At。

欄位含義
topic發出的主題
payload事件載荷(JSON)
severity嚴重級別
dedup_key用於合併重複發出的鍵
source_object引發事件的物件
source_id引發事件的記錄
actor_id觸發發出的主體
created_at事件被接收的時間

dedup_key 會合並重復的發出,payload 攜帶模板渲染所依據的原始事件上下文。由於 這個日誌位於路由的上游,如果這裡有一行卻沒有對應的收件箱訊息,通常意味著受眾沒有 解析到那個使用者,或者他們的偏好在那個渠道上遮蔽了該主題 —— 當用戶報告缺少提醒時, 請檢視通知。

在下游,每個事件都會物化為按使用者的收件箱訊息(sys_inbox_message)—— 接收方的 視角見通知。

會話

位於 Setup → Diagnostics → Sessions。會話列出活動的和最近的登入會話,因此你 可以調查某個使用者的活動或撤銷其訪問。審查登入事件時,把它與 Auth 審計檢視搭配 使用。

下一步

任務頁面
日誌、指標和請求身份的運維概覽可觀測性
瞭解通知如何被路由和渲染通知
在上線前加固部署生產就緒
回到運維概覽運維