Azure クラウド サービス向けの Application InsightsApplication Insights for Azure cloud services

Application Insights では、Application Insights SDK からのデータとお客様のクラウド サービスからの Azure 診断データを組み合わせることで、Azure クラウド サービス アプリの可用性、パフォーマンス、障害、使用状況を監視できます。Application Insights can monitor Azure cloud service apps for availability, performance, failures, and usage by combining data from Application Insights SDKs with Azure Diagnostics data from your cloud services. アプリのパフォーマンスと効果に関するフィードバックが得られたら、各開発ライフサイクルにおける設計の方向性について、情報に基づいて選択できます。With the feedback you get about the performance and effectiveness of your app in the wild, you can make informed choices about the direction of the design in each development lifecycle.

概要ダッシュボード

前提条件Prerequisites

開始する前に、次のことが必要です。Before you begin, you need:

  • Azure サブスクリプション。An Azure subscription. Windows、Xbox Live、またはその他の Microsoft クラウド サービスの Microsoft アカウントでサインインします。Sign in with your Microsoft account for Windows, Xbox Live, or other Microsoft cloud services.
  • Microsoft Azure Tools 2.9 以降。Microsoft Azure tools 2.9 or later.
  • Developer Analytics Tools 7.10 以降。Developer Analytics Tools 7.10 or later.

すぐに使い始められるGet started quickly

Application Insights を使ってクラウド サービスを監視する最も早くて簡単な方法は、サービスを Azure に発行するときにそのオプションを選択することです。The quickest and easiest way to monitor your cloud service with Application Insights is to choose that option when you publish your service to Azure.

[診断設定] ページの例

このオプションでは、お客様のアプリが実行時にインストルメント化され、お客様の Web ロールで要求、例外、依存関係を監視するのに必要なすべてのテレメトリが提供されます。This option instruments your app at runtime, giving you all the telemetry that you need to monitor requests, exceptions, and dependencies in your web role. また、お客様の worker ロールからのパフォーマンス カウンターを監視します。It also monitors performance counters from your worker roles. お客様のアプリによって生成された診断トレースも Application Insights に送信されます。Any diagnostics traces generated by your app are also sent to Application Insights.

このオプションで十分な場合、これで完了です。If this option is all you need, you're done.

次の手順は、アプリからのメトリックの表示Analytics によるデータのクエリの実行です。Your next steps are viewing metrics from your app, querying your data with Analytics.

ブラウザーでパフォーマンスを監視するには、可用性テストを設定して、お客様の Web ページにコードを追加することもできます。To monitor performance in the browser, you might also want to set up availability tests and add code to your webpages.

以下のセクションでは、次の追加のオプションについて説明します。The next sections discuss the following additional options:

  • さまざまなコンポーネントからデータを送信し、リソースを分離するための構成をビルドします。Send data from various components and build configurations to separate resources.
  • アプリからカスタム テレメトリを追加します。Add custom telemetry from your app.

Application Insights を使用してインストルメント化されたサンプル アプリSample app instrumented with Application Insights

こちらのサンプル アプリでは、Application Insights がクラウド サービスに追加され、2 つの worker ロールが Azure でホストされています。In this sample app, Application Insights is added to a cloud service with two worker roles hosted in Azure.

次のセクションでは、同じ方法でお客様自身のクラウド サービス プロジェクトを調整する方法について説明します。In the next section, you learn how to adapt your own cloud service project in the same way.

リソースとリソース グループを計画するPlan resources and resource groups

お客様のアプリからのテレメトリは、Application Insights 型の Azure リソースで格納、分析、表示されます。The telemetry from your app is stored, analyzed, and displayed in an Azure resource of type Application Insights.

各リソースはリソース グループに属しています。Each resource belongs to a resource group. リソース グループは、コストの管理、チーム メンバーへのアクセスの許可、調整された単一のトランザクションでの更新のデプロイに使用されます。Resource groups are used to manage costs, to grant access to team members, and to deploy updates in a single coordinated transaction. たとえば、1 回の操作で Azure クラウド サービスとその Application Insights 監視リソースをデプロイするスクリプトを記述できます。For example, you could write a script to deploy an Azure cloud service and its Application Insights monitoring resources all in one operation.

コンポーネント用のリソースResources for components

