指標設定概念

指標設定會定義 Telemetry 服務執行的遙測廣告活動。指標設定是 MetricsConfig 通訊協定緩衝區 (protobuf) 訊息的執行個體。指標設定會指定如何收集、處理及記錄資料。原始設備製造商 (OEM) 可透過 Telemetry 服務的 API 啟用指標設定。多個設定可以同時執行。

開始之前,請先熟悉 SDV 架構,這是一種以服務為導向的架構,服務會以 protobuf 訊息的形式發布資料。這些訊息會透過 RPC 或發布/訂閱,使用 SDV 通訊堆疊進行通訊。

重要詞彙

指標設定會定義資料來源、處理規則和報表機制,以協調資料收集作業。這項邊緣處理技術的主要優點之一,就是能減少行動數據用量。在裝置上處理高頻率資料,並只上傳匯總資料或洞察資訊,可大幅減少傳輸至雲端的資料量。

定義指標設定時,首先要列出設定中使用的資料來源。這些服務會透過 SDV 通訊堆疊提供資料。啟用設定後,遙測服務會連線至這些來源,視需要串流或擷取資料。

設定的核心是邊緣資料處理功能,透過有狀態的「資料匯總工具」管理。每個匯總器都會使用訊息建構工具,維護有狀態的 proto 訊息執行個體。系統會評估運算式,藉此填入這則訊息中的每個欄位,定義要從其他資料來源或匯總器讀取哪些資料,以及要對資料套用哪些數學、邏輯或匯總運算。您可以對運算式的結果套用其他匯總。

觸發條件是控制這項程序的關鍵。這些函式可以定期觸發、因應新資料觸發,或在符合資料條件時觸發。觸發條件會決定匯總工具評估訊息建構工具的時間、產生指標報表的時間,以及影響設定生命週期 (例如開始或停止資料收集)。

指標報表是最終輸出內容。每份報告都包含訊息建構工具定義的資料酬載,以及時間戳記和報告 ID 等中繼資料。您可以在特定設定生命週期時間點產生報表,例如啟用或停用設定時。產生的報表會儲存在記憶體中,並透過報表狀態通知管道通知用戶端擷取。

下圖提供概念範例,說明指標設定中的元件如何互動:

概念圖:說明指標設定中的資料來源、處理程序和報表

圖 1. 指標設定中的資料來源、處理方式和報表。

指標設定元件

您可以使用指標設定定義資料收集工作,以及複雜的裝置端處理管道。本節詳細說明用於定義指標廣告活動的核心元件。這些元件會按照資料在系統中的流動順序呈現,從輸入到輸出。您可以依任意順序定義這些元件。您可以選擇是否要使用彙整器處理資料,以及管理資料生命週期。

  • 定義資料來源
  • 使用匯總器處理資料
  • 使用觸發條件控制執行流程
  • 產生指標報表
  • 管理資料收集生命週期

定義資料來源

資料是所有指標廣告活動的基礎。在指標設定中,接收資料的機制會經過抽象化,您只需要指定資料來源的識別名稱和連線模式 (訂閱或隨選)。資料來源可以是透過 SDV 通訊堆疊提供資料的任何服務,也可以是在可設定的發布商登錄檔中註冊的服務,這樣就能從無法使用 SDV 中介軟體的應用程式收集資料。每個資料來源在設定中都必須有專屬名稱,才能供其他指標設定元件 (例如觸發條件或匯總器) 參照。您可以設定連線方式、接收資料的頻率,以及提供服務專屬的設定物件。

設定資料來源

遙測服務可透過下列兩種方式連線至資料來源:

  • Getter:每當指標設定中定義的運算式需要從這個來源讀取資料時,這個方法就會視需要擷取資料。如果資料來源未提供連續串流,或您需要不常產生資料快照,這項功能就非常實用。
  • 訂閱:這是預設方法。這項服務會從來源建立連續資料串流,如果您打算使用資料觸發程序,在收到來自這個來源的新訊息時觸發程序,就必須使用這種連線類型。

