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

如何在.NET 7独立模式Azure函数中获取Application Insights TelemetryClient?

解决Azure函数自定义遥录无法正常工作的问题

先明确项目模型

最新Visual Studio创建的Azure函数默认采用Isolated Worker模型(.NET 6+,项目文件含<OutputType>Exe</OutputType>),若你用的是旧版In-Process模型(项目为Library类型),配置方式略有不同,以下分场景说明:


场景1:Isolated Worker模型(默认新模板)

  1. 安装必备NuGet包
    必须添加Microsoft.Azure.Functions.Worker.ApplicationInsights,这是DI解析TelemetryClient的核心依赖。

  2. 配置Program.cs
    在宿主构建时注册Application Insights服务:

    var host = new HostBuilder()
        .ConfigureFunctionsWorkerDefaults()
        .ConfigureServices(services =>
        {
            // 注册Application Insights工作者服务
            services.AddApplicationInsightsTelemetryWorkerService();
            // 可选:手动配置InstrumentationKey(优先读取环境变量,无需硬编码)
            // services.Configure<ApplicationInsightsServiceOptions>(options =>
            // {
            //     options.InstrumentationKey = Environment.GetEnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY");
            // });
        })
        .Build();
    
    host.Run();
    
  3. 注入并使用TelemetryClient
    此时DI可正常解析,直接在函数类构造函数中注入即可:

    public class CustomTelemetryFunction
    {
        private readonly TelemetryClient _telemetryClient;
    
        public CustomTelemetryFunction(TelemetryClient telemetryClient)
        {
            _telemetryClient = telemetryClient;
        }
    
        [Function("CustomTelemetryFunction")]
        public HttpResponseData Run([HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequestData req)
        {
            // 记录自定义事件
            _telemetryClient.TrackEvent("Function_Executed_Success", new Dictionary<string, string>
            {
                {"Request_Method", req.Method},
                {"Timestamp", DateTime.UtcNow.ToString("o")}
            });
    
            // 记录自定义指标
            _telemetryClient.TrackMetric("Processing_Duration", 45.2);
    
            var response = req.CreateResponse(HttpStatusCode.OK);
            response.WriteString("自定义遥录已发送");
            return response;
        }
    }
    

场景2:In-Process模型(旧模板)

  1. 安装NuGet包
    添加Microsoft.Azure.WebJobs.Logging.ApplicationInsights包。

  2. 添加Startup.cs配置
    若项目无Startup类,手动创建并注册服务:

    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.WebJobs.Hosting;
    using Microsoft.Extensions.DependencyInjection;
    
    [assembly: WebJobsStartup(typeof(FunctionApp.Startup))]
    namespace FunctionApp
    {
        public class Startup : IWebJobsStartup
        {
            public void Configure(IWebJobsBuilder builder)
            {
                builder.Services.AddApplicationInsightsTelemetry();
            }
        }
    }
    
  3. 注入TelemetryClient
    直接在函数构造函数中注入使用:

    public class InProcessFunction
    {
        private readonly TelemetryClient _telemetryClient;
    
        public InProcessFunction(TelemetryClient telemetryClient)
        {
            _telemetryClient = telemetryClient;
        }
    
        [FunctionName("InProcessFunction")]
        public async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequest req,
            ILogger log)
        {
            _telemetryClient.TrackEvent("InProcess_Function_Run");
            return new OkObjectResult("遥录已记录");
        }
    }
    

常见问题排查

  • DI无法解析:核心是缺少对应NuGet包或未在启动类中注册Application Insights服务,按上述步骤补全即可。
  • 手动创建TelemetryClient无效果:手动实例化时需确保TelemetryConfiguration正确加载InstrumentationKey,而DI注入的客户端已自动完成配置,无需手动处理。
  • 本地测试无数据:检查local.settings.json中是否配置了APPINSIGHTS_INSTRUMENTATIONKEY,遥录数据存在延迟,需等待1-5分钟后在Application Insights门户查看。

内容的提问来源于stack exchange,提问作者Mathias Rönnlund

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 06:10:14