お客様のアプリのコンポーネントごとに別個のリソースを作成することをお勧めします。We recommend that you create a separate resource for each component of your app. つまり、web ロールと worker ロールにそれぞれリソースを作成します。That is, you create a resource for each web role and worker role. 各コンポーネントを別個に分析できますが、すべてのコンポーネントから主要なグラフをまとめるダッシュボードを作成して、1 つのビューでまとめて比較および監視することもできます。You can analyze each component separately, but you create a dashboard that brings together the key charts from all the components, so that you can compare and monitor them together in a single view.

別の方法として、複数のロールから同じリソースにテレメトリを送信することもできますが、ソース ロールを識別する各テレメトリ項目にディメンション プロパティを追加します。An alternative approach is to send the telemetry from more than one role to the same resource, but add a dimension property to each telemetry item that identifies its source role. この方法では、例外などのメトリック グラフに通常はさまざまなロールからのカウントの集計が表示されます。しかし、必要な場合にはロール識別子を使用してグラフを分割することができます。In this approach, metric charts, such as exceptions, normally show an aggregation of the counts from the various roles, but you can segment the chart by the role identifier, as necessary. 同じディメンションによって検索をフィルターすることもできます。You can also filter searches by the same dimension. この代替方法ではすべてを同時に表示するのが若干簡単になりますが、ロール間で混乱を招く可能性もあります。This alternative makes it a bit easier to view everything at the same time, but it could also lead to some confusion between the roles.

通常、ブラウザーのテレメトリはサーバー側の Web ロールと同じリソースに含まれています。Browser telemetry is usually included in the same resource as its server-side web role.

さまざまなコンポーネント用の Application Insights リソースを 1 つのリソース グループに配置します。Put the Application Insights resources for the various components in one resource group. この方法により、まとめて管理することが簡単になります。This approach makes it easy to manage them together.

開発、テスト、運用の分離Separate development, test, and production

前のバージョンがライブである間に次の機能用のカスタム イベントを開発する場合、開発に関するテレメトリを別の Application Insights リソースに送信する必要があります。If you are developing custom events for your next feature while the previous version is live, you want to send the development telemetry to a separate Application Insights resource. そうしないと、ライブ サイトから送信されるすべてのトラフィックの中からお客様のテスト テレメトリを見つけることが難しくなります。Otherwise, it can be hard to find your test telemetry among all the traffic from the live site.

この状況を回避するには、お客様のシステムの各ビルド構成または "スタンプ" (開発、テスト、運用など) 用に別個のリソースを作成します。To avoid this situation, create separate resources for each build configuration or "stamp" (development, test, production, and so on) of your system. 各ビルド構成用のリソースを別個のリソース グループに配置します。Put the resources for each build configuration in a separate resource group.

テレメトリを適切なリソースに送信するには、ビルド構成に応じて異なるインストルメンテーション キーを選択するように Application Insights SDK を設定できます。To send the telemetry to the appropriate resources, you can set up the Application Insights SDK so that it picks up a different instrumentation key, depending on the build configuration.

役割ごとに Application Insights リソースを作成するCreate an Application Insights resource for each role

各ロール用に別個のリソースを作成する (場合によっては各ビルド構成用に別個のセットも作成する) ことにした場合、Application Insights ポータルでそれらすべてを作成するのが最も簡単です。If you've decided to create a separate resource for each role, and perhaps a separate set for each build configuration, it's easiest to create them all in the Application Insights portal. リソースを多数作成する場合は、プロセスを自動化できます。If you create resources a lot, you can automate the process.

  1. Azure portal で、 [新規作成] > [開発者サービス] > [Application Insights] の順に選択します。In the Azure portal, select New > Developer Services > Application Insights.

    [Application Insights] ウィンドウ

  2. [アプリケーションの種類] ドロップダウン リストで [ASP.NET Web アプリケーション] を選択します。In the Application Type drop-down list, select ASP.NET web application.

各リソースは、インストルメンテーション キーによって識別されます。Each resource is identified by an instrumentation key. このキーは、SDK を手動で構成したい場合や SDK の構成を確認したい場合に後で必要になる可能性があります。You might need this key later if you want to manually configure or verify the configuration of the SDK.

Set up Azure Diagnostics for each role (各ロール用の Azure 診断を設定する)Set up Azure Diagnostics for each role