使用訂閱項目時,您可以設定:

  • 子取樣:為避免過於頻繁地擷取資料,您可以定義來自相同來源的連續訊息之間的最短時間間隔。如果來源發布資料的速度快於這個間隔,遙測服務就會限制通知,且資料觸發程序只會針對限制後收到的訊息啟動。這會有效對資料進行子取樣。
  • 初始訊息擷取:您可以設定服務,在建立訂閱項目時從來源擷取最新訊息。因此,如果資料來源有值,系統會立即填入,不必等待發布第一則新訊息。這項功能適用於需要初始狀態的條件觸發程序或匯總工具,或是資料來源發布資料的頻率不高時。

無論類型為何,訊息都會在內部快取。如果多個運算式或匯總器在單一評估週期內需要來自相同來源的資料,系統只會擷取一次資料,方法是透過訂閱項目接收新訊息時從快取擷取,或是使用單一隨選呼叫。

使用匯總器處理資料

資料來源提供原始資料,而匯總器則會執行有狀態的邊緣資料處理作業。這些匯總器會取用資料來源或其他匯總器的資料、轉換資料,並提供結果供指標報表讀取,或供其他匯總器進一步處理。舉例來說,您可以在一個匯總工具中計算速度統計資料,並在另一個偵測駕駛行為模式的元件中使用這些統計資料,藉此建構多階段處理管道。

系統會觸發一或多個觸發條件,讓匯總器執行計算。 每當觸發條件觸發時,匯總器就會評估規則並更新內部狀態。

您可以設定匯總工具,在其他元件讀取其值後重設狀態,這有助於計算不重疊時間範圍的統計資料。

訊息建立工具會定義匯總工具的結構和邏輯。訊息建構工具會指定如何建構 proto 訊息的例項,方法是說明如何為每個欄位產生資料。每個欄位都有一個運算式,用於定義如何從資料來源和匯總器讀取資料,以及如何對這些資料套用作業。此外,您也可以套用匯總,也就是對一段時間內的運算式結果套用的計算或集合運算。

支援的彙整類型如下:

  • 數學:計算每個觸發程序中,運算式傳回值的統計資料 (平均值、最小值、最大值、總和、標準差和增量)。Delta 是指運算式傳回的目前和先前數值之間的差異。
  • 清單:將運算式傳回的值收集到清單中。您可以限制清單大小,建立近期值的滾動視窗 (環形緩衝區)。
  • 計數:未指定運算式的特殊情況。計算欄位評估次數 (即觸發匯總器或報表的次數)。
  • 直接傳遞:直接使用運算式結果,不套用任何匯總。在報表設定中,這項功能可存取匯總工具的最終值。

下圖為概念圖,說明匯總器評估:

概念圖:說明匯總器評估。

圖 2. 集結網站評估。

使用運算式執行計算或定義條件

運算式用於訊息建構工具和條件式觸發條件中,可執行計算或定義條件。使用指標設定產生器 (MCG) 撰寫指標設定 JSON 物件時,運算式會以人類可讀的字串形式編寫,並使用點記號存取資料來源的欄位 (例如 vehicle_speed.speed_value),以及套用各種作業。MCG 會將這些字串轉換為經過最佳化的樹狀結構,類似於抽象語法樹 (AST),以便在最終的 MetricsConfig protobuf 訊息中,有效率地評估裝置上的運算結果。

運算子和函式

運算式支援下列運算子和函式:

  • 算術:支援加法、減法 (二元和一元)、乘法、除法、模數和乘方。
  • 邏輯:支援 AND、OR、NOT 和 XOR。
  • 關聯:支援相等性檢查,以及大於和等於比較。
  • 清單:檢查清單是否包含特定值。
  • 時間戳記:傳回評估時的時間戳記 (以微秒為單位)。時鐘類型可以是即時時鐘、自啟動以來單調遞增的時間 (包括暫停時間),或是自啟動或上次恢復以來單調遞增的時間。
  • 絕對值:傳回數字的絕對值。
  • 四捨五入:四捨五入到最接近的整數 (round)、傳回小於或等於數字的最大整數 (floor),或傳回大於或等於數字的最小整數 (ceil)。

