是否可以在 Azure 函数中在运行时设置 AppInsights 检测密钥

Mik*_*sen 5 azure-application-insights azure-functions

通常,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
}
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

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

在此处输入图片说明

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

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

更新:

翻了一下微软的文档,貌似调用AddApplicationInsightsTelemetry会和开箱即用的 AppInsights 服务冲突:

在此处输入图片说明

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

Iva*_*ang 1

请尝试安装此包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");
        });
    }
Run Code Online (Sandbox Code Playgroud)

然后在函数中,使用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...");
    }
Run Code Online (Sandbox Code Playgroud)