このオプションは、Application Insights でアプリを監視する場合に設定します。Set this option to monitor your app with Application Insights. Web ロールの場合は、このオプションによってパフォーマンスの監視、アラート、診断、使用状況の分析が提供されます。For web roles, this option provides performance monitoring, alerts, diagnostics, and usage analysis. その他のロールの場合は、再起動、パフォーマンス カウンター、System.Diagnostics.Trace への呼び出しなど、Azure 診断を検索して監視できます。For other roles, you can search and monitor Azure Diagnostics such as restart, performance counters, and calls to System.Diagnostics.Trace.

  1. Visual Studio ソリューション エクスプローラーの [<YourCloudService>] > [ロール] で、各ロールのプロパティを開きます。In Visual Studio Solution Explorer, under <YourCloudService> > Roles, open the properties of each role.

  2. [構成][診断データを Application Insights に送信する] チェック ボックスをオンにしてから、お客様が先ほど作成した Application Insights リソースを選択します。In Configuration, select the Send diagnostics data to Application Insights check box, and then select the Application Insights resource that you created earlier.

各ビルド構成に対して別個の Application Insights リソースを使用することにした場合は、まず構成を選択します。If you have decided to use a separate Application Insights resource for each build configuration, select the configuration first.

Application Insights の構成

これにより、お客様の Application Insights インストルメンテーション キーが ServiceConfiguration.*.cscfg という名前のファイルに挿入されます。This has the effect of inserting your Application Insights instrumentation keys into the files named ServiceConfiguration.*.cscfg. こちらにサンプル コードがあります。Here is the Sample code.

Application Insights に送信される診断情報のレベルを変更したい場合、 .cscfg ファイルを直接編集することで実行できます。If you want to vary the level of diagnostics information that's sent to Application Insights, you can do so by editing the .cscfg files directly.

各プロジェクトに SDK をインストールするInstall the SDK in each project

このオプションでは、カスタム ビジネス テレメトリを任意のロールに追加できます。With this option, you can add custom business telemetry to any role. お客様のアプリの使用状況とパフォーマンスについてより詳しい分析が得られます。The option provides a closer analysis of how your app is used and performs.

Visual Studio で、Application Insights SDK を各クラウド アプリ プロジェクト用に構成します。In Visual Studio, configure the Application Insights SDK for each cloud app project.

  1. Web ロールを構成するには、プロジェクトを右クリックし、 [Application Insights の構成] を選択するか、または [追加]、[Application Insights のテレメトリ] の順に選択します。To configure web roles, right-click the project, and then select Configure Application Insights or Add > Application Insights telemetry.

  2. worker ロールを構成するには:To configure worker roles:

    a.a. プロジェクトを右クリックし、 [NuGet パッケージの管理] を選択します。Right-click the project, and then select Manage NuGet Packages.

    b.b. Windows サーバー用の Application Insights を追加します。Add Application Insights for Windows Servers.

    Search for "Application Insights"

  3. データを Application Insights リソースに送信するように SDK を構成するには:To configure the SDK to send data to the Application Insights resource:

    a.a. 適切なスタートアップ関数で、 .cscfg ファイルに含まれている構成設定のインストルメンテーション キーを設定します。In a suitable startup function, set the instrumentation key from the configuration setting in the .cscfg file:

    
     TelemetryConfiguration.Active.InstrumentationKey = RoleEnvironment.GetConfigurationSettingValue("APPINSIGHTS_INSTRUMENTATIONKEY");
    

    b.b. お客様のアプリの各ロールについて "手順 a." を繰り返します。Repeat "step a" for each role in your app. 次の例を参照してください。See the examples:

  4. ApplicationInsights.config ファイルが常に出力ディレクトリにコピーされるように設定します。Set the ApplicationInsights.config file to be copied always to the output directory.

    .config ファイルのメッセージによって、インストルメンテーション キーをそこに配置するよう求められます。A message in the .config file asks you to place the instrumentation key there. ただし、クラウド アプリでは、それは .cscfg ファイルから設定することをお勧めします。However, for cloud apps, it's better to set it from the .cscfg file. この方法により、ポータルでロールが正しく識別されます。This approach ensures that the role is correctly identified in the portal.

