設定分類

Triage 根據設定檔分析「診斷」資料。

總覽

分類可讓任何人輕鬆新增分析方法,以分析自己的「fx snapshot」資料, 各種異常狀況下

根據預設,設定檔會 //src/diagnostics/config/triage/*.triage。只要在其中新增設定檔即可。

設定檔語法為 JSON5。

每個設定檔都會指定四種設定:選取器和評估 (統稱為「指標」)、動作和測試。

  • 選取器會載入供 Evals 和 Actions 使用的值。
  • 評估會計算用於評估和動作的值。
  • 動作會決定特定值的處理方式。
  • 測試內含範例資料,可驗證指定的動作觸發條件 正確。

每個「Select」、「Eval」、「Test」和「Action」都有各自的名稱。因此,設定的結構 檔案:

{
    "select": {
        "select1": "type:component:node/path:property",
        "select2": "type:component:node/path:property"
    },
    "eval": {
        "name1": "select1+select2",
        "name2": "select1 - select2"
    },
    "act": {
        "action1": { .... },
        "action2": { .... }
    },
    "test": {
        "test1": { .... },
        "test2": { .... }
    }
}

名稱和命名空間

選取、評估、動作、測試和設定檔名稱由 小寫英文字母或底線 字元,後面接零或多個 英數字元、底線或底線字元。因此,「abc123」和「_abc_123」為有效 名稱,但「123abc」、「a.b.c」和「abc-123」但實際上並非如此尤其是檔案名稱 不得包含半形句號,.triage 副檔名除外。

一個檔案中的評估、測試和動作可參照選取器、評估和動作 複製到其他檔案中檔案 basename 會做為命名空間。系統會使用 :: 做為 分隔符舉例來說,如果載入檔案 foo.triage 並包含指標 名稱為 bar,則任何設定檔皆可參照 foo::bar

「指標」、「測試」和「動作」名稱可重複使用,但不得在「選取」部分之間重複使用 和 Eval

使用者定義的名稱開頭必須為小寫英文字母。提供語言 函式的開頭首字母大寫。

注意:目前程式版本不保證能強制執行下列版本: 以及

選擇器

選取器會使用「選取器」格式。第一個 : 之前的文字會選取 inspect.json 檔案中的元件名稱。. 個分隔的中間部分 會指定檢查節點名稱,形成以 第二個:

計算方式

評估字串是採用一般運算子優先順序的中置數學運算式。

()。

算術運算子包括 + - * / // /? //?/ 是浮點數;// 是 int 。帶有 ? 的除法運算子時,傳回 Problem::Ignore on division by 0.

函式為函式名稱「(', 以半形逗號分隔的運算式清單, ')'」。 提供的函式包括:

  • 布林值
    • And(1+ args)
    • Or(1+ args)
    • Not(1 arg)
    • 如果值是 Missing 類型錯誤,Missing(value) 會傳回 true 指標。
    • 如果值是任何類型的錯誤,Problem(value) 會傳回 true。
    • True() 會傳回 true
    • False() 會傳回 false
  • 數字
    • Min(1+ args)
    • Max(1+ args)
    • Abs(1 arg)
  • 功能
    • Fn([name1, name2, ...], expression)
    • Map(function, vector1, vector2, ...)
    • Fold(function, vector, optional_start_value)
    • Filter(function, vector)
    • Apply(function, [arg1, arg2, ...])
    • Count(vector)
  • 時間
    • Days()Hours()Minutes()Seconds()Millis()Micros()、 和 Nanos() 計算與單調時間戳記比較的值。
    • Now() 會傳回診斷資料之前的近似時間戳記 已建立。
  • 其他
    • Option(value1, value2, value3...) 會傳回第一個實用的值,以便 支援選取器遷移和預設值:第一個非空白清單 非遺漏值 (如有);或空白清單 (如果有的話);或遺漏。
    • Annotation(string) 會從 註解.json 檔案 (如果有的話)
    • SyslogHas(regex)KlogHas(regex)BootlogHas(regex)返回日期:true 如果 Syslog、核心記錄或之前啟動的記錄內含有一行符合 規則運算式
    • StringMatches(value, regex) 會將指定的規則運算式套用到指定的 如果有相符項目,則會傳回 true。規則運算式語法是 Rust 規則運算式 Crate 支援。

指標類型遵循從「檢查」檔案讀取的類型。目前 UInt 為 但會在讀取時轉換為 Int同時在混合 Int 和 Float 上運作 轉換至 Float 的結果

