總覽
Fuchsia 內的診斷平台含有多項服務,每項服務 (例如 例如竊取資料、指標輪詢和錯誤狀態分析) 其診斷資料的特定屬性。
我們建立了名為「診斷選取器」的特定網域特定語言 (DSL), 能夠描述元件公開的診斷屬性選取器的用途 會根據診斷結構定義採取行動,且會在下列情況下使用:
- 診斷資料會編碼為「資料階層」,而具名節點同時代管兩個子節點 和命名的診斷屬性
- 診斷階層可歸因於公開資料的特定元件,並按 中,如果能找到想要的影像內容
診斷選取器具有下列高階語法:
<component_selector>:<hierarchy_path_selector>:<property_selector>
上述語法的三個部分可用來逐步建立 Fuchsia 診斷資料索引。 資料來源:
component_selector
:以生產者為準,指定診斷資料的生產者 moniker。hierarchy_path_selector
:指定生產端所公開資料階層的路徑 特定節點的流量property_selector
:針對您在 階層
有些是以診斷平台為建構基礎的工具 (例如「分類」和 偵測) 需要透過選取器來區分資料類型。這些工具 選取器 DSL,並使用指定資料類型的額外語法:
INSPECT|LOG|LIFECYCLE:<component_selector>:<hierarchy_path_selector>:<property_selector>
下文會詳細說明語法的各個部分。
匯出為 Files
留言
診斷選取器可以寫入平面目錄中的 cfg 檔案。在這些範圍內
檔案和註解,可使用 //
撰寫。例如:
// a comment
core/sessions/foo
core2/session:foo // inline comment
元件選取器
語法
元件選取器會定義模式,用來描述一或多個路徑名稱
元件拓撲元件元件選取器是一組正斜線
(/
) 分隔字串,用來說明從根元件到所需元件的路徑。
以下元件拓撲可用於示範元件選取器語法:
基於這個拓撲,請考慮使用下列元件選取器:
core/sessions/foo
這個元件選取器可明確識別名為 foo
的元件
相對於其上層 core
。
元件選取器的每個片段 (以正斜線分隔的區段) 只會描述元件拓撲的一個「層級」
元件選取器區隔只能包含元件可接受的字元
路徑名稱。每個元件選取器區隔都是
執行個體名稱或含有執行個體名稱的集合名稱
符合一組允許的字元和長度限制。集合之間的冒號 :
名稱和執行個體名稱必須以反斜線 (\
) 逸出。
外卡
元件選取器支援萬用字元,其將比對單一「level」元件的組成 選取器程式碼請參考適用於上述拓撲範例的 component_selector:
core/other_comp/*
此選取器比對系統上針對該父項名稱下執行的所有元件
other_comp
,在父項 core
下執行。下列為各種內容:
core/other_comp/foo
core/other_comp/bar
萬用字元也可以用來當成字串完成的規則運算式,用於計算 元件選取器以下是相對於上述拓撲的元件選取器 圖表:
core/*_comp
這符合系統上在名為 core
的父項下執行的所有元件。
以及名稱結尾為 _runner
的名稱包括下列魔鬼人物:
core/some_comp
core/other_comp
元件選取器可以使用遞迴萬用字元 **
,其符合所有元件
在指定領域下:
core/**
這符合系統在 core
下執行的所有元件,或 core
的任何子領域。
元件選取器 **
只會比對系統中的所有元件。
階層路徑選取器
語法
階層路徑選取器會定義用來描述結構化資料路徑的模式 移至一或多個已命名節點這個子選取器的語法與 元件選取器的組合,因為兩者都描述透過具名節點樹狀結構的路徑。只有 差別在於前述的選用樹狀名稱篩選器
建議您採用下列 JSON 編碼診斷資料階層。在這個例子中 來自檢查報告
"root": {
"reverser_service": {
"connection-0x0": {
"request_count": 1,
},
connection_validity: {
"is_valid": true
},
"connection_count": 1,
"connection_validity": "connection_xyz"
},
"version": "part1"
}
使用這個資料階層結構時,請考慮採用以下階層路徑選取器:
root/reverser_service/connection-0x0
此階層路徑選取器會明確描述資料階層根部的路徑 將資料導向資料階層中的特定節點
選取器的每個線段 (以正斜線分隔的區段) 都只會描述一個
資料階層層級或節點階層路徑選取器區隔可能包含任何字元
但如果區隔需要包含星號 (*
)、正斜線 (/
),
反斜線 (\
)、空白字元 (\t
或 ) 或冒號 (
:
) 必須逸出。
請注意,階層路徑選取器獨有,不是元件選取器 指定節點共用相同名稱的子項和屬性的情況。假設 一個選取器:
root/reverser_service/connection_validity
這個路徑階層選取器說明從根到
connection_validity
個節點。這與
reverser_service
節點上的 connection_validity
屬性,
可以透過資源選取器選取:
root/reverser_service:connection_validity
。
外卡
階層路徑選取器支援萬用字元,其將比對單一「層級」元件的組成 選取器程式碼以下範例會比對資料階層中屬於以下子項的所有節點: 在根目錄底下建立節點 verser_service:
root/reverser_service/*
萬用字元也可以用來當成字串完成的規則運算式,用於計算
元件選取器以下範例會比對 reverse_service
下所有啟動
connection-
。
core/reverser_service/connection-*
在上述範例中,唯一相符的節點為 connection-0x0
,但如有更多連線節點
那麼這些模型也會符合
樹狀名稱篩選器
當元件發布多個 fucshia.inspect.Tree
通訊協定時,選取器語法
支援使用通訊協定中繼資料中的 name
值篩選這些樹狀結構。
假設您先前建立的「檢查」階層
ffx inspect show core/my_component
:
core/my_component:
metadata:
name = root
component_url = fuchsia-boot:///my_component#meta/my_component.cm
timestamp = 70863435581892
payload:
root:
connections:
connections_closed = 7
core/my_component:
metadata:
name = second_tree
component_url = fuchsia-boot:///my_component#meta/my_component.cm
timestamp = 70863435581892
payload:
root:
data:
values = [0, 1, 2]
如果您知道自己需要 root/data:values
屬性,可以使用樹狀結構名稱篩選器:
避免使用以下語法製作兩棵樹的負擔 (省略屬性)
:
[name=second_tree]root/data
如果您不知道要選取哪個樹狀結構,或確定要從所有選項中選取 那麼您可以使用這個階層選取器:
[...]root
等同於列出所有名稱:
[name=root, name=second_tree]root
目前,省略清單會視為與 [...]
相同,但屬於柔性轉換。
如果您知道元件會匯出多個名稱不同的樹狀結構,請使用明確語法。
如果元件在發布檢查時未指定名稱,就會隱含 root
。
這個錯誤追蹤讓省略的名稱篩選清單等同於
[name=root]
。
名稱篩選器清單中的值沒有字元限制,但 :
、*
和空格
都必須逸出。如果名稱含有 [a-zA-Z0-9-_]
以外的值,就必須將名稱加上引號。
名稱篩選器須區分大小寫;
資源選取器
語法
屬性選取器是最簡單的所有子選取器。會定義要比對的模式 單一字串,這是診斷階層中的屬性名稱。診斷中的所有房源 階層都有字串名稱省略屬性選取器實際上是 階層路徑選取器
和先前的選取器區隔一樣,如果您想與星號 (*
) 比對,
正斜線 (/
)、反斜線 (\
)、空白字元 (分頁 \t
或 ),
或冒號 (
:
) 必須使用反斜線 (\
) 逸出。
外卡
萬用字元可用來比對整個屬性字串,或用做完成字串的 glob。
eg: abc will match any string with the exact name "abc".
eg: a\* will match any string with the exact name "a*".
eg: a\\* will match any that starts with exactly "a\".
eg: a* will match any string that starts with "a".
eg: a*b will match any string that starts with a and ends with b.
eg: a*b*c will match any string that starts with a and ends with c, with b in the middle.
完整選取器範例
以下選取器會從現有系統中的任一 echo.cm
執行個體選取資料
任何屬於 realm1
的領域。擷取的資料會是「active_connections
」
位於 a/b/c
的節點上。
realm1/*/echo:a/b/c:active_connections
以下選取器會從系統上的任何 echo.cm
例項中選取檢查資料:
存在於 realm1
底下的任何領域中。檢查資料會是
節點的 memory_usage property
權限,位於 a/b/c/d
。
realm1/echo:a/b/c/d:*