本文件說明瞭 Archivist 的
fuchsia.diagnostics/ArchiveAccessor#StreamDiagnostics
。
簡介
標準診斷資料結構定義描述了所有診斷資料中共用的結構 資料來源 (透過串流或快照存取)。這個標準結構定義提供了 關於現在呼叫診斷資料的條件診斷資料必須符合以下規定:
- 與對應系統執行單位對應的特定路徑名稱建立關聯。
- 有時間戳記。
- 包含任意結構化資料酬載,包括階層資料。
診斷結構定義可視為包含三個不同部分:命名空間區塊、 和酬載區段
結構定義
頂層
頂層結構定義包含下列欄位:
這在 JSON 中看起來會像這樣:
{
"data_source": "INSPECT",
"moniker": "core/foo",
"metadata": { ... },
"payload": { ... },
"version": 1,
}
名稱間距
「命名空間」部分顯示的資訊可套用到整個 和所有資料類型的結構定義這項資訊是用來描述來源的命名空間 產生這些診斷資料的樣本命名空間部分包含兩個欄位:
- 用來描述診斷資料所含元件的
moniker
元件 指定套用的防火牆規則 data source
:說明是哪一項診斷服務產生資料。
中繼資料
中繼資料區段由具有靜態已知與記錄結構定義的屬性組成, 單一值無法跨所有巢狀架構共用。每個資料來源都會新增專屬的 中繼資料屬性。中繼資料部分是儲存獨特且無法判定的變化版本的位置 都會以統一結構定義顯示
檢查
檢查回應的中繼資料包含下列欄位:
錯誤:擷取元件時發生的錯誤。請檢查資料 (選用)。 這個錯誤是含有單一
message
字串欄位的物件。元件網址:啟動元件的網址。
時間戳記:系統建立檢查資料快照的單調時間。
檔案名稱:檢查資料位於元件的
out/diagnostics
目錄 (如有)。
這在 JSON 中看起來會像這樣:
{
...,
"metadata": {
"errors": [
{
"message": "...",
}
],
"component_url": "fuchsia-pkg://...",
"timestamp": 12345,
"filename": "fuchsia.inpsect.Tree"
},
}
記錄
記錄回應的中繼資料包含下列欄位:
錯誤:擷取元件時發生的錯誤。請檢查資料 (選用)。每個錯誤都可以 可能是下列其中一項:
- 捨棄的記錄數量:元件因通訊端寫入而捨棄的記錄數量 發生錯誤。
- 已推出的記錄數:由於 內部記錄緩衝區已滿。
- 無法剖析記錄:無法剖析元件寫入通訊端的記錄記錄 剖析。
- 其他:說明所發生其他錯誤的字串。
元件網址:啟動元件的網址。
時間戳記:架構中事件發生時的單調時間。
嚴重性:記錄的嚴重性。只能設定為:
Trace
、Debug
、Info
、Warn
、Error
、Fatal
。標記:與記錄相關聯的字串標記清單 (選用)。
Pid:產生記錄的程序 koid (選用)。
Tid:發出記錄的執行緒 Koid (選用)。
檔案:產生記錄的檔案名稱 (選用)。
行:檔案中提交記錄的行號 (選填)。
這在 JSON 中看起來會像這樣:
{
...,
"metadata": {
"errors": [
{
"dropped_logs": { "count": 3 },
}
],
"component_url": "fuchsia-pkg://...",
"timestamp": 12345,
"severity": "Info",
"tags": ["foo"],
"pid": 123,
"tid": 456,
"file": "lib.rs",
"line": 5,
},
}
酬載
酬載部分包含系統回報的實際診斷資料。酬載結構 階層,而且結構定義和主題的編碼方式是按照資料在 階層 (例如所在節點的名稱)。
檢查
檢查回應的酬載是一個物件,代表元件的檢查樹狀結構 就是在建立快照時公開曝光
這在 JSON 中看起來會像這樣:
{
...,
"payload": {
"root": {
"foo": { ... },
"bar": 3,
...
}
},
}
記錄
記錄酬載是一個物件,包含下列欄位:
- 訊息:包含記錄訊息。這是一個物件,其中包含一個欄位:
- 值:代表記錄訊息的字串。
- 鍵:包含的物件具有結構化記錄訊息的鍵和相關聯的值。
如果是一般文字記錄 (或不含索引鍵的結構化記錄),在 JSON 中看起來應如下所示:
{
...
"payload": {
"message": {
"value": "my log",
}
}
}
如果是包含金鑰的結構化記錄,在 JSON 中應如下所示:
{
...
"payload": {
"message": {
"value": "my log",
},
"keys": {
"foo": 3,
"bar": "baz",
...
}
}
}