Application Insights for ASP.NET Core アプリケーションを有効にする

この記事では、Azure Web App としてデプロイされた ASP.NET Core アプリケーションで Application Insights を有効にする方法について説明します。 この実装では、SDK ベースのアプローチを使用します。 自動インストルメンテーション アプローチも使用できます。

Application Insights では、ASP.NET Core アプリケーションから次のテレメトリを収集できます。

  • Requests
  • 依存関係
  • 例外
  • パフォーマンス カウンター
  • ハートビート
  • ログ

サンプル アプリケーションの場合は、net6.0 を対象とする ASP.NET Core MVC アプリケーションを使用します。 ただし、これらの手順は、すべての ASP.NET Core アプリケーションに適用できます。 ワーカー サービスを使っている場合は、こちらの手順を使用してください。

注意

インストルメンテーション キーのインジェストのサポートは、2025 年 3 月 31 日に終了します。 インストルメンテーション キーのインジェストは引き続き機能しますが、この機能の更新プログラムやサポートは提供されなくなります。 接続文字列に移行することで、新機能をご利用いただけます。

サポートされるシナリオ

Application Insights SDK for ASP.NET Core では、実行されている場所や方法に関係なく、アプリケーションを監視できます。 アプリケーションが実行中で、Azure へのネットワーク接続がある場合、Application Insights ではそこからテレメトリを収集できます。 Application Insights の監視は、.NET Core がサポートされているすべての場所でサポートされます。 次のシナリオがサポートされます。

  • オペレーティング システム: Windows、Linux、Mac
  • ホスティング方法: プロセス内、プロセス外
  • デプロイ方法: フレームワーク依存、自己完結型
  • Web サーバー: インターネット インフォメーション サーバー (IIS)、Kestrel
  • ホスティング プラットフォーム: Azure App Service、Azure VM、Docker、Azure Kubernetes Service (AKS) などの Web Apps 機能
  • .Net Core バージョン: プレビューではない、正式にサポートされているすべての .NET Core バージョン
  • IDE: Visual Studio、Visual Studio Code、コマンド ライン

前提条件

このチュートリアルを完了するには、次のものが必要です。

  • Visual Studio 2022
  • 次の Visual Studio ワークロード:
    • ASP.NET と Web 開発
    • データ ストレージとデータ処理
    • Azure の開発
  • .NET 6.0
  • Azure サブスクリプションとユーザー アカウント (リソースの作成と削除が可能)

Azure リソースを展開する

サンプル アプリケーションをその GitHub リポジトリからデプロイするためのガイダンスに従ってください。

グローバルに一意の名前をリソースに付けるために、6 文字のサフィックスが一部のリソースに割り当てられています。 このサフィックスは、この記事の後半で使用するので書き留めておいてください。

Azure portal にデプロイされた Azure リソースの一覧のスクリーンショット。6 文字のサフィックスが強調表示されています。

