如何使用KQL解析Azure日志分析工作区中函数应用日志的字符串列?
KQL处理函数应用日志字符串格式问题解决方案
问题背景
- 处理Azure日志分析工作区的函数应用日志时,某列值格式为
["[{\"ServiceNamd\":\"user-service\",\""](该值由split方法从另一列获取) - 需求:将该列值格式化为
Service Name:user-service - 当前使用的KQL语句未达到预期效果:
FunctionAppLogs | Where Function Name contains "HealthCheckApI" | extend ServiceName = trim(@'[[\"\\"\"]+', Mesage)
可行解决方案
方案1:JSON解析法(推荐,适合结构化数据)
由于目标字符串是嵌套的JSON片段,直接用trim无法精准提取内容,先清理外层冗余符号后解析JSON,再拼接目标格式:
FunctionAppLogs | where FunctionName contains "HealthCheckApI" // 修正原语句的拼写错误:Function Name → FunctionName,Mesage → Message | extend CleanedStr = replace_string(replace_string(Message, '[', ''), ']', '') // 去除外层的[] | extend ParsedJson = parse_json(CleanedStr) | extend ServiceName = strcat("Service Name:", ParsedJson.ServiceNamd) // 注意原字段名是ServiceNamd(含拼写错误) | project FunctionName, ServiceName, Message // 根据需求保留所需列
方案2:正则提取法(适合格式固定的非标准字符串)
如果JSON解析不稳定,可直接用正则表达式提取目标值:
FunctionAppLogs | where FunctionName contains "HealthCheckApI" | extend ServiceName = strcat("Service Name:", extract(@'"ServiceNamd":"([^"]+)"', 1, Message)) | project FunctionName, ServiceName, Message
关键注意事项
- 原语句存在两处拼写错误:
Function Name应为Azure日志表的标准列名FunctionName,Mesage应为Message,这些错误会导致查询执行失败 - 原字段名是
ServiceNamd(多了一个字母d),如果是笔误,需替换为正确的ServiceName才能匹配到目标值
内容的提问来源于stack exchange,提问作者Vaishnavi Vaishu
相关产品推荐
相关产品推荐

