首页 > 解决方案 > 是否可以在运行时在 Azure 函数中设置 AppInsights 检测密钥

问题描述

通常,AppInsights 的检测密钥IConfiguration在名为APPINSIGHTS_INSTRUMENTATIONKEY. 这可能会出现在您的 appsettings.json 文件、环境变量或其他任何IConfigurationBuilder支持的文件中。但是,如果想在运行时设置检测密钥怎么办。这是我期望应该起作用的:

public override void Configure(IFunctionsHostBuilder builder)
{
    // Test code
    builder.Services.AddApplicationInsightsTelemetry(new ApplicationInsightsServiceOptions
    {
        InstrumentationKey = "461df8ba-af74-444b-a896-f47c5c6dd02d",
        DeveloperMode = true
    });

    // ... Various configuration stuff
}

当我这样做时,我可以验证 aTelemetryClient是否被注入到我的函数类的构造函数中,并且我可以验证是否设置了正确的检测密钥:

在此处输入图像描述

这些遥测项目甚至显示在本地调试器窗口中,所以我知道客户端正在处理它们:

在此处输入图像描述

但是,我等了又等,但它们从未真正出现在 AppInsights 中。当我将相同的检测密钥放入本地设置 JSON 中时,一切正常。

有没有人有一个很好的例子来展示如何在运行时设置 AppInsights 键而不是使用IConfiguration. 谢谢!

更新:

翻阅一些Microsoft 文档,看起来调用AddApplicationInsightsTelemetry会与开箱即用的 AppInsights 服务发生冲突:

在此处输入图像描述

所以,我可能运气不好。不过,我会暂时保留这个问题,以防有人有解决办法。顺便说一句,我问的原因是我的团队正在构建一个框架来以一致的方式配置所有微服务。我们的一些微服务使用 Azure Functions,所以如果标准配置调用不起作用,我们需要在文档中指出这一点,或者可能抛出异常或其他东西。

标签: azure-functionsazure-application-insights

解决方案


请尝试安装此软件包Microsoft.Azure.WebJobs.Logging.ApplicationInsights

然后在您的 Startup.cs 中,代码如下所示:

    public override void Configure(IFunctionsHostBuilder builder)
    {            
        builder.Services.AddSingleton(sp =>
        {
            return new TelemetryConfiguration("put the instrumentation key here");
        });
    }

然后在函数中,使用TelemetryClient发送数据:

    private readonly TelemetryClient telemetryClient;

    public Function1(TelemetryClient telemetryClient)
    {
        this.telemetryClient = telemetryClient;
    }

    [FunctionName("Function1")]
    public void Run([BlobTrigger("samples-workitems/{name}", Connection = "AzureWebJobsStorage")]Stream myBlob, string name, ILogger log)
    {
        telemetryClient.TrackTrace("11 track trace 2222...");
    }

推荐阅读