Application Insights リソースの作成

  1. Azure portal で、application-insights-azure-cafe リソース グループを選択します。

  2. 上のツールバー メニューから、[+ 作成] を選択します。

    Azure portal の application-insights-azure-cafe リソース グループのスクリーンショット。ツール バー メニューの [+ 作成] ボタンが強調表示されています。

  3. [リソースの作成] 画面で、Application Insights を マーケットプレースの検索テキスト ボックスで検索して選択します。

    Azure portal の [リソースの作成] 画面のスクリーンショット。

  4. Application Insights リソースの概要画面で、[作成] を選択します。

    [作成] ボタンが強調表示されている Azure portal の [Application Insights の概要] 画面のスクリーンショット。

  5. Application Insights 画面の [基本] タブ次の表を使用してフォームに入力して、[確認と作成] ボタンを選択します。 下の表で指定されていないフィールドは、既定値を保持できます。

    フィールド
    名前 azure-cafe-application-insights-{SUFFIX} に入力し、{SUFFIX} を以前に記録した適切なサフィックス値に置き換えます。
    リージョン 記事のリソースをデプロイしたときに選択したのと同じリージョンを選択します。
    Log Analytics ワークスペース azure-cafe-log-analytics-workspace を選択します。 または、新しいログ分析のワークスペースを作成することもできます。

    Azure portal の [Application Insights] 画面の [基本] タブのスクリーンショット。前の値が設定されたフォームがあります。

  6. 検証に合格したら、[作成] を選択してリソースをデプロイします。

    Azure portal の Application Insights 画面のスクリーンショット。検証に合格したことを示すメッセージと [作成] ボタンの両方が強調表示されています。

  7. リソースがデプロイされたら application-insights-azure-cafe リソース グループに戻り、デプロイした Application Insights リソースを選択します。

    Azure portal の application-insights-azure-cafe リソース グループのスクリーンショット。Application Insights リソースが強調表示されています。

  8. Application Insights リソースの [概要] 画面で、[クリップボードにコピー] ボタンを選択して接続文字列の値をコピーします。 この記事の次のセクションでは、接続文字列の値を使用します。

    Azure portal の [Application Insights の概要] 画面のスクリーンショット。

Web App Service で Application Insights 接続文字列アプリケーション設定を構成する

  1. application-insights-azure-cafe リソース グループに戻り、azure-cafe-web-{SUFFIX} App Service リソースを開きます。

    Azure portal の application-insights-azure-cafe リソース グループのスクリーンショット。azure-cafe-web-{SUFFIX} リソースが強調表示されています。

  2. 左側のメニューの [設定] セクションで、[構成] を選択します。 [アプリケーション設定] タブで、アプリケーション設定ヘッダーの下の [+ 新しいアプリケーション設定] を選択します。

    Azure portal の [App Service リソース] 画面のスクリーンショット。

  3. [アプリケーション設定の追加/編集] ペインで、フォームに次のように入力して、[OK] を選びます。

    フィールド
    名前 APPLICATIONINSIGHTS_CONNECTION_STRING
    前のセクションでコピーした Application Insights 接続文字列の値を貼り付けます。

    [名前] フィールドと [値] フィールドに上記の値が設定された Azure portal の [アプリケーション設定の追加/編集] ペインのスクリーンショット。

  4. [App Service 構成] 画面で、ツール バー メニューから [保存] ボタンを選択します。 変更を保存するように求められたら、[続行] を選択します。

    ツール バー メニューの [保存] ボタンが強調表示されている Azure portal の [App Service 構成] 画面のスクリーンショット。

Application Insights NuGet パッケージをインストールする

ASP.NET Core MVC Web アプリケーションを、テレメトリを送信するように構成する必要があります。 これを行うためには、Application Insights for ASP.NET Core Web アプリケーション NuGet パッケージを使用します。

  1. Visual Studio で 1 - Starter Application\src\AzureCafe.sln を開きます。

  2. Visual Studio ソリューション エクスプローラー パネルで、AzureCafe プロジェクトを右クリックして、[NuGet パッケージの管理] を選択します。

    Visual Studio ソリューション エクスプローラーのスクリーンショット。Azure Cafe プロジェクトが選択され、[NuGet パッケージの管理] コンテキスト メニュー項目が強調表示されています。

  3. [参照] タブを選択して Microsoft.ApplicationInsights.AspNetCore を検索して選択します。 [インストール] を選択して、ライセンス条件に同意します。 最新の安定したバージョンを使用することをお勧めします。 SDK の完全なリリース ノートについては、オープンソースの GitHub リポジトリを参照してください。

    Visual Studio の [NuGet パッケージ マネージャー] ユーザー インターフェイスのスクリーンショット。

    この記事の次のセクションのために Visual Studio を開いたままにしておきます。

Application Insights のサーバー側テレメトリを有効にする

