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 アプリケーションに適用できます。
ワーカー サービスを使っている場合は、こちらの手順を使用してください。
Note
OpenTelemetry ベースの .NET オファリングを利用できます。 詳細については、こちらを参照してください。
注意
インストルメンテーション キーのインジェストのサポートは、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 文字のサフィックスが一部のリソースに割り当てられています。 このサフィックスは、この記事の後半で使用するので書き留めておいてください。
Application Insights リソースの作成
Azure portal で、application-insights-azure-cafe リソース グループを選択します。
上のツールバー メニューから、[+ 作成] を選択します。
[リソースの作成] 画面で、Application Insights を マーケットプレースの検索テキスト ボックスで検索して選択します。
Application Insights リソースの概要画面で、[作成] を選択します。
Application Insights 画面の [基本] タブ次の表を使用してフォームに入力して、[確認と作成] ボタンを選択します。 下の表で指定されていないフィールドは、既定値を保持できます。
フィールド 値 名前 azure-cafe-application-insights-{SUFFIX}
に入力し、{SUFFIX} を以前に記録した適切なサフィックス値に置き換えます。リージョン 記事のリソースをデプロイしたときに選択したのと同じリージョンを選択します。 Log Analytics ワークスペース azure-cafe-log-analytics-workspace を選択します。 または、新しいログ分析のワークスペースを作成することもできます。 検証に合格したら、[作成] を選択してリソースをデプロイします。
リソースがデプロイされたら
application-insights-azure-cafe
リソース グループに戻り、デプロイした Application Insights リソースを選択します。Application Insights リソースの [概要] 画面で、[クリップボードにコピー] ボタンを選択して接続文字列の値をコピーします。 この記事の次のセクションでは、接続文字列の値を使用します。
Web App Service で Application Insights 接続文字列アプリケーション設定を構成する
application-insights-azure-cafe
リソース グループに戻り、azure-cafe-web-{SUFFIX} App Service リソースを開きます。左側のメニューの [設定] セクションで、[構成] を選択します。 [アプリケーション設定] タブで、アプリケーション設定ヘッダーの下の [+ 新しいアプリケーション設定] を選択します。
[アプリケーション設定の追加/編集] ペインで、フォームに次のように入力して、[OK] を選びます。
フィールド 値 名前 APPLICATIONINSIGHTS_CONNECTION_STRING 値 前のセクションでコピーした Application Insights 接続文字列の値を貼り付けます。 [App Service 構成] 画面で、ツール バー メニューから [保存] ボタンを選択します。 変更を保存するように求められたら、[続行] を選択します。
Application Insights NuGet パッケージをインストールする
ASP.NET Core MVC Web アプリケーションを、テレメトリを送信するように構成する必要があります。 これを行うためには、Application Insights for ASP.NET Core Web アプリケーション NuGet パッケージを使用します。
Visual Studio で
1 - Starter Application\src\AzureCafe.sln
を開きます。Visual Studio ソリューション エクスプローラー パネルで、AzureCafe プロジェクトを右クリックして、[NuGet パッケージの管理] を選択します。
[参照] タブを選択して Microsoft.ApplicationInsights.AspNetCore を検索して選択します。 [インストール] を選択して、ライセンス条件に同意します。 最新の安定したバージョンを使用することをお勧めします。 SDK の完全なリリース ノートについては、オープンソースの GitHub リポジトリを参照してください。
この記事の次のセクションのために Visual Studio を開いたままにしておきます。
Application Insights のサーバー側テレメトリを有効にする
Application Insights for ASP.NET Core Web アプリケーション NuGet パッケージは、Azure の Application Insights リソースへのサーバー側テレメトリを送信できるようにするための機能をカプセル化します。
Visual Studio ソリューション エクスプローラーで、Program.cs ファイルを開きます。
次のコードを
builder.Services.AddControllersWithViews()
ステートメントの前に挿入します。 このコードは、Application Insights 接続文字列の値を構成から自動的に読み取ります。AddApplicationInsightsTelemetry
メソッドがApplicationInsightsLoggerProvider
を組み込みの依存関係挿入コンテナーに登録すると、これが ILogger および ILogger<TCategoryName> の実装要求を満たすために使用されます。builder.Services.AddApplicationInsightsTelemetry();
ヒント
詳しくは、ASP.NET Core の構成オプションに関するページを参照してください。
Web アプリケーションに対してクライアント側のテレメトリを有効にする
サーバー側テレメトリの収集を始めるためなら、上記の手順で十分です。 サンプル アプリケーションには、クライアント側のコンポーネントがあります。 次の手順に従って、使用状況テレメトリの収集を始めます。
Visual Studio ソリューション エクスプローラーで
\Views\_ViewImports.cshtml
を開きます。次のコードを既存のファイルの末尾に追加します。
@inject Microsoft.ApplicationInsights.AspNetCore.JavaScriptSnippet JavaScriptSnippet
アプリケーションに対するクライアント側の監視を正しく有効にするには、Visual Studio ソリューション エクスプローラーで、
\Views\Shared\_Layout.cshtml
を開き、<\head>
タグを閉じる直前に次のコード挿入します。 この JavaScript スニペットが、監視するアプリケーションの各ページの<head>
セクションに挿入されている必要があります。@Html.Raw(JavaScriptSnippet.FullScript)
ヒント
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 などの機密データが含まれている場合があります。 この機能を有効にするときは注意してください。
Visual Studio ソリューション エクスプローラーで、Program.cs ファイルを開きます。
ファイルの先頭に、次の
using
ステートメントを追加します。using Microsoft.ApplicationInsights.DependencyCollector;
SQL コマンド テキストインストルメンテーションを有効にするには、
builder.Services.AddApplicationInsightsTelemetry()
コードの直後に次のコードを挿入します。builder.Services.ConfigureTelemetryModule<DependencyTrackingTelemetryModule>((module, o) => { module.EnableSqlCommandTextInstrumentation = true; });
Azure Cafe Web アプリケーションを実行する
Web アプリケーション コードをデプロイすると、テレメトリが Application Insights へ流れます。 Application Insights SDK によって、アプリケーションへの受信 Web 要求が自動的に収集されます。
Visual Studio ソリューション エクスプローラーの AzureCafe プロジェクトを右クリックし、コンテキスト メニューから [発行] を選択します。
[公開] を選択して、新しいコードを Azure App Service に昇格します。
Azure Cafe Web アプリケーションが正常に公開されると、新しいブラウザー ウィンドウが開いて Azure Cafe Web アプリケーションが表示されます。
テレメトリを生成するために、Web アプリケーションで次の手順に従ってレビューを追加します。
Live metrics
Live Metrics を使用すると、Application Insights の監視が正しく構成されているかどうかをすばやく確認できます。 Live Metrics では、実行中のプロセスの CPU 使用率がほぼリアルタイムで示されます。 また、要求、依存関係、トレースなどの他のテレメトリも表示できます。 テレメトリがポータルと分析に表示されるまで数分かかる場合があることに注意してください。
アプリケーション マップの表示
サンプル アプリケーションでは、Azure SQL、Azure Blob Storage、Azure 言語サービスなど複数の Azure リソースを呼び出します (レビュー感情分析のため)。
Application Insights は受信テレメトリ データをイントロスペクトするものであり、検出されたシステム統合のビジュアル マップを生成することができます。
Azure portal にサインインします。
サンプル アプリケーションのリソース グループ (
application-insights-azure-cafe
) を開きます。リソースの一覧から、
azure-cafe-insights-{SUFFIX}
Application Insights リソースを選択します。左側のメニューの [調査] 見出しの下にある [アプリケーション マップ] を選択します。 生成されたアプリケーション マップを確認します。
HTTP 呼び出しとデータベース SQL コマンド テキストを表示する
Azure portal で Application Insights のリソースを開きます。
左側のメニューの [調査] ヘッダーの下にある [パフォーマンス] を選択します。
[操作] タブには、アプリケーションが受信した HTTP 呼び出しの詳細が表示されます。 データのサーバー ビューとブラウザー (クライアント側) ビューを切り替えるには、[サーバー] と [ブラウザー] の切り替えを使用します。
テーブルから操作を選択して、要求のサンプルへのドリル インを選択します。
選択した要求のエンド ツー エンド トランザクションが表示されます。 この場合、レビューがイメージを含めて作成されたため、Azure Storage と言語サービス (感情分析のため)の呼び出しが含まれます。 また、レビューを永続化するための SQL Azure へのデータベース呼び出しも含まれます。 この例では、最初に選択したイベントに、HTTP POST 呼び出しに関連する情報が表示されます。
SQL 項目を選択して、データベースに発行された SQL コマンド テキストを確認します。
必要に応じて、Azure Storage または Language Service への依存関係 (送信) 要求を選択します。
[パフォーマンス] 画面に戻り、[依存関係] タブを選択して外部リソースへの呼び出しを調査します。 操作テーブルには、感情分析、BLOB ストレージ、およびAzure SQL の呼び出しが含ま れています。
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 フォルダーにあります。
インターネット ブラウザーを使用して、サンプル アプリケーションを開きます。 アドレス バーで、
/api/Values
を追加して Enter キーを押します。Azure portal でしばらく待ってから、azure-cafe-insights-{SUFFIX} Application Insights リソースを選択します。
Application Insights リソースの左側のメニューで、[監視] セクションの下から [ログ] を選択します。
[テーブル] ペインで、[Application Insights] ツリーの下にある[トレース] テーブルをダブルクリックします。
Values コントローラーのトレースを取得するクエリを次のように変更して、[実行] を選択して結果をフィルター処理します。
traces | where operation_Name == "GET Values/Get"
コントローラーに存在するログ メッセージが結果に表示されます。 ログ重大度 2 は警告レベルを示し、ログ重大度 3 はエラー レベルを示します。
あるいは、クエリを書き込んで、ログのカテゴリに基づいて結果を取得することもできます。 既定では、カテゴリは 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 カテゴリの LogLevel が Error に設定されているからです。 したがって、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
最新の更新プログラムとバグ修正については、リリース ノートを参照してください。
次のステップ
- ユーザー フローの探索: ユーザーがアプリ内をどのように移動しているかを把握します。
- スナップショット コレクションを構成して、例外がスローされたときのソース コードと変数の状態を確認します。
- API を使用して、アプリのパフォーマンスと使用の詳細を表示するための独自のイベントとメトリックスを送信します。
- 可用性の概要
- ASP.NET Core での依存関係の挿入
- ASP.NET Core でのログ記録
- Application Insights での .NET トレース ログ
- Application Insights の自動インストルメンテーション