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

如何排查Application Insights遥测问题?本地日志或抛异常方案

排查Application Insights遥测停止上报问题的方案

一、配置Application Insights客户端生成本地日志与增强 Verbosity

要定位问题,首先得让AI客户端输出内部运行细节,同时强制暴露异常:

  • 启用AI客户端内部日志:在appsettings.json中添加以下配置,把AI相关日志级别拉满,让Serilog捕获这些细节:

    {
      "ApplicationInsights": {
        "InstrumentationKey": "你的密钥",
        "Logging": {
          "LogLevel": {
            "Default": "Trace",
            "Microsoft.ApplicationInsights": "Trace"
          }
        }
      },
      "Serilog": {
        "MinimumLevel": {
          "Override": {
            "Microsoft.ApplicationInsights": "Trace"
          }
        }
      }
    }
    

    这样AI客户端的连接状态、发送重试、序列化失败等细节都会被记录到本地日志里。

  • 强制AI客户端抛出异常:默认AI会吞掉大部分异常,避免影响业务。可以在初始化TelemetryClient时开启异常抛出,直接暴露上报失败的问题:

    var telemetryConfig = TelemetryConfiguration.CreateDefault();
    telemetryConfig.InstrumentationKey = "你的密钥";
    // 上报失败时直接抛出异常,不再静默处理
    telemetryConfig.TelemetryChannel.OnSendFailed += (sender, e) =>
    {
        throw new Exception("Application Insights遥测发送失败", e.Exception);
    };
    var telemetryClient = new TelemetryClient(telemetryConfig);
    

二、本地Docker容器中的排查操作

既然能在Docker里复现问题,重点抓容器内的日志和运行状态:

  • 实时监控容器日志:执行docker logs -f <容器ID>,实时查看Serilog输出的AI日志,重点盯这些关键词:

    • Send:遥测发送的请求状态
    • Retry:是否触发重试逻辑
    • Failed:发送失败的具体原因
    • Connection:连接相关的错误提示
  • 进入容器做基础检查:用docker exec -it <容器ID> bash(Linux容器)进入容器内部:

    • 测试网络连通性:执行curl https://dc.services.visualstudio.com/v2/track,确认容器能正常访问AI的上报端点,排除网络/防火墙限制
    • 查看本地日志文件:如果Serilog输出到文件,直接打开文件过滤AI相关条目,找异常线索
  • 调整容器资源配额:有时候容器内存/CPU不足会导致AI上报线程被阻塞,尝试调高容器的资源限制,看问题是否缓解。

三、调试器中的排查操作

不管是本地调试还是远程调试Docker容器,都可以做这些操作:

  • 跟踪TelemetryClient的发送流程:

    • 在telemetryClient.Track*方法、StartOperation的using块Dispose处设断点,确认每次遥测是否被正常提交
    • 检查TelemetryClient.Context的配置,确认InstrumentationKey、会话ID等关键参数是否正确
    • 查看TelemetryClient.TelemetryChannel的状态:比如InMemoryChannel的QueueLength,如果队列持续增长,说明发送线程被阻塞或发送失败
  • 捕获AI客户端的内部异常:

    • 在TelemetryChannel.OnSendFailed事件上设断点,一旦触发就能直接拿到发送失败的异常详情
    • 开启Visual Studio的“异常设置”,勾选“Common Language Runtime Exceptions”,即使异常被吞掉,调试器也会在抛出时中断
  • 定位RabbitMQ消息头的影响:

    • 复现问题时,捕获当前处理的RabbitMQ消息头,逐个移除或修改,找到触发问题的特定消息头
    • 检查消息头是否包含特殊字符、超长内容,这类内容可能导致AI遥测序列化失败(比如污染了RequestTelemetry的属性)

四、其他排查思路

  • 检查采样配置:确认是否开启了遥测采样,且采样规则是否在特定条件下过滤了所有数据。可以临时关闭采样("Sampling": { "Enabled": false })验证。
  • 查看Azure Portal的AI状态:在Application Insights的“使用情况和预估成本”里检查是否配额超限,或者在“日志”中搜索traces、exceptions,看是否有延迟上报的情况。
  • 替换TelemetryChannel:默认的ServerTelemetryChannel在网络不稳定时可能出问题,尝试换成InMemoryChannel或FileChannel(本地缓存遥测),判断是通道本身的问题还是业务逻辑导致的上报中断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 20:42:58