Fuchsia 診斷資料保留服務會在裝置重新啟動時保留診斷資料。
運作方式
服務觸發後,Persistence 會讀取診斷資料集,並將資料儲存至磁碟。持續性會發布儲存在自身檢查階層中的資料,以便在下次啟動時檢查。
持久性是透過設定檔中的項目設定。每個項目都會指定服務名稱、該服務中的標記,以及一組選取器。服務名稱會設定 FIDL 服務。
FIDL 會將資料保存要求傳送至 Persistence,要求保存該標記的選取器。不會定期取樣。每則訊息都包含單一標記。
每個標記都有兩項限制:大小上限和持續率受到節流。
如果要求傳送速度過快,系統會延後處理,直到退避時間到期為止。 在退避期間內收到的多個要求會合併為一個。
如果要求選取器擷取的資料過多,系統會改為儲存錯誤字串,並覆寫該要求先前儲存的所有資料。
如何使用 Persistence
如要保留資料並發布,請按照下列步驟操作:
定義資料
決定要保留哪些資料。如果尚未寫入 Inspect,請新增程式碼來發布。請注意,要求傳送後,資料可能會在一段時間後由 Persistence 擷取,特別是時間退避啟動時。
將資料加入許可清單
持續性會從 fuchsia.diagnostics.ArchiveAccessor.feedback 讀取資料,因此您需要在該管道的設定檔中,將 Inspect 資料列入允許清單。
設定持續性
將檔案放入 //src/diagnostics/config/persistence 或 //vendor/*/diagnostics/config/persistence。檔案名稱必須為 *.persist。在 BUILD.gn 中,將檔案新增至 persistence_files。
.persist 檔案採用 JSON5 格式。每個檔案都包含物件陣列。 每個物件都有下列結構定義:
{
tag: 'any-name-you-like', // lowercase and hyphens only
service_name: 'service-name', // lowercase and hyphens only
max_bytes: 1000, // limit on size of JSON-format data persisted
min_seconds_between_fetch: 60, // limit on frequency
selectors: [
'INSPECT:core/component:root/path:leaf_name',
'INSPECT:core/component:root/*:another_leaf',
],
},
所有欄位均為必填。資料可從任何元件擷取,但只有已將服務路徑傳送至其中的元件,才能要求擷取資料。
每個服務的標記名稱不得重複。設定檔名稱可任意命名,但設定目錄之間不得重複。
取得隱私權核准
隱私權團隊需要審查持續性設定。如要取得評論,
- 取得 CL +2'd
- 將 claytonmccray@、crjohns@ 和 bbosak@ 新增至 CL。
- 我們會為 CL +1,並新增隱私權審查人員。
- 隱私權團隊成員會 +2 CL (或提出疑慮)。
- 隱私權團隊將 CL 設為 +2'd 後 (可能需要約一週時間),就會顯示「OWNERS approval」,您即可提交。
使用已發布的資料
下次啟動時,軟體更新檢查完成後,系統就會立即將儲存的資料發布至 Inspect。
如果選取器為 INSPECT:core/test_component:root/path:number,服務為 my-service,代碼為 my-tag,資料會位於 core/diagnostics-persistence:root/persist/my-service/my-tag/core\test_component/root/path:number 下方。