• .NET Core 本地调试时如何禁用Application Insights
  • 发布于 2个月前
  • 258 热度
    0 评论
  • 酸汤鱼
  • 1 粉丝 10 篇博客
  •   
微软智能云Azure的Application Insights服务是一种应用程序监控系统,给运维带来了极大的方便。但有时候会遇到一些小麻烦,我们来看看如何解决。
我遇到的问题是,ASP.NET Core应用安装了Application Insights服务以后,默认情况下竟然是不区分环境的。这会导致本地开发调试代码的时候,有大量无用的监控数据,比如错误、异常、程序响应时间等,被发送到了Azure,和生产上的监控数据合并到了一起。而本地的这些数据,其实是对生产环境的污染,容易让Azure的智能监测服务误判,从而给运维人员发假警报。所以我需要一种方式,能够禁用本地的Application Insights监控,只有上线以后才启动。

调教 VS2017
在 Tools > Options > Project and Solutions > Web Projects 下面,勾选 Disable local Application Insights for Asp.Net Core web projects.

代码更改
首先,在开发环境使用的appsettings.Development.json里,用空GUID覆盖InstrumentationKey
"ApplicationInsights": {
  "InstrumentationKey": "00000000-0000-0000-0000-000000000000"
}

打开Startup.cs,把以下代码插入Configure()方法的下面:
if (env.IsDevelopment())
{
    TelemetryConfiguration.Active.DisableTelemetry = true;
    TelemetryDebugWriter.IsTracingDisabled = true;
    //...
}

Application Insights的前端JS库,可以用environment标签忽略掉本地环境
<environment exclude="Development">
    @Html.Raw(JavaScriptSnippet.FullScript)
</environment>

现在,本地跑一下应用,可以看到诊断工具里已经没有Application Insights的消息了。

稍等一段时间(比如我的监控图表周期是24小时)。现在你的生产环境监控数据就不会混进奇怪的东西啦~

原先Application map里会出现localhost,现在也没有了,证明我们的调整成功了!

参考资料:https://stackoverflow.com/questions/32057441/disable-application-insights-in-debug
用户评论