偵測在裝置上執行作業,並定期收集及評估診斷資料,以便決定是否要產生當機報告 / 快照。
運作方式
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
中完成,方法如下:
- 將檔案新增至
detect_conditional_files
,而非detect_unconditional_files
- 建立新的
config_data()
項目;按照慣例,項目目標名稱應與檔案名稱相同 - 將該目標新增至適當的群組,以便將檔案以及任何應分析的元件一併納入
相關範例請參閱這裡。
附屬細則
如果您在電腦上使用 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
指令列引數來覆寫這些限制。