Application Insights for ASP.NET Core Web アプリケーション NuGet パッケージは、Azure の Application Insights リソースへのサーバー側テレメトリを送信できるようにするための機能をカプセル化します。

  1. Visual Studio ソリューション エクスプローラーで、Program.cs ファイルを開きます。

    Program.cs ファイルが強調表示されている Visual Studio ソリューション エクスプローラーのスクリーンショット。

  2. 次のコードを builder.Services.AddControllersWithViews() ステートメントの前に挿入します。 このコードは、Application Insights 接続文字列の値を構成から自動的に読み取ります。 AddApplicationInsightsTelemetry メソッドが ApplicationInsightsLoggerProvider を組み込みの依存関係挿入コンテナーに登録すると、これが ILogger および ILogger<TCategoryName> の実装要求を満たすために使用されます。

    builder.Services.AddApplicationInsightsTelemetry();
    

    前のコード スニペットが強調表示されている Visual Studio のコード ウィンドウのスクリーンショット。

    ヒント

    詳しくは、ASP.NET Core の構成オプションに関するページを参照してください。

Web アプリケーションに対してクライアント側のテレメトリを有効にする

サーバー側テレメトリの収集を始めるためなら、上記の手順で十分です。 サンプル アプリケーションには、クライアント側のコンポーネントがあります。 次の手順に従って、使用状況テレメトリの収集を始めます。

  1. Visual Studio ソリューション エクスプローラーで \Views\_ViewImports.cshtml を開きます。

  2. 次のコードを既存のファイルの末尾に追加します。

    @inject Microsoft.ApplicationInsights.AspNetCore.JavaScriptSnippet JavaScriptSnippet
    

    Visual Studio の _ViewImports.cshtml ファイルのスクリーンショット。前のコード行が強調表示されています。

  3. アプリケーションに対するクライアント側の監視を正しく有効にするには、Visual Studio ソリューション エクスプローラーで、\Views\Shared\_Layout.cshtml を開き、<\head> タグを閉じる直前に次のコード挿入します。 この JavaScript スニペットが、監視するアプリケーションの各ページの <head> セクションに挿入されている必要があります。

    @Html.Raw(JavaScriptSnippet.FullScript)
    

    Visual Studio の _Layout.cshtml ファイルのスクリーンショット。前のコード行がファイルのヘッド セクション内で強調表示されています。

    ヒント

    FullScript を使用する別の方法は ScriptBody です。 コンテンツ セキュリティ ポリシーを設定するために <script> タグをコントロールする必要がある場合は、ScriptBody を使用します。

    <script> // apply custom changes to this script tag.
        @Html.Raw(JavaScriptSnippet.ScriptBody)
    </script>
    

Note

JavaScript の挿入により、既定の構成のエクスペリエンスが提供されます。 接続文字列の設定以外の構成が必要な場合は、上で説明したように自動挿入を削除して、JavaScript SDK を手動で追加する必要があります。

データベース クエリの監視を有効にする

パフォーマンス低下の原因を調査するときは、データベース呼び出しについての洞察を含めることが重要です。 依存関係モジュールを構成して、監視を有効にします。 SQL を含む依存関係の監視が、既定で有効になっています。

次の手順に従って、完全な SQL クエリ テキストをキャプチャします。

注意

SQL テキストには、パスワードや PII などの機密データが含まれている場合があります。 この機能を有効にするときは注意してください。

  1. Visual Studio ソリューション エクスプローラーで、Program.cs ファイルを開きます。

  2. ファイルの先頭に、次の using ステートメントを追加します。

    using Microsoft.ApplicationInsights.DependencyCollector;
    
  3. SQL コマンド テキストインストルメンテーションを有効にするには、builder.Services.AddApplicationInsightsTelemetry() コードの直後に次のコードを挿入します。

    builder.Services.ConfigureTelemetryModule<DependencyTrackingTelemetryModule>((module, o) => { module.EnableSqlCommandTextInstrumentation = true; });
    

    前のコードが強調表示されている Visual Studio のコード ウィンドウのスクリーンショット。

