Application Insights for ASP.NET Core アプリケーション
この記事では、ASP.NET Core アプリケーションで Application Insights を有効にして構成する方法について説明します。
注意事項
Azure Monitor Application Insights を利用する新規のアプリケーションやお客様には、Azure Monitor OpenTelemetry Distro をお勧めします。 Azure Monitor OpenTelemetry Distro には、Application Insights SDK と同様の機能とエクスペリエンスが備わっています。 .NET、Node.js、Python 用の移行ガイドを使用して Application Insights SDK から移行することはできますが、下位互換性を確保するためのいくつかの機能の追加の取り組みが行われている最中です。
Application Insights では、ASP.NET Core アプリケーションから次のテレメトリを収集できます。
- Requests
- 依存関係
- 例外
- パフォーマンス カウンター
- ハートビート
- ログ
MVC アプリケーションの例を使います。 Worker サービスを使用している場合は、ワーカー サービス アプリケーション向け Application Insights に関する手順を使用します。
OpenTelemetry ベースの .NET オファリングを利用できます。 詳細については、「OpenTelemetry の概要」を参照してください。
注意
インストルメンテーション キーのインジェストのサポートは、2025 年 3 月 31 日に終了します。 インストルメンテーション キーのインジェストは引き続き機能しますが、この機能の更新プログラムやサポートは提供されなくなります。 接続文字列に移行することで、新機能をご利用いただけます。
Note
スタンドアロン ILogger プロバイダーを使用する場合は、Microsoft.Extensions.Logging.ApplicationInsight を使用します。
サポートされるシナリオ
Application Insights SDK for ASP.NET Core では、実行されている場所や方法に関係なく、アプリケーションを監視できます。 アプリケーションが実行されていて、Azure へのネットワーク接続がある場合は、テレメトリを収集することができます。 Application Insights の監視は、.NET Core がサポートされているすべての場所でサポートされ、次のシナリオを対象としています。
- オペレーティング システム: Windows、Linux、Mac
- ホスティング方法: プロセス内、プロセス外
- デプロイ方法: フレームワーク依存、自己完結型
- Web サーバー: インターネット インフォメーション サーバー (IIS)、Kestrel
- ホスティング プラットフォーム: Azure App Service、Azure Virtual Machines、Docker、Azure Kubernetes Service (AKS) の Web Apps 機能
- .NET バージョン: プレビューではない、正式にサポートされているすべての .NET バージョン
- IDE: Visual Studio、Visual Studio Code、コマンド ライン
前提条件
- 機能している ASP.NET Core アプリケーション。 ASP.NET Core アプリケーションを作成する必要がある場合は、こちらの ASP.NET Core チュートリアルに従ってください。
- Application Insights NuGet パッケージのサポートされているバージョンへの参照。
- Application Insights の有効な接続文字列。 Application Insights にテレメトリを送信するには、この文字列が必要です。 接続文字列を取得するために新しい Application Insights リソースを作成する必要がある場合は、「Application Insights リソースの作成」をご覧ください。
Application Insights のサーバー側テレメトリを有効にする (Visual Studio)
Visual Studio for Mac の場合は、手動のガイダンスを使用します。 この手順は、Visual Studio の Windows バージョンでのみサポートされています。
Visual Studio でプロジェクトを開きます。
[プロジェクト]>[Application Insights Telemetry の追加] に移動します。
[Azure Application Insights]>[次へ] を選択します。
サブスクリプションと Application Insights インスタンスを選択します。 または、[新規作成] を使用して新しいインスタンスを作成することもできます。 [次へ] を選択します。
Application Insights の接続文字列を追加または確認します。 これは、前の手順で選択した内容に基づいてあらかじめ設定されているはずです。 [完了] を選びます。
Application Insights をプロジェクトに追加した後、SDK の最新の安定リリースを使用していることを確認します。 [プロジェクト]>[NuGet パッケージの管理]>[Microsoft.ApplicationInsights.AspNetCore] に移動します。 必要であれば、[更新] を選択します。
Application Insights のサーバー側テレメトリを有効にする (Visual Studio なし)
ASP.NET Core 用の Application Insights SDK NuGet パッケージをインストールします。
常に最新の安定バージョンを使用することをお勧めします。 オープンソースの GitHub リポジトリで、SDK の完全なリリース ノートを探します。
次のコード サンプルは、プロジェクトの .csproj ファイルに追加する変更を示しています。
<ItemGroup> <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.21.0" /> </ItemGroup>
AddApplicationInsightsTelemetry()
を program.cs クラスに追加します。この例のように、
WebApplication.CreateBuilder()
メソッドの後にbuilder.Services.AddApplicationInsightsTelemetry();
を追加します。// This method gets called by the runtime. Use this method to add services to the container. var builder = WebApplication.CreateBuilder(args); // The following line enables Application Insights telemetry collection. builder.Services.AddApplicationInsightsTelemetry(); // This code adds other services for your application. builder.Services.AddMvc(); var app = builder.Build();
接続文字列を追加します。このためには、次の 3 つの方法があります。
(推奨) 構成に接続文字列を設定します。
appsettings.json に接続文字列を設定し、発行時に構成ファイルがアプリケーションのルート フォルダーにコピーされるようにします。
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*", "ApplicationInsights": { "ConnectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000" } }
APPLICATIONINSIGHTS_CONNECTION_STRING
環境変数に、または JSON 構成ファイルのApplicationInsights:ConnectionString
に接続文字列を設定します。次に例を示します。
SET ApplicationInsights:ConnectionString = <Copy connection string from Application Insights Resource Overview>
SET APPLICATIONINSIGHTS_CONNECTION_STRING = <Copy connection string from Application Insights Resource Overview>
- 通常、
APPLICATIONINSIGHTS_CONNECTION_STRING
は Web Apps で使用されます。 また、この SDK がサポートされているすべての場所でも使用できます。
注意
コードで指定された接続文字列は、他のオプションより優先される環境変数
APPLICATIONINSIGHTS_CONNECTION_STRING
より優先されます。コードに接続文字列を設定します。
接続文字列を、program.cs クラスの
AddApplicationInsightsTelemetry
にApplicationInsightsServiceOptions
引数の一部として指定します。
ユーザー シークレットとその他の構成プロバイダー
接続文字列を ASP.NET Core ユーザー シークレットに格納するか、別の構成プロバイダーから取得する場合は、Microsoft.Extensions.Configuration.IConfiguration
パラメーターでオーバーロードを使用できます。 パラメーターの例は services.AddApplicationInsightsTelemetry(Configuration);
です。
Microsoft.ApplicationInsights.AspNetCore
バージョン 2.15.0 以降では、services.AddApplicationInsightsTelemetry()
の呼び出しによって、アプリケーションの Microsoft.Extensions.Configuration.IConfiguration
から接続文字列が自動的に読み取られます。 IConfiguration
を明示的に指定する必要はありません。
IConfiguration
で複数のプロバイダーから構成を読み込んだ場合、services.AddApplicationInsightsTelemetry
では、プロバイダーが追加された順序に関係なく、appsettings.json の構成が優先されます。 services.AddApplicationInsightsTelemetry(IConfiguration)
メソッドを使用して、appsettings.json の優先処理なしで IConfiguration
から構成を読み取ります。
アプリケーションを実行する
アプリケーションを実行し、それに対して要求を行います。 これで Application Insights にテレメトリが送られるはずです。 Application Insights SDK によって、次のテレメトリと共に、アプリケーションへの受信 Web 要求が自動的に収集されます。
ライブ メトリック
Live Metrics を使用すると、Application Insights を使用したアプリケーションの監視が正しく構成されているかどうかをすばやく確認できます。 テレメトリが Azure portal 内に表示されるまで数分かかることがありますが、[ライブ メトリック] ペインには、実行中のプロセスの CPU 使用率がほぼリアルタイムで表示されます。 また、要求、依存関係、トレースなどの他のテレメトリも表示できます。
任意の .NET アプリケーションのコードを使用して Live Metrics を有効にする
Note
.NET アプリケーションの推奨される手順に従ってオンボードした場合、Live Metrics は既定で有効になります。
Live Metrics を手動で構成するには:
NuGet パッケージ Microsoft.ApplicationInsights.PerfCounterCollector をインストールします。
次のサンプル コンソール アプリ コードは、Live Metrics の設定方法を示しています。
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse;
// Create a TelemetryConfiguration instance.
TelemetryConfiguration config = TelemetryConfiguration.CreateDefault();
config.ConnectionString = "InstrumentationKey=00000000-0000-0000-0000-000000000000";
QuickPulseTelemetryProcessor quickPulseProcessor = null;
config.DefaultTelemetrySink.TelemetryProcessorChainBuilder
.Use((next) =>
{
quickPulseProcessor = new QuickPulseTelemetryProcessor(next);
return quickPulseProcessor;
})
.Build();
var quickPulseModule = new QuickPulseTelemetryModule();
// Secure the control channel.
// This is optional, but recommended.
quickPulseModule.AuthenticationApiKey = "YOUR-API-KEY-HERE";
quickPulseModule.Initialize(config);
quickPulseModule.RegisterTelemetryProcessor(quickPulseProcessor);
// Create a TelemetryClient instance. It is important
// to use the same TelemetryConfiguration here as the one
// used to set up live metrics.
TelemetryClient client = new TelemetryClient(config);
// This sample runs indefinitely. Replace with actual application logic.
while (true)
{
// Send dependency and request telemetry.
// These will be shown in live metrics.
// CPU/Memory Performance counter is also shown
// automatically without any additional steps.
client.TrackDependency("My dependency", "target", "http://sample",
DateTimeOffset.Now, TimeSpan.FromMilliseconds(300), true);
client.TrackRequest("My Request", DateTimeOffset.Now,
TimeSpan.FromMilliseconds(230), "200", true);
Task.Delay(1000).Wait();
}
上記のサンプルはコンソール アプリ用ですが、あらゆる .NET アプリケーションで同じコードを使用できます。 他のテレメトリ モジュールでテレメトリの自動収集が有効な場合は、それらのモジュールの初期化に使用されるのと同じ構成が、その Live Metrics モジュールに使用されるようにすることが重要です。
ILogger ログ
既定の構成では、ILogger
Warning
ログ以上の重大度のログが収集されます。 詳細については、「ILogger logs コレクションをカスタマイズする方法」を参照してください。
依存関係
依存関係の収集は既定で有効になっています。 「Application Insights での依存関係の追跡」では、自動収集される依存関係について説明されており、手動で追跡するための手順も示されています。
パフォーマンス カウンター
ASP.NET Core でのパフォーマンス カウンターのサポートは制限されています。
- SDK バージョン 2.4.1 以降では、アプリケーションが Web Apps (Windows) で実行されている場合、パフォーマンス カウンターが収集されます。
- SDK バージョン 2.7.1 以降では、アプリケーションが Windows で実行されていて、
netstandard2.0
以降を対象とする場合、パフォーマンス カウンターが収集されます。 - .NET Framework を対象とするアプリケーションの場合、すべてのバージョンの SDK でパフォーマンス カウンターがサポートされます。
- SDK バージョン 2.8.0 以降では、Linux の CPU/メモリ カウンターがサポートされます。 Linux では、その他のカウンターはサポートされません。 Linux (およびその他の非 Windows 環境) でシステム カウンターを取得するには、EventCounters を使用してください。
EventCounter
既定では、EventCounterCollectionModule
は有効になっています。 収集されるカウンターの一覧を構成する方法については、「EventCounter の概要」を参照してください。
HTTP を使用してデータを強化する
HttpContext.Features.Get<RequestTelemetry>().Properties["myProp"] = someData
Web アプリケーションに対してクライアント側のテレメトリを有効にする
サーバー側テレメトリの収集を始めるためなら、上記の手順で十分です。 アプリケーションにクライアント側コンポーネントがある場合は、次の手順に従って、構成による JavaScript (Web) SDK ローダー スクリプトの挿入を使用して使用状況テレメトリの収集を開始します。
_ViewImports.cshtml で、次のインジェクションを追加します。
@inject Microsoft.ApplicationInsights.AspNetCore.JavaScriptSnippet JavaScriptSnippet
_Layout.cshtml で、
<head>
セクションの終わりに (ただし、他のスクリプトの前に)HtmlHelper
を挿入します。 ページからカスタム JavaScript テレメトリを報告する場合は、このスニペットの後に挿入します。@Html.Raw(JavaScriptSnippet.FullScript) </head>
Application Insights SDK for ASP.NET Core バージョン 2.14 以降では、FullScript
を使用する代わりに、ScriptBody
を使用できます。 コンテンツ セキュリティ ポリシーを設定するために <script>
タグをコントロールする必要がある場合は、ScriptBody
を使用します。
<script> // apply custom changes to this script tag.
@Html.Raw(JavaScriptSnippet.ScriptBody)
</script>
上で参照されている .cshtml ファイル名は、既定の MVC アプリケーション テンプレートからのものです。 最終的に、アプリケーションに対するクライアント側の監視を正しく有効にするためには、JavaScript (Web) SDK ローダー スクリプトが、監視するアプリケーションの各ページの <head>
セクションにある必要があります。 クライアント側の監視を有効にするために、アプリケーション テンプレートの _Layout.cshtml に JavaScript (Web) SDK ローダー スクリプトを追加します。
プロジェクトに _Layout.cshtml が含まれていない場合でも、アプリ内のすべてのページの <head>
を制御する同等のファイルに JavaScript (Web) SDK ローダー スクリプトを追加することで、クライアント側の監視を追加できます。 または、複数のページに JavaScript (Web) SDK ローダー スクリプトを追加することもできますが、お勧めしません。
Note
JavaScript の挿入により、既定の構成のエクスペリエンスが提供されます。 接続文字列の設定以外の構成が必要な場合は、説明のとおり自動挿入を削除し、JavaScript SDK を手動で追加する必要があります。
Application Insights SDK を構成する
Application Insights SDK for ASP.NET Core をカスタマイズして、既定の構成を変更できます。 Application Insights ASP.NET SDK のユーザーであれば、ApplicationInsights.config を使用するか、TelemetryConfiguration.Active
を変更することによって、構成を変更することに慣れている場合もあります。 ASP.NET Core の場合、他の方法が指定されていない限り、ほとんどすべての構成の変更は、Startup.cs クラスの ConfigureServices()
メソッドで行います。 以下のセクションではさらに詳しく説明します。
Note
ASP.NET Core アプリケーションでは、TelemetryConfiguration.Active
を変更することによる構成の変更はサポートされていません。
ApplicationInsightsServiceOptions を使用する
次の例のように ApplicationInsightsServiceOptions
を AddApplicationInsightsTelemetry
に渡すことで、いくつかの一般的な設定を変更できます。
var builder = WebApplication.CreateBuilder(args);
var aiOptions = new Microsoft.ApplicationInsights.AspNetCore.Extensions.ApplicationInsightsServiceOptions();
// Disables adaptive sampling.
aiOptions.EnableAdaptiveSampling = false;
// Disables live metrics (also known as QuickPulse).
aiOptions.EnableQuickPulseMetricStream = false;
builder.Services.AddApplicationInsightsTelemetry(aiOptions);
var app = builder.Build();
次の表は、ApplicationInsightsServiceOptions
の設定の完全な一覧です。
設定 | 説明 | Default |
---|---|---|
EnablePerformanceCounterCollectionModule | PerformanceCounterCollectionModule を有効または無効にします。 |
True |
EnableRequestTrackingTelemetryModule | RequestTrackingTelemetryModule を有効または無効にします。 |
True |
EnableEventCounterCollectionModule | EventCounterCollectionModule を有効または無効にします。 |
True |
EnableDependencyTrackingTelemetryModule | DependencyTrackingTelemetryModule を有効または無効にします。 |
True |
EnableAppServicesHeartbeatTelemetryModule | AppServicesHeartbeatTelemetryModule を有効または無効にします。 |
True |
EnableAzureInstanceMetadataTelemetryModule | AzureInstanceMetadataTelemetryModule を有効または無効にします。 |
True |
EnableQuickPulseMetricStream | LiveMetrics 機能を有効または無効にします。 | 正 |
EnableAdaptiveSampling | アダプティブ サンプリングを有効または無効にします。 | 正 |
EnableHeartbeat | ハートビート機能を有効または無効にします。 この機能は、HeartbeatState という名前のカスタム メトリックを、.NET バージョンや Azure 環境情報 (該当する場合) などのランタイムに関する情報と共に定期的に (既定では 15 分) 送信します。 |
正 |
AddAutoCollectedMetricExtractor | AutoCollectedMetrics extractor を有効または無効にします。 このテレメトリ プロセッサにより、サンプリングが行われる前に、要求または依存関係に関する事前に集計されたメトリックが送信されます。 |
True |
RequestCollectionOptions.TrackExceptions | 要求収集モジュールによる未処理の例外の追跡についてのレポートを有効または無効にします。 | netstandard2.0 では False (例外は ApplicationInsightsLoggerProvider で追跡されるため)。 それ以外の場合は True。 |
EnableDiagnosticsTelemetryModule | DiagnosticsTelemetryModule を有効または無効にします。 無効にすると、設定 EnableHeartbeat 、EnableAzureInstanceMetadataTelemetryModule 、EnableAppServicesHeartbeatTelemetryModule は無視されます。 |
True |
最新の一覧については、ApplicationInsightsServiceOptions
での構成可能な設定に関するページを参照してください。
Microsoft.ApplicationInsights.AspNetCore SDK 2.15.0 以降の構成に関する推奨事項
Microsoft.ApplicationInsights.AspNetCore SDK バージョン 2.15.0 以降では、ApplicationInsightsServiceOptions
で使用できるすべての設定 (ConnectionString
を含む) を構成します。 アプリケーションの IConfiguration
インスタンスを使用します。 次の例に示すように、設定は ApplicationInsights
セクションの下に記載されている必要があります。 appsettings.json の次のセクションによって、接続文字列が構成され、アダプティブ サンプリングとパフォーマンス カウンターの収集が無効にされます。
{
"ApplicationInsights": {
"ConnectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"EnableAdaptiveSampling": false,
"EnablePerformanceCounterCollectionModule": false
}
}
ASP.NET Core 6.0 の builder.Services.AddApplicationInsightsTelemetry(aiOptions)
または ASP.NET Core 3.1 以前の services.AddApplicationInsightsTelemetry(aiOptions)
を使った場合、Microsoft.Extensions.Configuration.IConfiguration
からの設定をオーバーライドします。
サンプリング
Application Insights SDK for ASP.NET Core では、固定レートとアダプティブ サンプリングの両方がサポートされています。 既定では、アダプティブ サンプリングは有効になっています。
詳しくは、「ASP.NET Core アプリケーションのためのアダプティブ サンプリングの構成」をご覧ください。
TelemetryInitializers を追加する
追加の情報でテレメトリをエンリッチする必要がある場合は、テレメトリ初期化子を使用します。
次のコードで示すように、新しい TelemetryInitializer
を DependencyInjection
コンテナーに追加します。 DependencyInjection
コンテナーに追加した TelemetryInitializer
は、SDK によって自動的に取得されます。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>();
var app = builder.Build();
Note
builder.Services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>();
は単純な初期化子に対して機能します。 その他の場合は、builder.Services.AddSingleton(new MyCustomTelemetryInitializer() { fieldName = "myfieldName" });
が必要です。
TelemetryInitializers を削除する
既定では、テレメトリ初期化子は存在します。 すべてまたは特定のテレメトリ初期化子を削除するには、AddApplicationInsightsTelemetry()
を呼び出した "後" で、次のサンプル コードを使用します。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddApplicationInsightsTelemetry();
// Remove a specific built-in telemetry initializer
var tiToRemove = builder.Services.FirstOrDefault<ServiceDescriptor>
(t => t.ImplementationType == typeof(AspNetCoreEnvironmentTelemetryInitializer));
if (tiToRemove != null)
{
builder.Services.Remove(tiToRemove);
}
// Remove all initializers
// This requires importing namespace by using Microsoft.Extensions.DependencyInjection.Extensions;
builder.Services.RemoveAll(typeof(ITelemetryInitializer));
var app = builder.Build();
テレメトリ プロセッサを追加する
拡張メソッド AddApplicationInsightsTelemetryProcessor
を IServiceCollection
で使用することで、カスタム テレメトリ プロセッサを TelemetryConfiguration
に追加できます。 テレメトリ プロセッサは、高度なフィルター処理のシナリオで使用します。 次の例を使用してください。
var builder = WebApplication.CreateBuilder(args);
// ...
builder.Services.AddApplicationInsightsTelemetry();
builder.Services.AddApplicationInsightsTelemetryProcessor<MyFirstCustomTelemetryProcessor>();
// If you have more processors:
builder.Services.AddApplicationInsightsTelemetryProcessor<MySecondCustomTelemetryProcessor>();
var app = builder.Build();
既定の TelemetryModules を構成または削除する
Application Insights では、ユーザーによる手動の追跡を必要とせずに特定のワークロードに関するテレメトリが自動収集されます。
既定では、次の自動収集モジュールが有効になります。 これらのモジュールでは、自動的にテレメトリが収集されます。 それらを無効にするか構成して、既定の動作を変更できます。
RequestTrackingTelemetryModule
: 受信 Web 要求から RequestTelemetry を収集します。DependencyTrackingTelemetryModule
: 送信 HTTP 呼び出しと SQL 呼び出しから DependencyTelemetry を収集します。PerformanceCollectorModule
: Windows PerformanceCounters を収集します。QuickPulseTelemetryModule
: [ライブ メトリック] ペイン内に表示するテレメトリを収集します。AppServicesHeartbeatTelemetryModule
: アプリケーションがホストされる App Service 環境について、(カスタム メトリックとして送信される) ハート ビートを収集します。AzureInstanceMetadataTelemetryModule
: アプリケーションがホストされる Azure VM 環境について、(カスタム メトリックとして送信される) ハート ビートを収集します。EventCounterCollectionModule
: EventCounters を収集します。 このモジュールは新機能であり、SDK バージョン 2.8.0 以降で使用できます。
既定の TelemetryModule
を構成するには、次の例のように、拡張メソッド ConfigureTelemetryModule<T>
を IServiceCollection
で使用します。
using Microsoft.ApplicationInsights.DependencyCollector;
using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddApplicationInsightsTelemetry();
// The following configures DependencyTrackingTelemetryModule.
// Similarly, any other default modules can be configured.
builder.Services.ConfigureTelemetryModule<DependencyTrackingTelemetryModule>((module, o) =>
{
module.EnableW3CHeadersInjection = true;
});
// The following removes all default counters from EventCounterCollectionModule, and adds a single one.
builder.Services.ConfigureTelemetryModule<EventCounterCollectionModule>((module, o) =>
{
module.Counters.Add(new EventCounterCollectionRequest("System.Runtime", "gen-0-size"));
});
// The following removes PerformanceCollectorModule to disable perf-counter collection.
// Similarly, any other default modules can be removed.
var performanceCounterService = builder.Services.FirstOrDefault<ServiceDescriptor>(t => t.ImplementationType == typeof(PerformanceCollectorModule));
if (performanceCounterService != null)
{
builder.Services.Remove(performanceCounterService);
}
var app = builder.Build();
バージョン 2.12.2 以降では、ApplicationInsightsServiceOptions
には、任意の既定のモジュールを無効にする簡単なオプションが含まれています。
テレメトリ チャネルの構成
既定のテレメトリ チャネルは ServerTelemetryChannel
です。 次の例は、それをオーバーライドする方法を示したものです。
using Microsoft.ApplicationInsights.Channel;
var builder = WebApplication.CreateBuilder(args);
// Use the following to replace the default channel with InMemoryChannel.
// This can also be applied to ServerTelemetryChannel.
builder.Services.AddSingleton(typeof(ITelemetryChannel), new InMemoryChannel() {MaxTelemetryBufferCapacity = 19898 });
builder.Services.AddApplicationInsightsTelemetry();
var app = builder.Build();
Note
バッファーをフラッシュする場合は、「データのフラッシュ」を参照してください。 たとえば、終了するアプリケーションで SDK を使用する場合、バッファーのフラッシュが必要になることがあります。
テレメトリを動的に無効にする
テレメトリを条件付きで動的に無効にする必要がある場合は、コードの任意の場所で ASP.NET Core の依存関係挿入コンテナーを使用して TelemetryConfiguration
インスタンスを解決し、それに DisableTelemetry
フラグを設定することができます。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddApplicationInsightsTelemetry();
// any custom configuration can be done here:
builder.Services.Configure<TelemetryConfiguration>(x => x.DisableTelemetry = true);
var app = builder.Build();
前のコード サンプルでは、Application Insights にテレメトリが送信されなくなります。 これにより、自動収集モジュールでテレメトリが収集されなくなることはありません。 特定の自動収集モジュールを削除する場合は、テレメトリ モジュールの削除に関する記事を参照してください。
よく寄せられる質問
このセクションでは、一般的な質問への回答を示します。
Application Insights で ASP.NET Core 3.1 はサポートされますか?
Microsoft は ASP.NET Core 3.1 のサポートを終了しました。
Application Insights SDK for ASP.NET Core バージョン 2.8.0 および Visual Studio 2019 以降は、ASP.NET Core 3.1 アプリケーションで使用できます。
自動的に収集されないテレメトリを追跡するにはどうすればよいですか?
コンストラクター インジェクションを使用して TelemetryClient
のインスタンスを取得し、そのインスタンスで必須の TrackXXX()
メソッドを呼び出します。 ASP.NET Core アプリケーションで新しい TelemetryClient
または TelemetryConfiguration
のインスタンスを作成することはお勧めしません。 TelemetryClient
のシングルトン インスタンスが DependencyInjection
コンテナーに既に登録されており、それによって TelemetryConfiguration
がテレメトリの残りの部分と共有されます。 新しい TelemetryClient
インスタンスは、残りのテレメトリとは別の構成が必要な場合にのみ作成します。
次の例では、コントローラーから追加のテレメトリを追跡する方法を確認できます。
using Microsoft.ApplicationInsights;
public class HomeController : Controller
{
private TelemetryClient telemetry;
// Use constructor injection to get a TelemetryClient instance.
public HomeController(TelemetryClient telemetry)
{
this.telemetry = telemetry;
}
public IActionResult Index()
{
// Call the required TrackXXX method.
this.telemetry.TrackEvent("HomePageRequested");
return View();
}
}
Application Insights でのカスタム データ レポートについては、Application Insights カスタム メトリック API リファレンスに関するページを参照してください。 同様の方法により、GetMetric API を使用して Application Insights にカスタム メトリックを送信することもできます。
テレメトリで要求と応答の本文をキャプチャするにはどうすればよいですか?
ASP.NET Core には、ILogger
を介した HTTP 要求/応答情報 (本文を含む) のログ記録の組み込みのサポートがあります。 これを活用することをお勧めします。 これにより、テレメトリ内の個人を特定できる情報 (PII) が公開される可能性があり、コスト (パフォーマンス コストと Application Insights の課金) が大幅に増加する可能性があるため、これを使用する前にリスクを慎重に評価してください。
ILogger logs コレクションをカスタマイズする方法
Application Insights の既定の設定では、警告以上の重大度のログのみがキャプチャされます。
Application Insights プロバイダーのログ構成を次のように変更して、情報以下の重大度のログをキャプチャします。
{
"Logging": {
"LogLevel": {
"Default": "Information"
},
"ApplicationInsights": {
"LogLevel": {
"Default": "Information"
}
}
},
"ApplicationInsights": {
"ConnectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000"
}
}
次の例では、Application Insights プロバイダーによって Information
ログがキャプチャされないことに注意してください。 キャプチャされないのは、Warning
ログ以上の重大度のログのみをキャプチャするように ApplicationInsights
に指示する既定のログ フィルターが、SDK によって追加されるためです。 Application Insights には明示的なオーバーライドが必要です。
{
"Logging": {
"LogLevel": {
"Default": "Information"
}
}
}
詳細については、ILogger の構成に関する記事を参照してください。
一部の Visual Studio テンプレートでは、Application Insights を有効にする目的で UseApplicationInsights() 拡張メソッドが IWebHostBuilder で使用されていました。 この使用方法は今でも有効ですか?
拡張メソッド UseApplicationInsights()
はまだサポートされていますが、Application Insights SDK バージョン 2.8.0 以降では古いものとしてマークされています。 次のメジャー バージョンの SDK で削除されます。 Application Insights のテレメトリを有効にするには、いくつかの構成を制御するためのオーバーロードが用意されているため、AddApplicationInsightsTelemetry()
を使用します。 また、ASP.NET Core 3.X アプリでは、services.AddApplicationInsightsTelemetry()
が Application Insights を有効にする唯一の方法です。
ASP.NET Core アプリケーションを Web Apps にデプロイしています。 Application Insights 拡張を Web アプリから有効にできますか?
この記事に示されているように、SDK がビルド時にインストールされる場合は、App Service ポータルから Application Insights の拡張機能を有効にする必要はありません。 拡張機能がインストールされている場合、既に SDK が追加されていることが検出されると、バックオフします。 拡張機能から Application Insights を有効にする場合、SDK をインストールして更新する必要はありません。 ただし、この記事の手順に従って Application Insights を有効にする場合は、次のような理由で柔軟性が増します。
- Application Insights テレメトリは以下で引き続き機能します。
- Windows、Linux、Mac を含む、すべてのオペレーティング システム。
- 自己完結型やフレームワーク依存型など、すべての発行モード。
- 完全 .NET Framework を含む、すべてのターゲット フレームワーク。
- Web Apps、VM、Linux、コンテナー、AKS、Azure 以外のホスティングなど、すべてのホスティング オプション。
- プレビュー バージョンを含むすべての .NET Core バージョン。
- Visual Studio からデバッグしているとき、テレメトリをローカル環境で見ることができます。
TrackXXX()
API を使って、追加のカスタム テレメトリを追跡できます。- 構成を完全に制御できます。
Azure Monitor Application Insights エージェント (旧名 Status Monitor v2) のようなツールを使用して、Application Insights 監視を有効にできますか?
はい。 Application Insights Agent 2.0.0-beta1 以降では、IIS でホストされている ASP.NET Core アプリケーションがサポートされています。
Linux でアプリケーションを実行する場合、すべての機能がサポートされますか?
はい。 SDK の機能サポートは、次の例外を除き、すべてのプラットフォームで同じです。
- パフォーマンス カウンターは Windows でのみサポートされているため、この SDK を使って Linux 上のイベント カウンターを収集します。 ほとんどのメトリックは同じです。
この SDK はワーカー サービスでサポートされていますか?
いいえ。 ワーカー サービスの場合は、ワーカー サービス アプリケーション (非 HTTP アプリケーション) 向け Application Insights を使用してください。
SDK をアンインストールするにはどうすればよいですか?
Application Insights を削除するには、アプリケーション内の API から NuGet パッケージと参照を削除する必要があります。 NuGet パッケージは、Visual Studio で NuGet パッケージ マネージャーを使ってアンインストールできます。
Note
これらの手順は、ASP.NET Core SDK をアンインストールするためのものです。 ASP.NET SDK をアンインストールする必要がある場合は、ASP.NET SDK をアンインストールする方法に関する記事を参照してください。
- NuGet パッケージ マネージャーを使用して、Microsoft.ApplicationInsights.AspNetCore パッケージをアンインストールします。
- Application Insights を完全に削除するには、プロジェクトに追加した API 呼び出しと共に、追加したコードまたはファイルを確認し、それらを手動で削除します。 詳細については、「Application Insights SDK を追加すると作成される内容」を参照してください。
Application Insights SDK を追加すると作成される内容
ご利用のプロジェクトに Application Insights を追加すると、ファイルが作成され、ファイルの一部にコードが追加されます。 NuGet パッケージをアンインストールするだけでは、そのファイルとコードが必ず破棄されるとは限りません。 Application Insights を完全に削除するには、プロジェクトに追加した API 呼び出しと共に、追加したコードまたはファイルを確認し、それらを手動で削除する必要があります。
Visual Studio ASP.NET Core テンプレート プロジェクトに Application Insights Telemetry を追加すると、次のコードが追加されます。
[自分のプロジェクトの名前].csproj
<PropertyGroup> <TargetFramework>netcoreapp3.1</TargetFramework> <ApplicationInsightsResourceId>/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/Default-ApplicationInsights-EastUS/providers/microsoft.insights/components/WebApplication4core</ApplicationInsightsResourceId> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.12.0" /> </ItemGroup> <ItemGroup> <WCFMetadata Include="Connected Services" /> </ItemGroup>
Appsettings.json
"ApplicationInsights": { "ConnectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000" }
ConnectedService.json
{ "ProviderId": "Microsoft.ApplicationInsights.ConnectedService.ConnectedServiceProvider", "Version": "16.0.0.0", "GettingStartedDocument": { "Uri": "https://go.microsoft.com/fwlink/?LinkID=798432" } }
Startup.cs
public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); services.AddApplicationInsightsTelemetry(); // This is added }
どうすればテレメトリの関連付けを無効にできますか?
コードでテレメトリの関連付けを無効にするには、「コンソール アプリケーション用の Application Insights」の <ExcludeComponentCorrelationHttpHeadersOnDomains>
を参照してください。
トラブルシューティング
専用のトラブルシューティングに関する記事をご覧ください。
アプリケーション ホストとインジェスト サービスの間の接続をテストする
Application Insights SDK とエージェントからテレメトリが送信され、インジェスト エンドポイントへの REST 呼び出しとして取り込まれます。 Web サーバーまたはアプリケーション ホスト マシンからインジェスト サービス エンドポイントへの接続は、PowerShell の生の REST クライアントを使用するか、curl コマンドを使用してテストできます。 「Azure Monitor Application Insights でアプリケーション テレメトリが見つからない場合のトラブルシューティング」をご覧ください。
オープンソース SDK
最新の更新プログラムとバグ修正については、リリース ノートを参照してください。
リリース ノート
バージョン2.12 以降の場合:.NET SDK (ASP.NET、ASP.NET Core、およびログ アダプターを含む)
Application Insights の主な機能強化は、サービスの更新に関するページでも要約しています。
次のステップ
- ユーザー フローの探索: ユーザーがアプリ内をどのように移動しているかを把握します。
- スナップショット コレクションを構成して、例外がスローされたときのソース コードと変数の状態を確認します。
- API を使用して、アプリのパフォーマンスと使用の詳細を表示するための独自のイベントとメトリックスを送信します。
- 可用性テストの使用: 世界中からアプリを常にチェックします。
- ASP.NET Core での依存関係の挿入について学習します。