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

Azure Application Insights自定义维度嵌套对象显示[object Object]如何解决

问题根因

这个问题确实出在SDK的序列化逻辑上:
OpenCensus的Azure日志导出器处理custom_dimensions时,默认只支持第一层的字符串类型键值对,不会自动递归序列化嵌套对象。你直接传入嵌套字典时,SDK会对嵌套对象做默认字符串转换,最终落到Application Insights里的字段值就变成了固定的[object Object]——这个值根本不是合法JSON结构,你后续用todynamic()之类的KQL函数自然解析不出内容,不是KQL写法的问题。

修复方案

上报端代码调整(根治,新数据可正常解析)

上报前手动把嵌套对象序列化为JSON字符串再传入自定义维度即可,顺便补上你原代码里字典缺的逗号,修改后可直接运行:

import logging
import json
from opencensus.ext.azure.log_exporter import AzureLogHandler

logger = logging.getLogger(__name__)
# 替换为你实际的检测密钥连接字符串
logger.addHandler(AzureLogHandler(
    connection_string='InstrumentationKey=00000000-0000-0000-0000-000000000000')
)

counts_dict = {
  'special_chars':'6',
  'storage_acc_name':'subrodecadlsdev',
  # 嵌套对象手动做JSON序列化
  'top_10_line_width': json.dumps({
       'LW_101':45,
       'LW_229':78,
       'LW_77':67
    })
}

properties = {'custom_dimensions': counts_dict}  
logger.warning('action', extra=properties)

代码修复后新上报的日志,你原来的KQL逻辑就能正常工作:

extend tp = todynamic(customDimensions['top_10_line_width'])

如果要提取嵌套结构里的具体字段,比如LW_101的数值,可以直接取动态对象的属性:

extend LW_101 = todynamic(customDimensions['top_10_line_width']).LW_101

你需要的message字段是SDK默认上报的日志正文,不需要额外解析,查询时直接引用即可。

历史数据说明

修复前已经上报、top_10_line_width值为[object Object]的历史日志,因为落盘时已经丢失了嵌套结构的全部信息,没有办法通过KQL反向还原内部的键值对,只能统计该字段的存在情况,无法提取具体数值做仪表板展示。

额外提示

所有传入custom_dimensions的非字符串值(包括数字、布尔值、列表、嵌套字典),都建议提前手动转成对应格式的字符串,避免SDK自动转换导致的数据格式异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 01:15:39