しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

開発環境では Application Insights にテレメトリを送信しないようにする

Visual Studio から Application Insights を追加すると、開発環境でデバッグを行っている時に発生したエラーやイベントを送信してしまい、本番の Application Insights に残ってしまうので困ります。

開発中はエラーが出るのなんて当たり前なので、完全にノイズとなってしまっていました。

f:id:shiba-yan:20160704001625p:plain

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 というキーが追加されるようになっているので、これを使って実行時に設定を行えそうです。

f:id:shiba-yan:20160703234901p:plain

最終的には以下のように修正して 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 にキーが追加されていない場合にもテレメトリが送信されてしまいます。

f:id:shiba-yan:20160704001231p:plain

修正した後にデバッグ実行を試してみると、Application Insights へのテレメトリが送信されていないことが、診断ツールから簡単に確認できます。

本来なら App Insights SDK 側でやって欲しかった感じですが、要件は満たせたので良しとします。