完全な SQL クエリを収集するように Status Monitor を設定する (省略可能)Set up Status Monitor to collect full SQL Queries (optional)

この手順は、.NET Framework で完全な SQL クエリをキャプチャする場合にのみ必要です。This step is only needed if you want to capture full SQL queries on .NET Framework.

  1. \*.csdef ファイルに、次のように各ロールのスタートアップ タスクを追加しますIn \*.csdef file Add startup task for each role similar to

    <Startup>
      <Task commandLine="AppInsightsAgent\InstallAgent.bat" executionContext="elevated" taskType="simple">
        <Environment>
          <Variable name="ApplicationInsightsAgent.DownloadLink" value="http://go.microsoft.com/fwlink/?LinkID=522371" />
          <Variable name="RoleEnvironment.IsEmulated">
            <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
          </Variable>
        </Environment>
      </Task>
    </Startup>
    
  2. InstallAgent.batInstallAgent.ps1 をダウンロードし、各ロール プロジェクトの AppInsightsAgent フォルダーに配置します。Download InstallAgent.bat and InstallAgent.ps1, put them into the AppInsightsAgent folder on each role project. 必ず Visual Studio のファイルのプロパティまたはビルド スクリプトを使用して、それらを出力ディレクトリにコピーします。Make sure to copy them to the output directory through Visual Studio file properties or build scripts.

  3. すべての worker ロールに環境変数を追加します。On all Worker Roles, add environment variables:

      <Environment>
        <Variable name="COR_ENABLE_PROFILING" value="1" />
        <Variable name="COR_PROFILER" value="{324F817A-7420-4E6D-B3C1-143FBED6D855}" />
        <Variable name="MicrosoftInstrumentationEngine_Host" value="{CA487940-57D2-10BF-11B2-A3AD5A13CBC0}" />
      </Environment>
    

アプリを実行して発行するRun and publish the app

  1. お客様のアプリを実行し、Azure にサインインします。Run your app, and sign in to Azure.

  2. お客様が作成した Application Insights リソースを開きます。Open the Application Insights resources that you created.

    個別のデータ ポイントは [検索] に表示され、集計されたデータは [メトリック エクスプローラー] に表示されます。Individual data points are displayed in Search, and aggregated data is displayed in Metric Explorer.

  3. さらにテレメトリを追加し (以下のセクションを参照)、お客様のアプリを発行して、ライブの診断と使用状況のフィードバックを取得します。Add more telemetry (see the next sections) and then publish your app to get live diagnostics and usage feedback.

データがない場合、以下の手順を実行します。If there is no data, do the following:

  1. 個別のイベントを表示するには、[検索] タイルを開きます。To view individual events, open the Search tile.
  2. アプリで、テレメトリがいくつか生成されるようにさまざまなページを開きます。In the app, open various pages so that it generates some telemetry.
  3. 数秒待ってから [最新の情報に更新] をクリックします。Wait a few seconds, and then click Refresh.

詳細については、「 トラブルシューティング」を参照してください。For more information, see Troubleshooting.

Azure 診断イベントを表示するView Azure Diagnostics events

Application Insights の Azure 診断情報は、以下の場所にあります。You can find the Azure Diagnostics information in Application Insights in the following locations:

  • パフォーマンス カウンターは、カスタム メトリックとして表示されます。Performance counters are displayed as custom metrics.
  • Windows イベント ログは、トレースとカスタム イベントとして表示されます。Windows event logs are shown as traces and custom events.
  • アプリケーション ログ、ETW ログ、診断インフラストラクチャ ログは、トレースとして表示されます。Application logs, ETW logs, and any diagnostics infrastructure logs appear as traces.

パフォーマンス カウンターおよびイベント数を表示するには、[メトリックス エクスプローラー] を開き、次のグラフを追加します。To view performance counters and counts of events, open Metrics Explorer and add the following chart:

Azure 診断データ

Azure 診断によって送信されるさまざまなトレース ログ全体を検索するには、[検索] または Analytics クエリを使用します。To search across the various trace logs that are sent by Azure Diagnostics, use Search or an Analytics query. たとえば、ハンドルされない例外が発生し、それによってロールがクラッシュしてリサイクルされたとします。For example, suppose you have an unhandled exception that has caused a role to crash and recycle. その情報は、Windows イベント ログのアプリケーション チャンネルに表示されます。That information would show up in the Application channel of Windows Event Log. [検索] を使用して Windows イベント ログのエラーを表示し、例外の完全なスタック トレースを取得できます。You can use Search to view the Windows Event Log error and get the full stack trace for the exception. これは、問題の根本原因の発見に役立ちます。Doing so helps you find the root cause of the issue.

