Azure Monitor 中的转换允许你对输入的 Azure Monitor 数据运行 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"
}
]
现在,可以在 KQL 转换中分析和使用 AdditionalContext 列的内容了:
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
该 parse_cef_dictionary 函数将 CEF 消息的 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
该 geo_location 函数返回 IP 地址(支持 IPv4 和 IPv6)的大致地理位置,包括以下属性:
- 国家
- 区域
- 国家
- 城市
- 纬度
- 经度
| extend GeoLocation = geo_location("1.0.0.5")
重要
此函数调用外部 IP 地理位置服务,该服务可能会添加数据引入延迟。 请谨慎使用,每个转换不超过几次。
支持的语句
Let 语句
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-renamedatatable-
columnifexists(使用 columnifexists 而不是 column_ifexists)
支持的标量运算符
所有数值运算符都受支持。
所有的 Datetime 和 Timespan 算术运算符都受支持。
支持以下字符串运算符。
==!==~!~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 Monitor 代理创建数据收集规则以及与虚拟机的关联。