Azure Cafe Web アプリケーションを実行する

Web アプリケーション コードをデプロイすると、テレメトリが Application Insights へ流れます。 Application Insights SDK によって、アプリケーションへの受信 Web 要求が自動的に収集されます。

  1. Visual Studio ソリューション エクスプローラーの AzureCafe プロジェクトを右クリックし、コンテキスト メニューから [発行] を選択します。

    Visual Studio ソリューション エクスプローラーのスクリーンショット。Azure Cafe プロジェクトが選択され、[発行] コンテキスト メニュー項目が強調表示されています。

  2. [公開] を選択して、新しいコードを Azure App Service に昇格します。

    Azure Cafe 発行プロファイルのスクリーンショット。[発行] ボタンが強調表示されています。

    Azure Cafe Web アプリケーションが正常に公開されると、新しいブラウザー ウィンドウが開いて Azure Cafe Web アプリケーションが表示されます。

    Azure Cafe Web アプリケーションのスクリーンショット。

  3. テレメトリを生成するために、Web アプリケーションで次の手順に従ってレビューを追加します。

    1. Cafe のメニューとレビューを表示するために、Cafe の横にある [詳細] を選択します。

      Azure Cafe Web アプリケーションの Azure Cafe 一覧の一部分を表すスクリーンショット。[詳細] ボタンが強調表示されています。

    2. レビューを表示して追加するために、Cafe の画面で [レビュー] タブを選択します。[Add review] (レビューの追加) ボタンを選択してレビューを追加します。

      Azure Cafe Web アプリケーションの Cafe の詳細画面を表すスクリーンショット。レビューの追加ボタンが強調表示されています。

    3. [Create a review](レビューの作成) ダイアログで、名前、評価、コメントを入力して、レビュー用の写真をアップロードします。 完了したら、[Add review] (レビューの追加) を選択します。

      Azure Cafe Web アプリケーションのレビューの作成ダイアログを表すスクリーンショット。

    4. 追加のテレメトリを生成する必要がある場合は、さらにレビューを追加します。

Live metrics

Live Metrics を使用すると、Application Insights の監視が正しく構成されているかどうかをすばやく確認できます。 Live Metrics では、実行中のプロセスの CPU 使用率がほぼリアルタイムで示されます。 また、要求、依存関係、トレースなどの他のテレメトリも表示できます。 テレメトリがポータルと分析に表示されるまで数分かかる場合があることに注意してください。

アプリケーション マップの表示

サンプル アプリケーションでは、Azure SQL、Azure Blob Storage、Azure 言語サービスなど複数の Azure リソースを呼び出します (レビュー感情分析のため)。

Azure Cafe サンプル Web アプリケーションのアーキテクチャを示す図。

Application Insights は受信テレメトリ データをイントロスペクトするものであり、検出されたシステム統合のビジュアル マップを生成することができます。

  1. Azure portal にサインインします。

  2. サンプル アプリケーションのリソース グループ (application-insights-azure-cafe) を開きます。

  3. リソースの一覧から、azure-cafe-insights-{SUFFIX} Application Insights リソースを選択します。

  4. 左側のメニューの [調査] 見出しの下にある [アプリケーション マップ] を選択します。 生成されたアプリケーション マップを確認します。

    Azure portal の Application Insights のアプリケーション マップのスクリーンショット。

