偵測快照提交

偵測在裝置上執行作業,並定期收集及評估診斷資料,以便決定是否要產生當機報告 / 快照。

運作方式

Detect 每隔幾分鐘就會讀取「檢查」狀態、評估觸發條件,並將當機報告傳送至 FuchsiaDetect 產品。診斷掃描的頻率是透過 //src/diagnostics/detect/meta/triage-detect.cml 中的指令列引數來設定。

目前未讀取檢查以外的診斷狀態。SyslogHas()、KlogHas() 和 BootlogHas() 一律會傳回 false。

啟用當機報告

根據預設,Detect 會在所有產品和建構作業中執行,但只會在部分建構作業中建立或檔案當機報表。否則,這個步驟會記錄警告:Detect would have filed {},其中 {} 會由快照簽章取代。

偵測作業只會在 --with-base 中包含 "//src/diagnostics/detect:enable-report-filing" 時產生當機報告。

當機報告只會傳送至某些建構設定中的伺服器,或者如「當機回報」中所述明確啟用。

快照觸發條件

快照會觸發位於 //src/diagnostics/config/triage/detect 目錄中的 .triage 檔案。已加入該目錄的檔案也必須新增至 //src/diagnostics/config/triage/BUILD.gn 中的 detect_unconditional_files

.triage 檔案為標準 Triage 格式。Detect 會新增新的 act 類型:

    snapshot_action: {
        type: "Snapshot",
        trigger: "something > something_else",
        repeat: "Hours(6)",
        signature: "a-string-with-restrictions",
    }
  • Triage-lib 會評估 trigger,就像在 Warning 類型動作中一樣。
  • 如果條件持續或重複,repeat 會允許重新篩選前的最短延遲時間。可以使用 Days()Hours()Minutes()。如果 repeat 值小於 MINIMUM_SIGNATURE_INTERVAL_NANOS,系統就會使用後者,並記錄警告。
  • signature 會回報在當機報告中。
    • fuchsia-detect-」會附加在簽名前面。
    • 簽名只能包含小寫英文字母和連字號 (不得包含空格或底線)。這個組合外的所有字元都會使用小寫或轉換為連字號,且系統會記錄錯誤。
    • 多個快照動作可能具有相同的簽章。每項動作的當機報告都相同。系統將使用觸發動作的值,以非每次動作套用 repeat 節流。

條件式檔案納入項目

偵測設定檔只能納入部分建構或產品子集。這項操作可在 //src/diagnostics/config/triage/BUILD.gn 中完成,方法如下:

  1. 將檔案新增至 detect_conditional_files,而非 detect_unconditional_files
  2. 建立新的 config_data() 項目;按照慣例,項目目標名稱應與檔案名稱相同
  3. 將該目標新增至適當的群組,以便將檔案以及任何應分析的元件一併納入

相關範例請參閱這裡

附屬細則

如果您在電腦上使用 Detect 進行偵錯,請參閱本節說明。

repeat 實際上是 trigger 這類的 Triage 評估運算式,並且可透過檢查資料以動態方式計算。運算式必須評估為奈秒的整數。

偵測檢查診斷資料的頻率是由 --check-every 指令列參數 (在 //src/diagnostics/detect/meta/triage-detect.cml 中設定) 設定。(這個運算式只能包含常數)。

偵測功能有內建時間延遲限制;如果 --check-every 小於 MINIMUM_CHECK_TIME_NANOS,就會結束偵測並顯示錯誤,且會延遲至少 MINIMUM_SIGNATURE_INTERVAL_NANOS 的重新擷取快照。您可以新增 --test-only 指令列引數來覆寫這些限制。