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