HTTP 呼び出しとデータベース SQL コマンド テキストを表示する

  1. Azure portal で Application Insights のリソースを開きます。

  2. 左側のメニューの [調査] ヘッダーの下にある [パフォーマンス] を選択します。

  3. [操作] タブには、アプリケーションが受信した HTTP 呼び出しの詳細が表示されます。 データのサーバー ビューとブラウザー (クライアント側) ビューを切り替えるには、[サーバー] と [ブラウザー] の切り替えを使用します。

    Azure portal の [パフォーマンス] 画面のスクリーンショット。

  4. テーブルから操作を選択して、要求のサンプルへのドリル インを選択します。

    Azure portal の Application Insights パフォーマンス画面のスクリーンショット。操作とサンプル操作が一覧表示されています。

    選択した要求のエンド ツー エンド トランザクションが表示されます。 この場合、レビューがイメージを含めて作成されたため、Azure Storage と言語サービス (感情分析のため)の呼び出しが含まれます。 また、レビューを永続化するための SQL Azure へのデータベース呼び出しも含まれます。 この例では、最初に選択したイベントに、HTTP POST 呼び出しに関連する情報が表示されます。

    HTTP Post 呼び出しが選択された Azure portal のエンド ツー エンド トランザクションのスクリーンショット。

  5. SQL 項目を選択して、データベースに発行された SQL コマンド テキストを確認します。

    SQL コマンド詳細と共に表示されている Azure portal のエンド ツー エンド トランザクションのスクリーンショット。

  6. 必要に応じて、Azure Storage または Language Service への依存関係 (送信) 要求を選択します。

  7. [パフォーマンス] 画面に戻り、[依存関係] タブを選択して外部リソースへの呼び出しを調査します。 操作テーブルには、感情分析、BLOB ストレージ、およびAzure SQL の呼び出しが含ま れています。

    Azure portal の [Application Insights のパフォーマンス] 画面のスクリーンショット。[依存関係] タブが選択され、[操作] テーブルが強調表示されています。

Application Insights を使用したアプリケーション ログ記録

ログ記録の概要

Application Insights は、ASP.NET Core アプリケーションで利用できるログ プロバイダーの一種で、アプリケーションで Application Insights for ASP.NET Core NuGet パッケージがインストールされてサーバー側テレメトリ収集が有効になると利用可能になります。

注意として、Program.cs の次のコードは ApplicationInsightsLoggerProvider を組み込みの依存関係挿入コンテナーに登録します。

builder.Services.AddApplicationInsightsTelemetry();

ApplicationInsightsLoggerProvider がログ プロバイダーとして登録されているアプリでは、ILogger を使用したコンストラクター インジェクションとジェネリック型の代替 ILogger<TCategoryName> のいずれかを使用することにより Application Insights にログ記録する準備が整います。

Note

既定では、ログ プロバイダーは、重大度が LogLevel.Warning 以上のログ イベントを自動的にキャプチャするように構成されています。

たとえば、次のコントローラーの例を考えてみましょう。 これは、依存関係挿入コンテナーに登録されている ApplicationInsightsLoggerProvider で解決される ILogger の挿入を示しています。 Get メソッドで、Informational、Warning、Error メッセージが記録されていることを確認します。

注意

既定では、Information レベルのトレースは記録されません。 Warning 以上のレベルのみがキャプチャされます。

using Microsoft.AspNetCore.Mvc;

[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
    private readonly ILogger _logger;

    public ValuesController(ILogger<ValuesController> logger)
    {
        _logger = logger;
    }

    [HttpGet]
    public ActionResult<IEnumerable<string>> Get()
    {
        //Info level traces are not captured by default
        _logger.LogInformation("An example of an Info trace..");
        _logger.LogWarning("An example of a Warning trace..");
        _logger.LogError("An example of an Error level message");

        return new string[] { "value1", "value2" };
    }
}

詳細については、ASP.NET Core のログ記録に関する記事をご覧ください。

Application Insights のログの表示

