You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 22:16:27