Azure 診断の検索

テレメトリの追加More telemetry

以下のセクションでは、お客様のアプリのさまざまな側面に関して追加のテレメトリを取得する方法を説明します。The next sections discuss how to get additional telemetry from various aspects of your app.

worker ロールからの要求を追跡するTrack requests from worker roles

Web ロールでは、HTTP 要求に関するデータが要求モジュールによって自動的に収集されます。In web roles, the requests module automatically collects data about HTTP requests. 既定の収集動作をオーバーライドする方法の例については、サンプルの MVCWebRole を参照してください。For examples of how you can override the default collection behavior, see the sample MVCWebRole.

HTTP 要求の場合と同じ方法で追跡することで、worker ロールの呼び出しのパフォーマンスを記録できます。You can capture the performance of calls to worker roles by tracking them in the same way as HTTP requests. Application Insights では、"要求" 型のテレメトリは、サーバー側で名前を付け、時間を指定し、個別に成功と失敗を判定できる作業単位を測定できます。In Application Insights, the Request telemetry type measures a unit of named server-side work that can be timed and can independently succeed or fail. SDK によって HTTP 要求が自動的にキャプチャされますが、独自のコードを挿入して worker ロールへの要求を追跡できます。Although HTTP requests are captured automatically by the SDK, you can insert your own code to track requests to worker roles.

要求を報告するためにインストルメント化された 2 つのサンプル worker ロールSee the two sample worker roles instrumented to report requests:

例外Exceptions

ハンドルされない例外を各種の Web アプリから収集する方法の詳細については、Application Insights での例外の監視に関するページを参照してください。For information about how to collect unhandled exceptions from various web app types, see Monitoring exceptions in Application Insights.

サンプルの web ロールには MVC5 コントローラーおよび Web API 2 コントローラーが含まれています。The sample web role has MVC5 and Web API 2 controllers. この 2 つからのハンドルされない例外は、以下のハンドラーを使用してキャプチャされます。The unhandled exceptions from the two are captured with the following handlers:

worker ロールの場合、2 つの方法で例外を追跡できます。For worker roles, you can track exceptions in two ways:

  • TrackException(ex) を使用します。Use TrackException(ex).
  • Application Insights トレース リスナー NuGet パッケージを追加した場合、こちらの例に示すように、System.Diagnostics.Trace を使用して例外を記録できます。If you have added the Application Insights trace listener NuGet package, you can use System.Diagnostics.Trace to log exceptions as shown in this example.

パフォーマンス カウンターPerformance counters

既定では、次のカウンターが収集されます。The following counters are collected by default:

  • \Process(??APP_WIN32_PROC??)%Processor Time\Process(??APP_WIN32_PROC??)% Processor Time
  • \Memory\Available Bytes\Memory\Available Bytes
  • .NET CLR Exceptions(??APP_CLR_PROC??)# of Exceps Thrown / sec.NET CLR Exceptions(??APP_CLR_PROC??)# of Exceps Thrown / sec
  • \Process(??APP_WIN32_PROC??)\Private Bytes\Process(??APP_WIN32_PROC??)\Private Bytes
  • \Process(??APP_WIN32_PROC??)\IO Data Bytes/sec\Process(??APP_WIN32_PROC??)\IO Data Bytes/sec
  • \Processor(_Total)% Processor Time\Processor(_Total)% Processor Time

Web ロールの場合、以下のカウンターも収集されます。For web roles, these counters are also collected:

  • \ASP.NET Applications(??APP_W3SVC_PROC??)\Requests/Sec\ASP.NET Applications(??APP_W3SVC_PROC??)\Requests/Sec
  • \ASP.NET Applications(??APP_W3SVC_PROC??)\Request Execution Time\ASP.NET Applications(??APP_W3SVC_PROC??)\Request Execution Time
  • \ASP.NET Applications(??APP_W3SVC_PROC??)\Requests In Application Queue\ASP.NET Applications(??APP_W3SVC_PROC??)\Requests In Application Queue