上記の ValuesController はサンプル アプリケーションと共にデプロイされ、プロジェクトの Controllers フォルダーにあります。

  1. インターネット ブラウザーを使用して、サンプル アプリケーションを開きます。 アドレス バーで、/api/Values を追加して Enter キーを押します。

    /api/Values がアドレス バーの URL に追加されているブラウザー ウィンドウのスクリーンショット。

  2. Azure portal でしばらく待ってから、azure-cafe-insights-{SUFFIX} Application Insights リソースを選択します。

    Azure portal の application-insights-azure-cafe リソース グループのスクリーンショット。Application Insights リソースが強調表示されています。

  3. Application Insights リソースの左側のメニューで、[監視] セクションの下から [ログ] を選択します。

  4. [テーブル] ペインで、[Application Insights] ツリーの下にある[トレース] テーブルをダブルクリックします。

  5. Values コントローラーのトレースを取得するクエリを次のように変更して、[実行] を選択して結果をフィルター処理します。

    traces 
    | where operation_Name == "GET Values/Get"
    

    コントローラーに存在するログ メッセージが結果に表示されます。 ログ重大度 2 は警告レベルを示し、ログ重大度 3 はエラー レベルを示します。

  6. あるいは、クエリを書き込んで、ログのカテゴリに基づいて結果を取得することもできます。 既定では、カテゴリは ILogger が挿入されるクラスの完全修飾名です。 この場合、カテゴリ名は ValuesController です (クラスに関連付けられている名前空間がある場合、名前に名前空間のプレフィックスが付きます)。 次のクエリを書き直して実行して、結果をカテゴリに基づいて取得します。

    traces 
    | where customDimensions.CategoryName == "ValuesController"
    

Application Insights に送信されるログのレベルを制御する

ILogger の実装には、ログのフィルタリングを適用するための組み込みメカニズムがあります。 このフィルタリングにより、Application Insights プロバイダーなどの、各登録済みプロバイダーに送信されるログを制御できます。 フィルター処理は、構成 (appsettings.json ファイルを使用) またはコードで使用できます。 ログ レベルと適切な使用方法に関するガイダンスの詳細については、ログ レベルのドキュメントを参照してください。

次の例では、ApplicationInsightsLoggerProvider にフィルター ルールを適用して Application Insights に送信されるログのレベルを制御する方法を示します。

構成を持つフィルター ルールを作成する

ApplicationInsightsLoggerProvider は、構成でエイリアスが ApplicationInsights です。 appsettings.json ファイルの次のセクションでは、すべてのプロバイダーの既定のログ レベルが LogLevel.Warning に設定されます。 特に "ValuesController" で始まるカテゴリの ApplicationInsights プロバイダーの構成は、この既定値を LogLevel.Error 以上でオーバーライドします。

{
  //... additional code removed for brevity
  "Logging": {
    "LogLevel": { // No provider, LogLevel applies to all the enabled providers.
      "Default": "Warning"
    },
    "ApplicationInsights": { // Specific to the provider, LogLevel applies to the Application Insights provider.
      "LogLevel": {
        "ValuesController": "Error" //Log Level for the "ValuesController" category
      }
    }
  }
}

appsettings.json で上記のコードを使用してサンプル アプリケーションをデプロイすると、ValuesController を操作するときにエラー トレースのみが Application Insights に送信されます。 この理由は、ValuesController カテゴリの LogLevelError に設定されているからです。 したがって、Warning トレースは抑制されます。

Application Insights へのログ記録をオフにする

構成を使用してログ記録を無効にするには、すべての LogLevel 値を "None" に設定します。

{
  //... additional code removed for brevity
  "Logging": {
    "LogLevel": { // No provider, LogLevel applies to all the enabled providers.
      "Default": "None"
    },
    "ApplicationInsights": { // Specific to the provider, LogLevel applies to the Application Insights provider.
      "LogLevel": {
        "ValuesController": "None" //Log Level for the "ValuesController" category
      }
    }
  }
}

同様に、コード内で、ApplicationInsightsLoggerProvider の既定のレベルとそれ以降のログ レベルを None に設定します。

var builder = WebApplication.CreateBuilder(args);
builder.Logging.AddFilter<ApplicationInsightsLoggerProvider>("", LogLevel.None);
builder.Logging.AddFilter<Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider>("ValuesController", LogLevel.None);

オープンソース SDK

最新の更新プログラムとバグ修正については、リリース ノートを参照してください。

次のステップ