在localhost中使用secrets.json时,事件未流入Application Insights

时间:2018-02-23 09:10:35

标签: asp.net-core-2.0 azure-application-insights

我使用此Application Insights getting started指南来设置我的应用程序。我正在运行VS2017 version 15.5.7,我的应用程序正在使用AspNetCore 2.0.0

当我使用Visual Studio中的IIS Express调试我的应用程序时,我在调试器“事件”窗口中看到了Application Insights事件。但是,相同的事件不会流向Azure中的Application Insights;我已在InstrumentationKey中配置了secrets.json,如下所示。我已经确认通过设置断点将密钥加载到我的应用程序配置中。

作为另一个调试数据点,我确认在Azure Web App中运行时,事件会成功流向Application Insights。此测试使用完全相同的代码。但是,我没有从secrets.json加载InstrumentationKey,而是将APPINSIGHTS_INSTRUMENTATIONKEY环境变量配置为拥有门户中Web App的密钥(通过ApplicationSettings窗格)。

我不知道为什么我的事件没有通过localhost调试器流向Application Insights,但它们是在部署到Web App时。

Program.cs的

public static void Main( string[] args )
{
    BuildWebHost( args ).Run();
}

public static IWebHost BuildWebHost( string[] args ) =>
    WebHost.CreateDefaultBuilder( args )
        .UseStartup<Startup>()
        .UseApplicationInsights()
        .Build();

Startup.cs

var configurationBuilder = new ConfigurationBuilder()
    .SetBasePath( hostingEnvironment.ContentRootPath )
    .AddJsonFile( $"appsettings.{hostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true );

if ( hostingEnvironment.IsDevelopment() )
{
    configurationBuilder.AddUserSecrets<Startup>( optional: true );
}

this.Configuration = configurationBuilder
    .AddEnvironmentVariables()
    .Build();

secrets.json

{
    "ApplicationInsights": {
        "InstrumentationKey": "omitted for StackOverflow"
    }
}

my.csproj

<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.1.1" />
<PackageReference Include="Microsoft.ApplicationInsights.Web" Version="2.5.1" />
<PackageReference Include="Microsoft.AspNetCore" Version="2.0.0" />

launchSettings.json

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
        "applicationUrl": "http://localhost:2322/",
        "sslPort": 44330
    }
  },
  "profiles": {
    "IIS Express": {
        "commandName": "IISExpress",
        "launchBrowser": true,
        "launchUrl": "https://localhost:44330/",
        "environmentVariables": {
            "ASPNETCORE_ENVIRONMENT": "Development"
        }
    },
    "FrontDoor": {
        "commandName": "Project",
        "launchBrowser": true,
        "launchUrl": "https://localhost:44330/api/config",
        "environmentVariables": {
            "ASPNETCORE_ENVIRONMENT": "Development"
        },
        "applicationUrl": "http://localhost:2323"
    }
  }
}

3 个答案:

答案 0 :(得分:3)

  1. 当您在调试器输出窗口中看到appinsights事件时,这些事件是否会在其中显示(unconfigured)?如果在输出窗口中存在,则表示sdk正在调试中运行,但未在 appsettings.json (或代码中)中找到检测键注意应用程序见解sdks不查看此设置的用户提示,仅查看appsettings!

  2. 如果调试器窗口中的事件(unconfigured),下一步就是使用像Fiddler这样的东西来观察你的出站http流量,以确保你'重新看到SDK的出站呼叫转到dc.services.visualstudio.com,并且那些出站呼叫正在成功。 (在此步骤中,您可以验证您认为正在使用的检测键是否是sdk用于发送事件的检测键)

  3. 如果正在发送事件,并且正在使用您设置的ikey,则最后一步是验证您正在使用的ikey是您在门户中查看的资源的ikey。每隔一段时间,某人就会在某个地方找到“dev”的ikey,然后在门户网站中查看“prod”资源,而不是看到他们期望的事件。

  4. 如果你已经到目前为止,发送事件,发送到你想要的ikey,并验证ikey是你想要的资源,然后验证没有任何服务可能会影响您的数据的中断或延迟,您可以在http://aka.ms/aistatus找到,否则,您应该通常会在几秒到几分钟内看到事件,具体取决于您所处的世界地点以及资源在天蓝色的区域等。

  5. OP编辑完整答案:

    事实上,我正在打#1,正如约翰在评论中暗示的那样,我需要让AI SDK以另一种方式了解我的iKey。我没有在UseApplicationInsights()中使用Program.cs,而是转而使用AddApplicationInsightsTelemetry(configuration)中的StartUp.ConfigureServices()。传递的配置是从secrets.json加载我的iKey。

答案 1 :(得分:0)

这是一个已知的限制,即将在测试版中修复。 https://github.com/microsoft/ApplicationInsights-dotnet/issues/1882

直到解决方法是使用OverApplication覆盖AddApplicationInsights(IConfiguration)。

答案 2 :(得分:0)

Microsoft.ApplicationInsights.AspNetCore 版本 2.15.0 开始,此问题已得到修复。

对于较低版本,重载 services.AddApplicationInsightsTelemetry(Configuration) 也会从 secrets.json 读取。

<块引用>

用户机密和其他配置提供程序

如果您想在 ASP.NET Core 用户中存储检测密钥 秘密或从另一个配置提供程序检索它,您可以 使用重载 Microsoft.Extensions.Configuration.IConfiguration 参数。为了 例如,services.AddApplicationInsightsTelemetry(Configuration);.

从 Microsoft.ApplicationInsights.AspNetCore 版本 2.15.0 开始, 调用 services.AddApplicationInsightsTelemetry() 会自动 从 应用程序的 Microsoft.Extensions.Configuration.IConfiguration。 无需显式提供 IConfiguration。

https://docs.microsoft.com/en-us/azure/azure-monitor/app/asp-net-core