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
geo_location
假設有包含IP位址的字串 (支援IPv4和IPv6),geo_location 函式會傳回大約地理位置,包括下列屬性:
- 國家
- 區域
- 國家
- 城市
- 緯度
- 緯度
| extend GeoLocation = geo_location("1.0.0.5")
這很重要
由於此函式所使用的 IP 地理位置服務本質,如果過度使用,可能會造成資料擷取延遲。 在每個轉換使用此函式時,請謹慎使用多次。
支援的陳述式
設定陳述式
的右側 let 可以是純量表示式、表格式表達式或使用者定義函數。 僅支援具有純量引數的使用者定義函式。
表格表達式陳述
轉換中 KQL 語句唯一支援的數據來源如下:
source,表示源數據。 例如:
source | where ActivityId == "383112e4-a7a8-4b94-a701-4266dfc18e41" | project PreciseTimeStamp, Messageprint運算子,一律會產生單一數據列。 例如:print x = 2 + 2, y = 5 | extend z = exp2(x) + exp2(y)
支援的表格式運算元
extendprojectprintwhereparseproject-awayproject-renamedatatablecolumnifexists(使用 columnifexists 而不是 column_ifexists)
支援的純量運算子
支援所有 數值運算子 。
支援所有 Datetime 和 Timespan 算術運算符 。
支援下列 String 運算符 。
- `=
!==~!~contains!containscontains_cs!contains_cshas!hashas_cs!has_csstartswith!startswithstartswith_cs!startswith_csendswith!endswithendswith_cs!endswith_csmatches regexin!in
支援下列位元運算子。
binary_and()binary_or()binary_xor()binary_not()binary_shift_left()binary_shift_right()
純量函數
位元函式
轉換函數
DateTime 和 TimeSpan 函式
動態和陣列函式
數學函式
條件式函式
字串函數
base64_encodestring(使用base64_encodestring而不是base64_encode_tostring)base64_decodestring(使用base64_decodestring而不是base64_decode_tostring)countofextractextract_allindexofisemptyisnotemptyparse_jsonsplitstrcatstrcat_delimstrlensubstringtolowertoupperhash_sha256
類型函式
識別碼引號
視需要使用識別碼引號。
後續步驟
- 使用 Azure 監視器代理程式,建立數據收集規則,並從虛擬機器與其建立關聯。

