本指南詳細說明指標設定產生器 (MCG) 工具 /api/v1/generate_metrics_config 端點的 JSON 要求格式。您可以使用這種格式,以人類可讀的結構定義遙測活動,包括指定資料收集、裝置端處理和報表產生作業。
MCG 工具會驗證這個 JSON 物件,檢查類型不符、循環依附元件或未定義的參照等問題,然後編譯成 MetricsConfig 通訊協定緩衝區 (protobuf) 訊息。這個MetricsConfig訊息是裝置端遙測服務執行的二進位格式,用於執行廣告活動。
必要條件:您應熟悉 JSON 結構定義、protobuf 和基本資料結構。如需概念總覽,請參閱「指標設定概念」。
如何撰寫設定說明
如要設計指標收集廣告活動,請按照下列邏輯流程操作:
範例:平均速度報表
本指南會透過範例,說明如何搭配使用所有元件。這項功能會建立報表,每分鐘計算車輛的平均速度。這個範例定義了資料來源 (SpeedSource) 來收集速度資料、觸發條件 (OnNewSpeed、EveryMinute) 來控制執行流程、匯總工具 (SpeedAggregator) 來計算平均值,以及指標報表設定 (MinuteReport) 來封裝結果。可展開部分的範例會以這個情境為基礎。
指定資料來源
遙測功能支援從 SDV 服務 (透過 SDV 中介軟體) 和可設定的發布商登錄檔發布商收集資料。
SDV 服務 (以發布/訂閱為基礎):資料可從 VSIDL 中定義的發布/訂閱管道取得。
SDV 服務 (以 RPC 為基礎):如果服務公開
CreateSubscription或GetLatestMessageRPC,即可取得資料。可設定的發布商登錄檔發布商:如果應用程式使用
IConfigurablePublisherRegistryAndroid Binder 介面或 Telemetry SDK 中的可設定發布商登錄檔程式庫註冊自身,即可取得資料。
如要在 SDV 中使用資料,請定義資料來源 (概念),然後將其新增至 data_sources 陣列。
資料來源物件的欄位 (data_sources 清單中的項目) |
|||||
|---|---|---|---|---|---|
name |
使用者定義的字串,用於在指標設定中識別這個資料來源。 | ||||
source_identifier |
用於探索服務的 ID。詳情請參閱source_identifier 格式。 |
||||
connection_type |
SUBSCRIPTION,用於連續資料串流 (資料觸發條件需要此設定),或 ON_DEMAND,用於隨選擷取 (詳情請參閱資料來源設定)。 |
||||
選填configuration |
僅限 RPC 和可設定的發布商登錄檔。用來設定資料來源的物件,包含下列欄位:
|
||||
SUBSCRIPTION 連線類型的欄位 |
|||||
選填sub_sampling_interval_ms |
僅限 Pub/Sub。非負整數 (毫秒),可指定訊息間的最小間隔,藉此限制訊息頻率。 | ||||
選用fetch_last_message(預設值: false) |
僅限 Pub/Sub。布林值。如果 true 在連線時擷取最新訊息。 |
||||
並非所有資料來源類型都適用所有選項。詳情請參閱資料來源整合指南。
source_identifier 的格式
遙測服務接受多種來源 ID 格式。如需概覽,請參閱指標設定中的資料來源定義。
只有在 source_identifier 使用「單元類型名稱」格式時,MCG 才會從 source_identifier 推斷 protobuf 訊息類型。如果使用 FQIN 或自訂名稱 (來自可設定的發布商登錄檔),MCG 就無法推斷類型。在這些情況下,您必須提供 data_source_message_types。如果類型不在目錄中,您也必須在 descriptor_protos 中提供定義。
範例:定義資料來源
這個範例會回報車速。首先,請參閱 VSIDL 目錄,找出發布這項資料的服務。
使用 SDV 程式碼集中的範例目錄,找出相關服務。請根據source_identifier格式,指定 protobuf 訊息類型 mcg.test.subpkg.speed_msg。由於速度通常會頻繁發布,請使用 sub_sampling_interval_ms 將更新限制為每秒一則訊息:
{ "name": "SpeedSource", "source_identifier": "mcg.test.subpkg.speed_msg", "connection_type": "SUBSCRIPTION", "sub_sampling_interval_ms": 1000 // Limit updates to 1 per second }
定義邏輯和處理程序
邏輯是由兩個共同運作的元件處理:觸發條件 (概念) 會定義事件發生的時間。匯總器 (概念) 則會根據這些觸發條件定義資料的處理方式。由於運算式 (概念) 是觸發條件和匯總邏輯的關鍵,因此本節會先說明如何編寫運算式。
運算式
運算式可讓您使用易於閱讀的語法定義計算和條件。MCG 會將這些字串編譯為可執行格式,並針對裝置端評估進行最佳化。
運算式可表示算術計算、邏輯條件和資料比較。如需完整語法 (包括運算子和函式),請參閱「運算式語法」。
資料更新間隔:運算式存取資料來源時,系統會根據連線類型決定擷取行為:
SUBSCRIPTION:使用遙測服務快取的最後接收訊息。(注意:如果已設定sub_sampling_interval_ms,這可能與絕對最新的已發布訊息不同)。ON_DEMAND:立即觸發呼叫,從服務擷取最新訊息。
類型限制
- 陣列:不支援直接存取陣列索引 (例如
my_data_source.my_array[0])。 - 類型安全:請務必比較相容的型別 (例如,請勿比較字串欄位與整數清單)。
範例:運算式
這個範例需要擷取速度值,以計算平均值。此外,系統也必須判斷車輛是否超速 (超過 100 公里/小時),才能觸發條件式觸發程序。您可以在資料來源使用的 protobuf 訊息定義中找到欄位名稱 (在本例中為 speed)。下列運算式可達成此目的:
SpeedSource.speed:從SpeedSource資料來源擷取speed欄位的值。SpeedSource.speed > 27.7:如果速度大於 27.7 公尺/秒 (約 100 公里/小時),則評估結果為true。
觸發條件:定義動作的發生時間
觸發條件會定義動作的執行時間:評估匯總工具、產生報表或控管收集生命週期。將所有已定義的觸發條件新增至頂層 triggers 陣列。
觸發物件的欄位 (triggers 清單中的項目) |
|
|---|---|
name |
指標設定中這個觸發條件的專屬 ID。 |
periodicdataconditional |
您必須提供其中一個欄位來定義行為。 |
資料觸發條件
當 SUBSCRIPTION 資料來源提供新訊息 (概念) 時,就會觸發此事件。
data 物件的欄位 (位於觸發條件中) |
|
|---|---|
source_name |
觸發條件監聽的 name data_source。 |
範例:資料觸發條件
在這個範例中,每次 SpeedSource 發布新訊息時,都會更新平均速度計算。每當發生下列情況時,這項資料觸發條件就會觸發:
{ "name": "OnNewSpeed", "data": { "source_name": "SpeedSource" // Reference to the defined data source } }
定期觸發
按固定間隔觸發 (概念)。
periodic 物件的欄位 (位於觸發條件中) |
|
|---|---|
period_ms |
非負數,定義間隔 (以毫秒為單位)。 |
範例:週期性觸發條件
這個範例需要每分鐘產生一份報表。這個週期性觸發程序每 60,000 毫秒就會觸發一次,以產生報表:
{ "name": "EveryMinute", "periodic": { "period_ms": 60000 // 60,000 ms = 60 seconds } }
條件式觸發
系統會根據運算式 (概念) 的評估結果觸發。這項評估需要一或多個父項觸發條件才能啟動。這通常是運算式中資料來源或彙整器的資料觸發條件,或是定期輪詢資料的觸發條件。
conditional 物件的欄位 (位於觸發條件中) |
|
|---|---|
triggers |
陣列,至少包含一個父項觸發條件名稱。當父項觸發條件觸發時,條件式觸發條件會評估運算式。 |
expression |
要評估的運算式。請參閱「運算式」。 |
condition_type |
根據運算式的評估結果,指定觸發條件的觸發時機。 |
條件類型
condition_type 字典必須包含一個可用的條件類型做為鍵。詳情請參閱條件式觸發條件。
condition_type 物件的欄位 (互斥) |
|
|---|---|
is_trueis_false |
布林運算式分別評估為 true 或 false 時,就會觸發。 |
rising_edge |
如果是數值,則會在值增加時觸發。如果運算式是布林值,則會在從 可包含 |
falling_edge |
如果是數值,會在值減少時觸發。如果是布林運算式,會在值從 可包含 |
all_changes |
當運算式的結果與先前的值不同時,就會觸發這個事件。如果設定了邊緣選項,則僅支援數值和布林值。 可以包含 |
邊緣選項
rising_options 和 falling_options 物件包含下列欄位。如果提供,相應的轉場效果必須符合時間長度規定。如果沒有指定選項,轉場效果會立即觸發。
| 邊緣選項物件的欄位 | |
|---|---|
min_duration_ms |
非負數 (以毫秒為單位),指定觸發條件啟動前,條件必須在新狀態中維持的時間長度。 |
選填require_exact |
布林值。如果為 true,則在指定時間內發布的所有值都必須相同,觸發條件才會觸發。 |
範例:條件式觸發條件
以下觸發條件使用邊緣選項。如果速度超過 27.7 公尺/秒,且維持高速至少 5 秒,就會觸發:
{ "name": "SpeedingFor5Seconds", "conditional": { "triggers": ["OnNewSpeed"], "expression": "SpeedSource.speed > 27.7", "condition_type": { "rising_edge": { "rising_options": { "min_duration_ms": 5000 // Condition must hold for 5s in new state } } } } }
匯總器:定義資料處理方式
使用匯總工具處理有狀態的中間資料 (概念)。
定義匯總工具,並將其新增至 aggregators 陣列。
彙整工具會轉換資料,並提供給其他彙整工具和報表。
匯總工具的欄位 (aggregators 清單中的項目) |
|
|---|---|
name |
使用者定義的字串,用於識別這個彙整器。運算式可依名稱參照這個彙整器,以存取其結果。 |
trigger_names |
一或多個觸發條件名稱的陣列,會導致評估這項匯總作業。 |
選填reset_on_get |
布林值,預設值為 `false`。如果為 `true`,系統會在其他匯總器、指標報表或條件式觸發程序存取值後,重設匯總狀態。 |
message_builder |
定義要讀取、處理及匯總的資料。輸出訊息的欄位隨後會成為其他匯總工具和報表的資料來源。這項作業會使用 field_assignments,每個指派作業都會定義輸出訊息中的欄位。 |
訊息建構工具
message_builder 物件會定義輸出訊息結構,以及用於計算欄位的匯總邏輯。匯總工具和報表設定都會使用這個物件。
message_builder 物件的欄位 (在匯總工具或報表中) |
|
|---|---|
message_type |
輸出內容的 protobuf 訊息類型完整名稱。如果省略,MCG 會根據field_assignments推斷的輸出類型建立自訂訊息類型。只有在訊息建構工具是指標報表的一部分,且報表必須符合特定預先定義的 protobuf 訊息定義時,才使用這個屬性。 |
field_assignments |
欄位定義物件的陣列。每個物件都會指定輸出訊息中的欄位,以及計算其值的邏輯。 |
欄位指派物件的欄位 (field_assignments 清單中的項目) |
|||||||
|---|---|---|---|---|---|---|---|
field_name |
欄位的使用者定義名稱。在運算式中使用點表示法 (aggregator_name.field_name) 時,這個名稱會識別物件中的特定值。 |
||||||
aggregation |
這個物件會定義系統如何計算欄位值,並包含下列欄位:
|
||||||
示例:Aggregator
以本範例來說,請計算每分鐘報表之間的統計資料。這個匯總器會由 OnNewSpeed 觸發,計算平均速度 (avg)、讀取次數 (count),並儲存最後 5 個速度值 (vector)。將 reset_on_get 設為 true。這樣一來,每次 MinuteReport 讀取統計資料時,系統都會重設統計資料,並為匯總器啟動下一個分鐘的新收集時間區間:
{ "name": "SpeedAggregator", "trigger_names": ["OnNewSpeed"], // Update aggregation on new speed data "reset_on_get": true, // Reset stats after they are read by the report configuration "message_builder": { "field_assignments": [ { "field_name": "average_speed", "aggregation": { "@type": "avg", "expression": "SpeedSource.speed" } }, { "field_name": "speed_reading_count", "aggregation": { "@type": "count" // Counts triggers (that is, processed speed readings) since last reset } }, { "field_name": "speed_history_last5", "aggregation": { "@type": "vector", "expression": "SpeedSource.speed", "max_length": 5 // Keep last 5 readings } } ] } }
建立輸出內容
如要定義遙測活動的最終輸出內容,請將物件新增至 report_configs 陣列 (概念)。這些設定會決定處理後的資料封裝方式和產生時間。您可以在一個指標設定中定義多個報表設定,以便重複使用元件。
您可以使用 trigger_names 欄位控管報表產生作業。此外,您可以使用 report_initial 在設定啟用時立即產生報表,並使用 report_incomplete 在資料收集作業中斷時產生最終報表。
注意:如要將處理作業連結至輸出內容,請使用 none 匯總類型 (@type: "none") 從匯總工具讀取預先計算的值。由於報表通常是無狀態快照,這會將複雜的有狀態邏輯保留在匯總工具中,並保留報表格式。
報表設定物件的欄位 (report_configs 清單中的項目) |
|
|---|---|
name |
報表的專屬名稱。這個名稱會顯示在產生的報表的中繼資料中。 |
trigger_names |
觸發條件名稱陣列,會導致系統產生及發布報表。 |
message_builder |
詳情請參閱訊息建構工具。 這會定義報表的內容。只有在觸發報表時,系統才會評估匯總。舉例來說,向量匯總會為每份報表新增一個值,而計數匯總則會反映報表編號。 |
選用report_incomplete(預設值:`false`) |
布林值。如果為 `true`,系統會在關機或資料收集結束時產生最終報告,即使資料遺失也一樣。 |
選用report_initial(預設值:`false`) |
布林值。如果為 `true`,系統會在指標設定啟用時立即產生報表。 |
範例:報表設定
最後,請為範例定義報表設定。這項功能是由 EveryMinute 觸發。它會使用 none 匯總,從 SpeedAggregator 讀取計算出的平均速度和讀取次數,並將預先匯總的值傳遞至報表:
{ "name": "MinuteReport", "trigger_names": ["EveryMinute"], // Generate report every minute "message_builder": { "field_assignments": [ { "field_name": "average_speed", "aggregation": { "@type": "none", // Read the value directly from the aggregator "expression": "SpeedAggregator.average_speed" } }, { "field_name": "reading_count", "aggregation": { "@type": "none", "expression": "SpeedAggregator.speed_reading_count" } } ] } }
頂層欄位
除了 data_sources、aggregators、triggers 和 report_configs 陣列,指標設定的說明也需要參照信號目錄。您也可以加入選用欄位,指派特定 UUID 並管理收集生命週期。
設定 UUID
每個 MetricsConfig 都需要通用專屬 ID (UUID)。如果您提供 existing_uuid,MCG 會使用該 ID。否則,MCG 會建立隨機 ID。為確保部署作業和工具的一致性,請指定 existing_uuid。
字串必須是有效的連字號 UUID,且只能包含小寫英文字母。
"existing_uuid": "a1a2a3a4-b1b2-c1c2-d1d2-d3d4d5d6d7d8",
信號定義
如要驗證訊號名稱和類型,MCG 必須存取車輛訊號目錄。這是包含 VSIDL .proto 定義的 protobuf FileDescriptorSet (已封裝並上傳至 MCG)。如要進一步瞭解如何建立及上傳目錄,請參閱「車輛訊號目錄」。
在 JSON 物件的 vs_version 欄位中指定目錄版本:
"vs_version": "v1.0",
定義生命週期觸發條件
在遙測活動中,MetricsConfig的生命週期會決定實際記錄資料的時間。廣告活動管理系統在裝置上部署及啟用設定時,您可以使用生命週期觸發條件,精確控管在該部署作業中何時收集資料。
這樣一來,您就能根據車輛使用模式 (例如「行程」IgnitionOn到 IgnitionOff 或「充電工作階段」) 調整資料收集作業,不必停用設定。
工作階段控制項 (開始/暫停):使用
start_trigger_name和stop_trigger_name控制資料收集時間。舉例來說,如要只在車輛行駛時收集資料,請使用IgnitionOn做為開始觸發條件,並使用IgnitionOff做為停止觸發條件。設定在裝置上仍處於啟用狀態,但觸發停止觸發條件時,設定會有效「暫停」(停止收集及處理),只有在再次觸發開始觸發條件時才會繼續。重要事項:這項操作只會暫停收集資料,不會定義邏輯時間視窗、區隔資料集,也不會產生任何其他副作用。暫停或繼續收集資料時,系統不會重設匯總器值。
單次偵測 (完成):如果設定只應執行一次 (例如偵測特定故障代碼的首次發生情況),然後在該裝置上永久停用自身,即使廣告活動在技術上仍處於有效狀態,也請使用
deactivate_trigger_name。
如果您未指定任何生命週期觸發條件,廣告活動啟用後,系統會立即開始收集資料,並持續收集資料,直到廣告活動結束為止。
| 頂層生命週期欄位 (根物件) | |
|---|---|
選填start_trigger_name |
啟動收集作業的觸發條件名稱。可設定,但不必使用 stop_trigger_name。 |
選填stop_trigger_name |
暫停收集作業的觸發條件名稱 (例如車輛靜止時)。如要設定,也必須設定 start_trigger_name。 |
選填deactivate_trigger_name |
觸發條件的名稱,會完全完成並停用 `MetricsConfig`。 |
進階:自訂通訊協定定義
在兩種主要情況下,MCG 無法單靠 vs_version 瞭解指標設定說明中的所有訊息類型:
- 類型推論失敗:如
source_identifier格式所述,當source_identifier使用 FQIN 或自訂名稱時,MCG 無法推論類型。 - 自訂訊息:指標設定說明使用的 protobuf 訊息,在
vs_version中指定的 VSIDL 目錄中找不到。在自訂報表格式的message_builder中設定message_type時,就會發生這種情況。
在這種情況下,請使用 data_source_message_types 協助 MCG 推斷型別,並使用 descriptor_protos 提供訊息定義。
data_source_message_types
將 source_identifier 字串對應至完整名稱的 protobuf 訊息型別。data_source_message_types 中的鍵必須與 data_sources 項目中的 source_identifier 值相符:
"data_source_message_types": {
"MyCustomSpeedService": "com.sdv.example.SampleMessage"
}
descriptor_protos
針對 data_source_message_types 或 message_builder 中使用的任何訊息類型提供定義,這些訊息類型不得位於已設定的 vs_version 中。
在 descriptor_protos 陣列中傳遞經過 Base64 編碼的 descriptorpb.FileDescriptorSet。使用 Protobuf 編譯器 protoc 從 .proto 檔案產生這個檔案。
"descriptor_protos": [
"Cu8BCiZtY2cvdGVzdGRhdGEvbWF4YXZnY3..." // Base64 string
]
範例:完成設定說明
前幾節定義了範例的所有元件:每分鐘產生一份報告,內容為該分鐘內觀察到的平均車速。
這些元件包括:
- 資料來源 (
SpeedSource),可每秒取得一次速度資料。 - 資料觸發條件 (
OnNewSpeed):在SpeedSource傳送資料時觸發。 - 每 60 秒觸發一次的週期性觸發條件 (
EveryMinute)。 - 匯總器 (
SpeedAggregator):使用OnNewSpeed計算平均速度、讀取次數,並儲存最近的值,讀取時會重設。 - 報表設定 (
MinuteReport),使用EveryMinute觸發包含SpeedAggregator平均速度和計數的報表。 - 頂層欄位 (
existing_uuid、vs_version) 可識別指標設定,並指定要用於信號定義的 VSIDL 目錄。
這些部分加總起來,就是指標設定的完整說明:
{ "existing_uuid": "a1a2a3a4-b1b2-c1c2-d1d2-d3d4d5d6d7d8", // Unique identifier for the configuration "vs_version": "example_version", // Version of the VSIDL catalog to use "data_sources": [ { "name": "SpeedSource", "source_identifier": "mcg.test.subpkg.speed_msg", "connection_type": "SUBSCRIPTION", "sub_sampling_interval_ms": 1000 } ], "aggregators": [ { "name": "SpeedAggregator", "trigger_names": ["OnNewSpeed"], "reset_on_get": true, "message_builder": { "field_assignments": [ { "field_name": "average_speed", "aggregation": { "@type": "avg", "expression": "SpeedSource.speed" } }, { "field_name": "speed_reading_count", "aggregation": { "@type": "count" } }, { "field_name": "speed_history_last5", "aggregation": { "@type": "vector", "expression": "SpeedSource.speed", "max_length": 5 } } ] } } ], "triggers": [ { "name": "OnNewSpeed", "data": { "source_name": "SpeedSource" } }, { "name": "EveryMinute", "periodic": { "period_ms": 60000 } } ], "report_configs": [ { "name": "MinuteReport", "trigger_names": ["EveryMinute"], "message_builder": { "field_assignments": [ { "field_name": "average_speed", "aggregation": { "@type": "none", "expression": "SpeedAggregator.average_speed" } }, { "field_name": "reading_count", "aggregation": { "@type": "none", "expression": "SpeedAggregator.speed_reading_count" } } ] } } ] }
參考範本
如需 API 定義,請參閱 MCG API 參考資料。
以下各節提供指標設定說明的完整參考資料,可做為您建立指標設定說明的指南。
頂層欄位
{
"existing_uuid": "00000000-0000-0000-0000-000000000000", // Optional
"vs_version": "example_version", // Optional
"descriptor_protos": ["..."], // Optional. Base64 encoded FileDescriptorSet
"data_source_message_types": {
"ExampleServiceName": "com.example.ProtoMessage"
}, // Optional
"start_trigger_name": "DataTriggerExample", // Optional
"stop_trigger_name": "ConditionalTriggerExample", // Optional
"deactivate_trigger_name": "PeriodicTriggerExample" // Optional
}
輸入:資料來源和匯總器
{
"data_sources": [
{
"name": "SubscriptionExample",
"source_identifier": "com.example.sdv.ExampleMessage|example-unit",
"connection_type": "SUBSCRIPTION", // Options: SUBSCRIPTION (default), ON_DEMAND
"sub_sampling_interval_ms": 100, // Optional
"fetch_last_message": false // Optional. Default: false
},
{
"name": "RegistryExample",
// Configurable Publisher Registry-based publisher (matches data_source_message_types)
"source_identifier": "ExampleServiceName",
"connection_type": "SUBSCRIPTION"
},
{
"name": "GetterExample",
"source_identifier": "com.example.sdv.ExampleConfig|example-unit",
"connection_type": "ON_DEMAND",
"configuration": {
"type_url": "type.googleapis.com/example.Config",
"value_json": {} // Or value_textproto, value (base64)
}
}
],
"aggregators": [
{
"name": "AggregatorExample",
"trigger_names": ["DataTriggerExample"],
"reset_on_get": false, // Optional. Default: false. If true, resets state after it's read
"message_builder": {
"message_type": "com.example.AggregatedMessage", // Optional
"field_assignments": [
{
"field_name": "avg_example",
"aggregation": {
// Options: avg, count, min, max, sum, stddev, delta, vector, none
"@type": "avg",
"expression": "SubscriptionExample.value"
}
},
{
"field_name": "count_example",
"aggregation": {
"@type": "count" // Counts number of evaluations. No expression needed
}
},
{
"field_name": "vector_example",
"aggregation": {
"@type": "vector",
"expression": "SubscriptionExample.value",
"max_length": 10 // Optional. If set, creates a ring buffer
}
}
]
}
}
]
}
邏輯和處理程序:觸發條件
{
"triggers": [
{
"name": "PeriodicTriggerExample",
"periodic": { "period_ms": 1000 }
},
{
"name": "DataTriggerExample",
"data": { "source_name": "SubscriptionExample" }
},
{
"name": "ConditionalTriggerExample",
"conditional": {
"triggers": ["PeriodicTriggerExample"],
"expression": "SubscriptionExample.value > 0",
"condition_type": {
// Options: is_true, is_false, rising_edge, falling_edge, all_changes
"rising_edge": {
"rising_options": { "min_duration_ms": 0, "require_exact": false }
}
}
}
}
]
}
輸出內容:報表設定
{
"report_configs": [
{
"name": "ReportExample",
"trigger_names": ["PeriodicTriggerExample"],
"report_incomplete": false, // Optional. Default: false
"report_initial": false, // Optional. Default: false
"message_builder": {
"message_type": "com.example.ReportMessage", // Optional. Must be defined in VSIDL catalog or descriptor_protos. Message type will be inferred if not provided
"field_assignments": [
{
"field_name": "avg_example",
"aggregation": {
"@type": "none", // Passthrough since aggregation is done in AggregatorExample
"expression": "AggregatorExample.avg_example"
}
}
]
}
}
]
}
運算式語法
| 類別 | 語法 | 說明 |
|---|---|---|
| 資料存取權 | source_namesource_name.fieldsource_name.field.subfield |
從資料來源或匯總工具存取完整訊息 存取訊息中的特定欄位 (包括巢狀欄位) |
| 算術 | +,-,*,/,%,** |
標準數學運算。** 是指數運算。 |
| 邏輯 | &&、||、!、^ |
AND、OR、NOT、XOR。 |
| 關聯 | ==,!=,<,<=,>,>= |
== 和 != 適用於所有類型,其他類型則需要數字。 |
| 清單 | contains(list, item)doesnotcontain(list, item)alleq(list, value) |
適用於向量 (陣列)。如果 list 中的所有項目都等於 value,alleq(list, value) 會傳回 true。 |
| 函式 | timestamp(clock_type) |
目前的奈秒時間。clock_type:REALTIME_CLOCK 或 MONOTONIC_TIME_SINCE_BOOT_OR_RESUME |
abs(n) |
絕對值 | |
floor(n)、round(n)、ceil(n) |
Rounding 函式 | |
| 作業順序 | () |
優先順序的標準分組 |