共用方式為


Azure 監視器轉換中支援的 KQL 功能

Azure 監視器中的轉換 可讓您對傳入的 Azure 監視器數據執行 KQL 查詢,以在將資料儲存在 Log Analytics 工作區之前篩選或修改傳入數據。 本文詳述除了只能在轉換中使用的特殊運算元之外,轉換查詢中的 KQL 考慮和支援的功能。

由於轉換會個別套用至每個記錄,因此無法使用任何在多個記錄上作用的 KQL 運算符。 僅支援接受單一資料列作為輸入並傳回不超過一個資料列的運算子。 例如,由於summarize會彙總多個記錄,因此不支援該功能。

轉換僅支援本文所列的運算符。 轉換中不支援任何其他可用於其他記錄查詢的運算符。

特殊考慮

剖析命令

基於效能考慮,轉換中的 剖析 命令限制為每個語句 10 個欄位。 如果您的轉換需要剖析超過10個欄,請按照分解大型剖析命令中的描述,將其拆分成多個語句。

處理動態資料

考慮使用動態資料的下列輸入:

{
    "TimeGenerated" : "2021-11-07T09:13:06.570354Z",
    "Message": "Houston, we have a problem",
    "AdditionalContext": {
        "Level": 2,
        "DeviceID": "apollo13"
    }
}

若要存取 AdditionalContext 中的屬性,請將它定義為輸入數據流中的動態類型資料行:

"columns": [
    {
        "name": "TimeGenerated",
        "type": "datetime"
    },
    {
        "name": "Message",
        "type": "string"
    }, 
    {
        "name": "AdditionalContext",
        "type": "dynamic"
    }
]

AdditionalContext 資料行的內容現在可以在 KQL 轉換中剖析及使用:

source
| extend parsedAdditionalContext = parse_json(AdditionalContext)
| extend Level = toint (parsedAdditionalContext.Level)
| extend DeviceId = tostring(parsedAdditionalContext.DeviceID)

動態常值

使用函 parse_json 來處理 動態常值

例如,下列查詢提供相同功能:

print d=dynamic({"a":123, "b":"hello", "c":[1,2,3], "d":{}})
print d=parse_json('{"a":123, "b":"hello", "c":[1,2,3], "d":{}}')

特殊功能

下列函式僅適用於轉換。 它們不能用於其他記錄查詢。

parse_cef_dictionary

假設字串包含 CEF 訊息,parse_cef_dictionary 會將訊息的 Extension 屬性剖析為動態索引鍵/值物件。 分號是保留字元,應該在將原始訊息傳遞至方法之前加以取代,如範例所示。

| extend cefMessage=iff(cefMessage contains_cs ";", replace(";", " ", cefMessage), cefMessage) 
| extend parsedCefDictionaryMessage =parse_cef_dictionary(cefMessage) 
| extend parsecefDictionaryExtension = parsedCefDictionaryMessage["Extension"]
| project TimeGenerated, cefMessage, parsecefDictionaryExtension

parse_cef_dictionary函式的範例輸出。

geo_location

假設有包含IP位址的字串 (支援IPv4和IPv6),geo_location 函式會傳回大約地理位置,包括下列屬性:

  • 國家
  • 區域
  • 國家
  • 城市
  • 緯度
  • 緯度
| extend GeoLocation = geo_location("1.0.0.5")

geo_location函式範例輸出的螢幕快照。

這很重要

由於此函式所使用的 IP 地理位置服務本質,如果過度使用,可能會造成資料擷取延遲。 在每個轉換使用此函式時,請謹慎使用多次。

支援的陳述式

設定陳述式

的右側 let 可以是純量表示式、表格式表達式或使用者定義函數。 僅支援具有純量引數的使用者定義函式。

表格表達式陳述

轉換中 KQL 語句唯一支援的數據來源如下:

  • source,表示源數據。 例如:

    source
    | where ActivityId == "383112e4-a7a8-4b94-a701-4266dfc18e41"
    | project PreciseTimeStamp, Message
    
  • print 運算子,一律會產生單一數據列。 例如:

    print x = 2 + 2, y = 5 | extend z = exp2(x) + exp2(y)
    

支援的表格式運算元

支援的純量運算子

  • 支援所有 數值運算子

  • 支援所有 Datetime 和 Timespan 算術運算符

  • 支援下列 String 運算符

    • `=
    • !=
    • =~
    • !~
    • contains
    • !contains
    • contains_cs
    • !contains_cs
    • has
    • !has
    • has_cs
    • !has_cs
    • startswith
    • !startswith
    • startswith_cs
    • !startswith_cs
    • endswith
    • !endswith
    • endswith_cs
    • !endswith_cs
    • matches regex
    • in
    • !in
  • 支援下列位元運算子

    • binary_and()
    • binary_or()
    • binary_xor()
    • binary_not()
    • binary_shift_left()
    • binary_shift_right()

純量函數

識別碼引號

視需要使用識別碼引號

後續步驟

  • 使用 Azure 監視器代理程式,建立數據收集規則,並從虛擬機器與其建立關聯。