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

Azure App Insights日志:externaldata实现进程映射查询问题

Azure App Insights 进程与租户映射查询解决方案

一、Blob映射文件格式要求

先把映射JSON改成每行一个对象的格式(适配externaldata的multijson读取方式),示例:

{"testline": "Services.City.MyService.exe", "targetApp": "租户A-城市服务"}
{"testline": "Services.Store.MyService.exe", "targetApp": "租户B-商城服务"}

如果原文件是数组格式,直接转成这种行分隔格式即可,避免后续处理数组的麻烦。

二、创建带参数的查询函数

直接创建Kusto函数,读取Blob映射并匹配输入的进程路径,解决之前的行上下文报错问题:

.create-or-alter function with (folder = "Custom Functions") GetTargetApp(processPath:string)
{
    externaldata(testline:string, targetApp:string)
    [
        h@"https://<你的存储账户>.blob.core.windows.net/<容器名>/<映射文件名>.json"
        with (format = "multijson")
    ]
    | where testline == extract_filename(processPath)
    | project targetApp
}
  • extract_filename(processPath):自动从完整路径里提取最后的.exe文件名,和映射里的testline对应
  • 替换<你的存储账户>等占位符为实际Blob地址,确保查询拥有该Blob的读取权限

三、在日志查询中调用函数

关联自定义指标数据的示例查询:

customMetrics
| where name == "Process CPU Usage"  // 替换成你要查询的性能计数器名称
| extend processPath = tostring(customDimensions["ProcessName"])
| invoke GetTargetApp(processPath)
| where isnotempty(targetApp)  // 过滤未匹配到的记录
| summarize avg(value) by targetApp, bin(timestamp, 1h)
| order by timestamp desc

四、报错原因与解决要点

之前的"row-context scope"错误,是因为在externaldata的定义里直接引用了外部行变量。正确逻辑是:

  1. 函数接收输入参数processPath
  2. 先完整读取Blob里的映射数据集
  3. 再用where子句把输入参数和数据集做匹配,完全避开行上下文的冲突

五、实用优化

  • 大小写兼容:如果进程名可能存在大小写差异,把匹配逻辑改成tolower(testline) == tolower(extract_filename(processPath))
  • 默认值处理:未匹配到的记录可以返回默认值,在函数里添加一行:
    | project targetApp = coalesce(take_any(targetApp), "未知服务")
    
  • 动态路径:如果映射文件路径需要灵活调整,可以把路径设为函数参数,但要确保权限配置到位

内容的提问来源于stack exchange,提问作者Dave061

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 05:33:26