診斷結構定義

本文件說明 Archivistfuchsia.diagnostics/ArchiveAccessor#StreamDiagnostics 傳回的回應結構定義。

說明

標準診斷資料結構定義描述了所有診斷資料來源共用的結構,無論來源是透過串流還是快照存取。這個標準結構定義針對現在可以呼叫診斷資料的部分提供了一些規定;診斷資料必須符合以下條件:

  • 與該系統的執行單元相對應的特定路徑名稱相關聯。
  • 加上時間戳記。
  • 包含任意結構化資料酬載,包括階層資料。

診斷結構定義可以視為包含三個不同區段:命名空間區段、中繼資料區段和酬載區段。

結構定義

頂層

頂層結構定義包含下列欄位:

如下所示:

{
    "data_source": "INSPECT",
    "moniker": "core/foo",
    "metadata": { ... },
    "payload": { ... },
    "version": 1,
}

命名空間

「命名空間」部分包含可套用至整個結構定義的資訊 (不限資料類型),這些資訊會用來說明產生這項診斷資料的來源命名空間。命名空間部分由兩個欄位組成:

  • 元件 moniker,說明結構定義中包含的診斷資料適用的元件。
  • data source 說明是哪個診斷服務產生資料。

中繼資料

中繼資料區段包含具有靜態已知和記錄結構定義的屬性,這些結構定義無法在所有巢狀結構定義之間共用一個值。每個資料來源都會加入各自的中繼資料屬性。中繼資料區段是診斷結構定義中,以此表示不重複的和無法判定的變化版本所呈現的位置。

檢查

「檢查回應的中繼資料」包含下列欄位:

  • 錯誤:擷取元件時發生的錯誤「檢查資料」(選用)。錯誤是含有單一 message 字串欄位的物件。

  • 元件網址:啟動元件的網址。

  • 時間戳記:對檢查資料建立快照的單調時間。

  • 檔案名稱:檢查資料位於元件 out/diagnostics 目錄中的檔案名稱 (如果有的話)。

如下所示:

{
    ...,
    "metadata": {
        "errors": [
            {
                "message": "...",
            }
        ],
        "component_url": "fuchsia-pkg://...",
        "timestamp": 12345,
        "filename": "fuchsia.inpsect.Tree"
    },
}

記錄

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

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

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

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

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

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

  • Pid:發出記錄的程序 koid (選用)。

  • Tid:產生記錄的執行緒 koid (選用)。

  • 檔案:產生記錄的檔案名稱 (選填)。

  • 行:產生記錄的檔案中的行號 (選填)。

如下所示:

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

酬載

酬載部分包含回報的實際診斷資料。酬載採用階層式結構,而資料的結構定義或主題會以其在階層中的位置 (例如所在節點的名稱) 編碼。

檢查

「Inspect」回應的酬載是一個物件,代表該元件在建立快照時公開的檢查樹狀結構。

如下所示:

{
    ...,
    "payload": {
        "root": {
            "foo": { ... },
            "bar": 3,
            ...
        }
    },
}

記錄

記錄酬載是一個物件,包含下列欄位:

  • 訊息:包含記錄訊息。以下物件含有一個欄位:
    • 值:代表記錄訊息的字串。
  • 鍵:包含物件,以及結構化記錄訊息的鍵和相關聯的值。

如果是一般文字記錄 (或不含索引鍵的結構化記錄),在 JSON 中會如下所示:

{
    ...
    "payload": {
        "message": {
            "value": "my log",
        }
    }
}

如為含有金鑰的結構化記錄,在 JSON 中會如下所示:

{
    ...
    "payload": {
        "message": {
            "value": "my log",
        },
        "keys": {
            "foo": 3,
            "bar": "baz",
            ...
        }
    }
}