たとえば、同一プロジェクトで Application Insights を展開スロットごとに別々に確認したい場合などにおいて、1つの Application Insights リソースでは混在したテレメトリが表示されてしまいます。
では、複数の Application Insights のリソースを用意した場合、別々のリソースに利用状況を送信するにはどのような方法があるのか調べてみたところ AppSettings に インストルメンテーション キー を保持することで対応出来そうなことが分かりました。
Application Insights support for Multiple Environments, Stamps and App Versions
ということで、さっそく実験してみたいと思います。
1.Azure ポータルから、適当に Application Insights を2個ほど作ります。
2.作成した2つの Application Insights のインストルメンテーション キーを確認しておきます。
3.適当なプロジェクトを作って、「Application Insights テレメトリの追加」をおこないます。
4.ココでは、利用統計情報の送信先に「Test-Staging」という名前の Application Insights を指定します。
「設定を構成する…」ボタンを押してみると、もうちょっとだけ情報が得られます。
5.追加ボタンをクリックすると、プロジェクトが Application Insights を利用できるようになります。
6.ApplicationInsights.config を開いて、「Test-Staging」のインストルメンテーション キーが指定された部分を、削除またはコメントアウトします。
7.Web.config を開いて、AppSettings に「Test-Production」のインストルメンテーション キーを持った設定を追加します。
「Test-Staging」のインストルメンテーション キーではなく、ココでは「Test-Production」のインストルメンテーション キーを設定します。
8.Global.asax.cs を開いて、TelemetryConfiguration に対して 先ほど AppSettings に追加した設定をセットするように Application_Start を編集します。
9.View/Shared/_Layout.cshtml のレイアウトページに script タグを追加します。
追加しているコードは、[Application Insights]-[クイック スタート]-[Web ページを監視するコードを取得します]から取得できますので、インストルメンテーション キー の部分だけ書き換えます。
10.あとは何時ものようにデプロイして適当に触っていれば、「Test-Production」の Application Insights にだけテレメトリが表示されるはずです。
ということで、プロジェクトの AppSettings にインストルメンテーション キーを持たせることで、Application Insights の利用状況の送信先を変更できることが分かりました。
あとは必要に応じて、Web.config の変換をすることで展開スロットごとにも対応できそうですし、Production だけ Application Insights を利用したい場合にも、Web.config の system.web セクションの httpModules にある ApplicationInsightsWebTracking をコメントアウトすればよさそうです。