診斷結構定義

本文件說明瞭 Archivistfuchsia.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"
   
},
}

記錄

記錄回應的中繼資料包含下列欄位:

  • 錯誤:擷取元件時發生的錯誤。請檢查資料 (選用)。每個錯誤都可以 可能是下列其中一項:

    • 捨棄的記錄數量:元件因通訊端寫入而捨棄的記錄數量 發生錯誤。
    • 已推出的記錄數:由於 內部記錄緩衝區已滿。
    • 無法剖析記錄:無法剖析元件寫入通訊端的記錄記錄 剖析。
    • 其他:說明所發生其他錯誤的字串。
  • 元件網址:啟動元件的網址。

  • 時間戳記:架構中事件發生時的單調時間。

  • 嚴重性:記錄的嚴重性。只能設定為:TraceDebugInfoWarnErrorFatal

  • 標記:與記錄相關聯的字串標記清單 (選用)。

  • 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",
           
...
       
}
   
}
}