微软智能云Azure的Application Insights服务是一种应用程序监控系统,给运维带来了极大的方便。但有时候会遇到一些小麻烦,我们来看看如何解决。
我遇到的问题是,ASP.NET Core应用安装了Application Insights服务以后,默认情况下竟然是不区分环境的。这会导致本地开发调试代码的时候,有大量无用的监控数据,比如错误、异常、程序响应时间等,被发送到了Azure,和生产上的监控数据合并到了一起。而本地的这些数据,其实是对生产环境的污染,容易让Azure的智能监测服务误判,从而给运维人员发假警报。所以我需要一种方式,能够禁用本地的Application Insights监控,只有上线以后才启动。
(Debug时候产生的监控数据)
调教 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