如何排查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
相关产品推荐
相关产品推荐

