如果由appsettings.json
中设置的配置值指定,我希望Azure ApplicationInsights仅用于ASP.NET Core应用程序。
我把它放在我的_Layout.cshml
中以禁用客户端见解:
@if (Configuration.GetSection("UseInsights").Get<bool>())
{
@Html.Raw(JavaScriptSnippet.FullScript)
}
但仍然发送了服务器端遥测,所以我通过配置禁用了它:
TelemetryConfiguration.Active.DisableTelemetry = true;
这会停止发送请求和异常数据,但CPU使用率等内容仍在我的Insights仪表板上发送并显示。
我认为合适的方法是有条件地在.UseApplicationInsights()
上启用WebHost.CreateDefaultBuilder()
扩展名,但这是一个鸡和鸡蛋的情况,因为我无法访问配置设置,直到之后主机已经建成。在调用BuildWebHost()
后,我可以在某处完全禁用洞察吗?
答案 0 :(得分:2)
{&#34; ApplicationInsights&#34;:{ &#34; InstrumentationKey&#34;:&#34; 11111111-2222-3333-4444-555555555555&#34; }}
您可以通过appsettings.json中是否存在检测键来控制服务器端遥测。 对于每个环境,您可能有单独的appsettings.json,并且每个都可以包含不同的检测键,或者如果您不希望将遥测发送到ApplicationInsights服务,则根本不包含任何内容,如下所示。
{&#34; ApplicationInsights&#34;:{ &#34; InstrumentationKey&#34;:&#34;&#34; }}
答案 1 :(得分:0)
以下是我在禁用时完全删除任何Azure Application Insights所做的工作。
我为JavaScript片段创建了一个接口,该接口被注入客户端遥测:
public interface IInsightsJavaScriptSnippet
{
string FullScript { get; }
}
有两个实现,一个在启用Insights时包装Microsoft.ApplicationInsights.AspNetCore.JavaScriptSnippet
的实现:
public class InsightsJavaScriptSnippet : IInsightsJavaScriptSnippet
{
private readonly JavaScriptSnippet _snippet;
public InsightsJavaScriptSnippet(JavaScriptSnippet snippet)
{
_snippet = snippet;
}
public string FullScript => _snippet.FullScript;
}
另一个输出空字符串时它们不是:
public class BlankJavaScriptSnippet : IInsightsJavaScriptSnippet
{
public string FullScript => string.Empty;
}
然后我根据配置值注册一个或另一个。 services.AddApplicationInsightsTelemetry()
会注册JavaScriptSnippet
,然后将其注入InsightsJavaScriptSnippet
的构造函数中:
if (Configuration.GetSection("UseInsights").Get<bool>())
{
services.AddApplicationInsightsTelemetry(Configuration["ApplicationInsights:InstrumentationKey"]);
services.AddSingleton<IInsightsJavaScriptSnippet, InsightsJavaScriptSnippet>();
}
else
{
services.AddSingleton<IInsightsJavaScriptSnippet, BlankJavaScriptSnippet>();
}
然后,我将IInsightsJavaScriptSnippet
注入_Layout.cshtml
而不是Microsoft JavaScriptSnippet
:
@inject MyApp.Services.IInsightsJavaScriptSnippet JavaScriptSnippet
// ... snipped code
<head>
@Html.Raw(JavaScriptSnippet.FullScript)
</head>
如果我们没有使用Insights,那么HTML不会增加任何内容。