以下是範例運算式,可從兩個資料來源讀取資料,並在車輛速度超過 100 公里/小時且沒有輪胎壓力警告時,評估為 true

(vehicle_speed.speed_value * 3.6) > 100 && tire_pressure.warning == false

使用觸發條件控制執行流程

觸發條件是指標設定的協調器,可控制資料處理和報表產生時間。每個觸發條件都必須有不重複的名稱。

觸發條件可分為三種:

  • 資料觸發條件:在具有訂閱連線的資料來源發布新訊息時觸發 (如果已設定,則在向下取樣後觸發)。
  • 週期性觸發條件:以固定時間間隔觸發。
  • 條件式觸發條件:在符合指定邏輯條件時觸發。

條件觸發條件

條件式觸發條件會監聽其他觸發條件 (資料、週期性或其他條件式觸發條件),並在其中一個觸發條件觸發時評估運算式。只有在運算式的結果符合特定條件時,條件式觸發條件才會啟動。

您可以設定條件觸發條件,根據下列幾種條件類型觸發:

  • 值:運算式評估結果為 true (或非零) 或 false (或零)。
  • 上升邊緣:布林運算式從 false 變更為 true,或數值增加時。
  • 下降邊緣:布林運算式從 true 變更為 false,或數值減少時。
  • 變更時:每當運算式的結果與先前的值不同時。
篩選雜訊狀態變化

如果是邊緣或變更觸發條件,您可以要求條件在觸發前保持新狀態一段時間,藉此篩除短暫或有雜訊的狀態變化 (故障)。

舉例來說,您可以設定觸發條件,只有在 vehicle_speed > 100 變成 true 且維持 true 至少 5 秒時,才會觸發動作。這樣一來,系統就不會因為速度讀取值瞬間飆升而觸發事件。您也可以要求在這段保留期間內,所有值都完全相等。

產生指標報表

資料處理完成後,請定義資料封裝成報表的方式和時間。

報表是使用指標報表設定定義,這些設定會使用訊息建構工具定義輸出內容的結構和內容。當報表的其中一個觸發條件啟動時,訊息建構工具會評估其欄位指派情形,建構報表的資料酬載。

每份產生的報表都是 MetricsReport Protobuf 訊息的執行個體,會將訊息建構工具的輸出內容包裝在 payload 欄位中,並加入中繼資料。遙測服務會自動將下列中繼資料新增至每個 MetricsReport

  • 報表的通用唯一識別碼 (UUID)
  • 報表序號,這個報表設定每產生一份報表,序號就會遞增
  • 產生報表的時間戳記
  • 生成原因 (例如由規則觸發,或在關機時生成)
  • 產生報表的指標設定 UUID 和版本
  • 指標報表設定的名稱

報表產生控制項

報表通常會在觸發條件發生時產生,但您也可以設定在指標設定的特定生命週期階段產生報表:

  • 啟用時產生報表:啟用後,系統會立即產生初始報表。
  • 最終報告:如果啟用這項功能,系統會在資料收集作業暫停或停止時,或是在遙測服務關閉時,產生最終報告。這份報表包含該時間點前匯總的資料,有助於確保工作階段結束時不會遺失任何資料。

管理資料收集生命週期

根據預設,指標設定會在用戶端啟用後立即開始收集及處理資料,並持續到用戶端停用為止。不過,您可以定義觸發條件來啟動或停止資料收集或指標設定,更精細地控管這個生命週期:

  • 開始觸發條件:如果已定義,只有在觸發條件觸發時,系統才會開始收集資料。如果集合已因停止觸發條件而暫停,開始觸發條件會恢復集合。
  • 停止觸發條件:如果已定義,這項觸發條件會暫停資料收集作業。 在開始觸發條件再次觸發前,系統會停止匯總和產生報表。
  • 停用觸發條件:這個觸發條件會停用指標設定,與用戶端發出的 deactivate_metrics_config 呼叫相同。

舉例來說,您可以定義條件式觸發條件,在 vehicle_state 變更為 DRIVING 時啟動,並在 vehicle_state 變更為 PARKED 時停止。這有助於確保系統只會在車輛行駛時收集資料。