本指南詳細說明指標設定產生器 (MCG) 工具 /api/v2/generate_metrics_config 端點的 JSON 要求格式。這種格式可讓您以人類可讀的結構定義遙測活動,指定資料收集、裝置端處理和報表產生。
MCG 工具會驗證這個 JSON 物件,檢查是否有類型不符、循環相依或未定義的參照等問題,然後將其編譯為 MetricsConfig 通訊協定緩衝區 (protobuf) 訊息。這個 MetricsConfig 訊息是裝置端遙測服務執行廣告活動時採用的二進位格式。
必要條件:您應熟悉 JSON 結構定義、protobuf 和基本資料結構。如需概念總覽,請參閱「指標設定概念」。
如何撰寫設定說明
如要設計指標收集廣告活動,請按照下列邏輯流程操作:
範例:平均速度報表
本指南將透過範例說明所有元件如何搭配運作。這項作業會建立報表,計算每分鐘的平均車速。它定義了用於收集速度資料的資料來源 (SpeedSource)、用於控制執行流程的觸發條件 (OnNewSpeed、EveryMinute)、用於計算平均值的匯總器 (SpeedAggregator),以及用於封裝結果的指標報告設定 (MinuteReport)。可展開部分中的範例會以這個情境為基礎。
指定資料來源
遙測功能支援從 SDV 服務 (透過 SDV 中介軟體) 和可設定的發布者註冊表型發布者收集資料。
SDV 服務 (以 pub/sub 為基礎):資料可從 VSIDL 中定義的 pub/sub 管道取得。
SDV 服務 (以 RPC 為基礎):如果服務公開
CreateSubscription或GetLatestMessageRPC,則可使用資料。可設定的發布商註冊資料庫型發布商:如果應用程式使用 Telemetry SDK 的
IConfigurablePublisherRegistryAndroid Binder 介面或可設定的發布商註冊資料庫自行註冊,即可取得資料。
如要在 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 才會從中推論 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 |
這個觸發條件監聽的 data_source 的 name。 |
範例:資料觸發條件
在範例中,每次 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 |
運算式的結果與先前的值不同時,就會觸發。如果設定邊緣選項,則僅支援數值和布林值。 可包含 |
Edge 選項
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 物件會定義輸出訊息結構,以及用於計算欄位的匯總邏輯。匯總工具和報表設定都會用到這個 ID。
message_builder 物件的欄位 (在匯總工具或報表中) |
|
|---|---|
message_type |
輸出內容的 protobuf 訊息類型完整名稱。如果省略,MCG 會根據 field_assignments 推論出的輸出類型,建立自訂訊息類型。只有在訊息建構工具是指標報表的一部分,且報表必須符合特定預先定義的 protobuf 訊息定義時,才應使用這個方法。 |
field_assignments |
欄位定義物件陣列。每個物件都會指定輸出訊息中的欄位,以及計算其值的邏輯。 |
欄位指派物件的欄位 (field_assignments 清單中的項目) |
|||||||
|---|---|---|---|---|---|---|---|
field_name |
使用者定義的欄位名稱。在運算式中使用點標記法 (aggregator_name.field_name) 時,它會識別物件中的特定值。 |
||||||
aggregation |
這個物件定義系統如何使用下列欄位計算欄位值:
|
||||||
範例:集結網站
以本例來說,請計算每分鐘報表之間的統計資料。這個匯總器由 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。為確保部署作業和工具之間的一致性,請指定 existing_uuid。
字串必須是有效的 UUID,且只能使用小寫英文字母和連字號。
"existing_uuid": "a1a2a3a4-b1b2-c1c2-d1d2-d3d4d5d6d7d8",
信號定義
為驗證信號名稱和類型,MCG 必須存取車輛信號目錄。這是 protobuf FileDescriptorSet,包含 VSIDL .proto 定義 (已封裝並上傳至 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`。 |
進階:自訂 proto 定義
在以下兩種主要情況下,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)。 - 使用
OnNewSpeed計算平均速度、讀數和儲存最近值的匯總工具 (SpeedAggregator),在讀取時重設。 - 報表設定 (
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": "1cbec8e6-46f5-4649-9fa2-09f81bc93f8b", // 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 函式 | |
| 運算順序 | () |
優先順序的標準分組 |