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

隔离进程Azure Functions自定义TelemetryProcessor无法捕获AppInsights异常

问题根因

异常遥测不进自定义处理器、不附加自定义维度的问题,是Azure Functions隔离(out-of-process)模式的特性+配置问题叠加导致的:

  1. 旧版本隔离模式函数运行时,未被业务代码捕获的异常默认由Azure Functions主机进程直接收集上报App Insights,完全不经过worker进程内的自定义遥测管道,所以自定义的Initializer和Processor无法处理这部分异常
  2. 当前使用的NuGet包版本过旧,缺少隔离模式下App Insights集成的必要组件和已知问题修复
  3. 服务注册顺序错误,同时缺少隔离模式专属的App Insights配置

可行解决步骤

1. 升级并补充必要NuGet包

首先安装隔离模式专属的App Insights集成包,同时升级核心包到兼容稳定版本:

<PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.20.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.ApplicationInsights" Version="1.2.0" />
<PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.21.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.16.2" OutputItemType="Analyzer" />

其余功能扩展包可同步升级到对应兼容版本。

2. 修正Program.cs的服务注册顺序和配置

调整服务注册顺序,同时添加隔离模式的App Insights启用配置:

public class Program
{
    public static Task Main(string[] args)
    {
        var host = new HostBuilder()
            .ConfigureFunctionsWorkerDefaults()
            // 启用隔离模式App Insights完整集成
            .ConfigureAppInsights()
            .ConfigureServices(services =>
            {
                var config = new ConfigurationBuilder()
                    .AddJsonFile("local.settings.json", true, true)
                    .AddEnvironmentVariables()
                    .Build()
                    .Get<FunctionsConfig>();
                // 先注册配置,再注册依赖配置的TelemetryInitializer
                services.AddSingleton<Config>(config);
                services.AddSingleton<ITelemetryInitializer, FunctionTelemetryInitializer>();
                services.AddApplicationInsightsTelemetryWorkerService();
                services.AddApplicationInsightsTelemetryProcessor<FunctionsTelemetryProcessor>();
            })
            .Build();

        return host.RunAsync();
    }
}

3. 修正host.json配置

移除采样配置中不必要的Exception排除,同时添加配置禁用主机层面的自动异常上报,让worker进程接管所有遥测的收集:

{
  "version": "2.0",
  "functionTimeout": "00:10:00",
  "logging": {
    "fileLoggingMode": "never",
    "logLevel": {
      "default": "Information",
      "Host.Results": "Warning",
      "Function": "Warning",
      "Host.Aggregator": "Warning"
    },
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "maxTelemetryItemsPerSecond" : 20,
        "excludedTypes": "Request;Dependency"
      },
      // 开启worker进程遥测收集能力,包含异常类型
      "enableWorkerTelemetry": true
    }
  },
  // 禁用主机层面的自动异常上报
  "functions": {
    "disableAutomaticHostExceptionLogging": true
  },
  "extensions": {
    "queues": {
      "maxPollingInterval": "00:00:02",
      "visibilityTimeout" : "00:05:00",
      "batchSize": 1,
      "maxDequeueCount": 3,
      "newBatchThreshold": 0
    }
  }
}

4. 可选兜底方案

如果以上配置完成后仍有特殊场景的异常漏处理,可以给所有函数添加统一的异常捕获中间件/过滤器,或者在函数代码外层套try-catch,捕获到异常后用ILogger.LogError手动上报,手动上报的异常100%会走worker进程的遥测管道,被自定义Initializer和Processor正常处理。

内容的提问来源于stack exchange,提问作者ded.diman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:15:03