追加のカスタム パフォーマンス カウンターやその他の Windows パフォーマンス カウンターは、こちらの例に示すようにApplicationInsights.config を編集することで指定できます。You can specify additional custom or other Windows performance counters by editing ApplicationInsights.config as shown in this example.

パフォーマンス カウンター

worker ロールの関連付けられたテレメトリCorrelated telemetry for worker roles

リッチな診断エクスペリエンスでは、失敗した要求や待ち時間の長い要求の原因を確認できます。For a rich diagnostics experience, you can view what led to a failed or high latency request. Web ロールを使用すると、関連するテレメトリ間の関連付けが SDK によって自動的に設定されます。With web roles, the SDK automatically sets up a correlation between related telemetry.

worker ロールでこのビューを実現するには、カスタムのテレメトリ初期化子を使用して、共通の Operation.Id context 属性をすべてのテレメトリに設定します。To achieve this view for worker roles, you can use a custom telemetry initializer to set a common Operation.Id context attribute for all the telemetry. これを行うと、待ち時間または失敗の問題の原因が依存関係とコードのどちらにあったかを一目で把握することができます。Doing so lets you view at a glance whether the latency or failure issue was caused by a dependency or your code.

その方法は次のとおりです。Here's how:

  • こちらの例に示すように、correlationId を CallContext に設定します。Set the correlationId into a CallContext as shown in this example. このケースでは、要求 ID を correlationId として使用しています。In this case, we are using the Request ID as the correlationId.
  • カスタムの TelemetryInitializer 実装を追加して、先ほど設定された correlationId に Operation.Id を設定します。Add a custom TelemetryInitializer implementation, to set the Operation.Id to the correlationId that was set previously. 例については、ItemCorrelationTelemetryInitializer を参照してください。For an example, see ItemCorrelationTelemetryInitializer.
  • カスタムのテレメトリ初期化子を追加します。Add the custom telemetry initializer. これは、ApplicationInsights.config ファイル内で実行できます。または、こちらの例に示すようにコードで実行できます。You could do so in the ApplicationInsights.config file or in code as shown in this example.

クライアント テレメトリClient telemetry

ページ ビュー数、ページの読み込み時間、スクリプトの例外など、ブラウザーベースのテレメトリを取得し、お客様のページ スクリプトにカスタム テレメトリを記述するには、Web ページへの JavaScript SDK の追加に関するページを参照してください。To get browser-based telemetry, such as page view counts, page load times, or script exceptions, and to write custom telemetry in your page scripts, see Add the JavaScript SDK to your webpages.

可用性テストAvailability tests

お客様のアプリが動作していて応答することを確認するには、Web テストを設定しますTo make sure your app stays live and responsive, Set up web tests.

すべてをまとめて表示するDisplay everything together

お客様のシステムの全体像を把握したい場合、主要な監視グラフを 1 つのダッシュ ボードにまとめて表示できます。For an overall picture of your system, you can display the key monitoring charts together on one dashboard. たとえば、各ロールの要求と失敗のカウントをピン留めできます。For example, you could pin the request and failure counts of each role.

お客様のシステムで他の Azure サービス (Stream Analytics など) が使用されている場合は、それらの監視グラフも含めます。If your system uses other Azure services, such as Stream Analytics, include their monitoring charts as well.

クライアントのモバイル アプリがある場合は、App Center を使用してください。If you have a client mobile app, use App Center. Analytics でクエリを作成してイベント カウントを表示してから、それをダッシュボードにピン留めします。Create queries in Analytics to display the event counts, and pin them to the dashboard.

Example

この例 では、1 つの Web ロールと 2 つの worker ロールが含まれたサービスを監視します。The example monitors a service that has a web role and two worker roles.

Azure クラウド サービスにおける実行での例外 "メソッドが見つかりません"Exception "method not found" on running in Azure cloud services

.NET 4.6 でビルドした場合Did you build for .NET 4.6? .NET 4.6 は、Azure クラウド サービスのロールでは自動的にサポートされていません。.NET 4.6 is not automatically supported in Azure cloud services roles. お客様のアプリを実行する前に、.NET 4.6 を各ロールにインストールしてくださいInstall .NET 4.6 on each role before running your app.

ビデオVideo

次の手順Next steps