我使用此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"
}
}
}
答案 0 :(得分:3)
当您在调试器输出窗口中看到appinsights事件时,这些事件是否会在其中显示(unconfigured)
?如果在输出窗口中存在,则表示sdk正在调试中运行,但未在 appsettings.json
(或代码中)中找到检测键注意应用程序见解sdks不查看此设置的用户提示,仅查看appsettings!
如果调试器窗口中的事件不说(unconfigured)
,下一步就是使用像Fiddler这样的东西来观察你的出站http流量,以确保你'重新看到SDK的出站呼叫转到dc.services.visualstudio.com,并且那些出站呼叫正在成功。 (在此步骤中,您可以验证您认为正在使用的检测键是否是sdk用于发送事件的检测键)
如果正在发送事件,并且正在使用您设置的ikey,则最后一步是验证您正在使用的ikey是您在门户中查看的资源的ikey。每隔一段时间,某人就会在某个地方找到“dev”的ikey,然后在门户网站中查看“prod”资源,而不是看到他们期望的事件。
如果你已经到目前为止,发送事件,发送到你想要的ikey,并验证ikey是你想要的资源,然后验证没有任何服务可能会影响您的数据的中断或延迟,您可以在http://aka.ms/aistatus找到,否则,您应该通常会在几秒到几分钟内看到事件,具体取决于您所处的世界地点以及资源在天蓝色的区域等。
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