布林作業是 > < >= <= == !=。等式測試 ==!= 比較 數字、布林值、字串和向量。> < >= <= 只能比較數字。

空白位置是選填欄位,但建議使用中置運算子。

指標名稱 (包括命名空間名稱) 不需要特別分隔。

功能程式設計和向量

每個選取器實際上都會傳迴向量,但單一項目向量 為了計算算術和布林值而自動解除包裝 。不使用萬用字元檢查選取器時,系統會傳回一個項目 會向量,除非在 inspect.json 中重複出現同一位路徑名稱。

使用萬用字元的選取器、bootstrap/driver_manager 的選取器和 core/network/netstack 和 (最終) 記錄選取器可能會傳回 同一個向量中的多個項目為處理這種值,Triage 提供 以下函式:

  • Fn(parameters,expression) - 例如 Fn([a, b], a+b)
  • Map(function, vector1, vector2...)
  • 折疊(函式, 向量) 或 Fold(函式, 向量, 起始值)
  • 篩選器(函式, 向量)
  • 計數(向量)

值的向量會寫出 [ expr, expr, expr ]

如果對應至對應的 values 引數不是向量,則其值會套用至每個向量 如果所有 values 都不是向量,或是未提供 values, 會傳回空白向量如果向量 values 的長度不同, 最短的 1 會決定結果長度,不採用剩餘的值。

Count() 不會檢查向量 values 中的項目類型。的 Count() 非向量 values 會傳回遺漏值。

如果 Fn 運算式是「eval」的整個結果運算式的名稱 運算式可以做為地圖、折疊或篩選器的第一個引數。

如果函式的引數引數格式錯誤,則會傳遞至函式 ,即可傳回「遺漏」。如果函式的評估失敗,例如 則傳遞至此函式的函式可能會傳回部分值:

  • 地圖會傳迴向量,但某些元素可能會遺漏。
  • F Fold 傳回遺漏。
  • 篩選器預期其篩選器函式傳回布林值 true 或 false。如果這樣 函式會傳回任何其他內容,包括「 Missing」、「Filter」新增 的值。

動作

每個動作都會決定如何顯示特定選取器的資訊。 目前有兩種動作類型:「警告」和「Gauge」動作為 方法是為 type 欄位提供適當的值。

警告類型

Warning 是一種動作,可在布林條件時發出快訊 符合。

Warning 支援下列欄位:

  • trigger 為必填欄位,指定提供 布林值。
  • print 是必填欄位,指定在警告出現時要輸出的字串 提高上限。
  • tag (選用欄位) 可將代碼與這項動作建立關聯。
  • file_bug 是選用的字串欄位,會指定應回報錯誤 以及顯示位置分類不會直接回報錯誤;這個欄位只會將 一般使用者 (人工使用者或自動化管道)。可能是 Issue Tracker 元件 (例如「Fuchsia > 國際化 (i18n)」),或其他問題追蹤工具的參考資料 。
    "actions": {
        "disk_usage_high": {
            "type": "Warning", "trigger": "disk_used / disk_total > 0.95", "print": "Disk usage is high!"
        }
    }

度量類型

Gauge 是叫用 Triage 時特定值的快照。 Gauge 支援下列欄位:

  • value 是必填欄位,指定要顯示的值。
  • format 是選用欄位,指定計量值的格式規則。

格式

format 欄位可讓使用者控制計量值的顯示方式。如果 就算您沒有提供這個欄位,也不會在輸入無效值的情況下 format 支援下列值:

  • percentage:以百分比值輸出浮點值。
    "actions": {
        "disk_usage": {
            "type": "Gauge", "value": "disk_used / disk_total", "format": "percentage"
        }
    }

測試

每項測試都會指定:

  • 範例資料,索引鍵為 inspect
  • 依據 yes 索引鍵為索引鍵,應觸發的動作清單
  • 依據 no 輸入索引鍵時不應觸發的動作清單

範例資料的格式與 inspect.json 檔案相同:地圖陣列 其中,每個對應都包含 pathcontents 欄位。

    "tests": {
        "test1": {
            "yes": ["action1", "action2"],
            "no": ["action3"],
            "inspect": [
                {
                    "path": "global_data",
                    "contents": {"root": {"stats":
                        {"total_bytes": 10, "used_bytes": 9}}}
                }
            ]
        }
    }