Visual Studio から Application Insights を追加すると、開発環境でデバッグを行っている時に発生したエラーやイベントを送信してしまい、本番の Application Insights に残ってしまうので困ります。
開発中はエラーが出るのなんて当たり前なので、完全にノイズとなってしまっていました。
Application Insights のテレメトリを停止する方法は DisableTelemetry に true を設定するだけなので簡単ですが、どういうときに停止させるかを少し考える必要があります。
例えばデバッガーがアタッチされている場合は停止したい時には、以下のように Global.asax.cs に追加すればデバッグ中はテレメトリが送信されません。
protected void Application_Start() { if (Debugger.IsAttached) { TelemetryConfiguration.Active.DisableTelemetry = true; } }
大体の場合ではこれで問題なさそうですが、リモートデバッグ時の挙動がどうなるか少し不安です。
あと、今回は開発環境ではテレメトリを停止しつつ、本番環境以外にステージングでも Application Insights を使いたかったので、InstrumentationKey を動的に設定する方法を調べました。
そして、最近はポータルから Application Insights の設定を行うと、該当する Web Apps の App Settings に APPINSIGHTS_INSTRUMENTATIONKEY というキーが追加されるようになっているので、これを使って実行時に設定を行えそうです。
最終的には以下のように修正して Global.asax.cs に追加しました。ステージング環境にデプロイした時でも App Settings にキーを追加するだけで送信先を変えることが出来ます。
protected void Application_Start() { if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["APPINSIGHTS_INSTRUMENTATIONKEY"])) { TelemetryConfiguration.Active.InstrumentationKey = ConfigurationManager.AppSettings["APPINSIGHTS_INSTRUMENTATIONKEY"]; } else { TelemetryConfiguration.Active.DisableTelemetry = true; } }
APPINSIGHTS_INSTRUMENTATIONKEY が存在しない場合はテレメトリを停止します。
忘れちゃいけないのが ApplicationInsights.config から InstrumentationKey を削除することです。残ったままだと App Settings にキーが追加されていない場合にもテレメトリが送信されてしまいます。
修正した後にデバッグ実行を試してみると、Application Insights へのテレメトリが送信されていないことが、診断ツールから簡単に確認できます。
本来なら App Insights SDK 側でやって欲しかった感じですが、要件は満たせたので良しとします。