診斷結構定義

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