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

因表存储并发异常导致的Application Insights依赖项失败问题

解决Application Insights中已处理409异常仍标记为失败的方法

方法1:手动修改依赖项跟踪状态

捕获到409异常并完成业务处理后,手动更新Application Insights的依赖项跟踪,将其标记为成功。同时可以添加自定义属性,方便后续区分已处理的预期异常和真正的失败。

以C#为例的代码示例:

try
{
    // 执行表存储更新操作
}
catch (StorageException ex) when (ex.RequestInformation.HttpStatusCode == 409)
{
    // 处理409异常的业务逻辑(比如重试、状态同步等)
    
    var telemetryClient = new TelemetryClient();
    var dependencyTelemetry = new DependencyTelemetry
    {
        Name = "TableStorage-UpdateOperation",
        Target = "你的表存储账户名",
        Data = "更新操作的具体参数",
        Duration = TimeSpan.FromMilliseconds(150),
        Success = true,
        ResultCode = "409"
    };
    // 添加自定义属性标记该异常已处理
    dependencyTelemetry.Properties.Add("HandledExceptionType", "409-PreConditionFailed");
    telemetryClient.TrackDependency(dependencyTelemetry);
    
    // 若SDK自动收集了失败的跟踪,可通过配置禁用该请求的自动收集,避免重复上报
}

方法2:用遥测处理器修改或过滤已处理的409依赖项

创建自定义的ITelemetryProcessor,在遥测数据发送到Application Insights之前,拦截并修改符合条件的依赖项状态:

  1. 实现自定义处理器:
public class Handled409DependencyProcessor : ITelemetryProcessor
{
    private readonly ITelemetryProcessor _nextProcessor;

    public Handled409DependencyProcessor(ITelemetryProcessor nextProcessor)
    {
        _nextProcessor = nextProcessor;
    }

    public void Process(ITelemetry item)
    {
        if (item is DependencyTelemetry dependency)
        {
            // 判断是否是表存储的409响应,且已被业务处理
            if (dependency.ResultCode == "409" && dependency.Properties.TryGetValue("Handled409Exception", out _))
            {
                dependency.Success = true;
            }
        }
        _nextProcessor.Process(item);
    }
}
  1. 在应用初始化时注册处理器:
var telemetryConfig = TelemetryConfiguration.CreateDefault();
telemetryConfig.TelemetryProcessorChainBuilder
    .Use(next => new Handled409DependencyProcessor(next))
    .Build();
var telemetryClient = new TelemetryClient(telemetryConfig);

方法3:调整自动收集的失败状态码规则

如果使用Azure存储SDK自动收集依赖项,可以通过配置移除409的失败判定。这种方式适合所有409异常都属于业务预期处理场景的情况:

在应用配置文件中添加:

"ApplicationInsights": {
  "Dependencies": {
    "Storage": {
      "FailedStatusCodes": [400, 401, 403, 500] // 移除409,将其排除在失败判定外
    }
  }
}

注意事项

  • 建议保留409异常的上下文信息(比如自定义属性标记),不要直接过滤掉跟踪数据,方便后续排查问题时区分预期异常和真实故障。
  • 异步操作场景下,要确保遥测跟踪的上下文正确传递,避免丢失业务处理的标记。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 01:24:29