Application Insights for ASP.NET Core アプリケーション

この記事では、ASP.NET Core アプリケーションで Application Insights を有効にする方法について説明します。

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

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

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

Note

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

サポートされるシナリオ

Application Insights SDK for ASP.NET Core では、実行されている場所や方法に関係なく、アプリケーションを監視できます。 アプリケーションが実行されていて、Azure へのネットワーク接続がある場合は、テレメトリを収集することができます。 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、コマンド ライン

Note

ASP.NET Core 3.1 では Application Insights 2.8.0 以降が必要です。

前提条件

  • 機能している ASP.NET Core アプリケーション。 ASP.NET Core アプリケーションを作成する必要がある場合は、こちらの ASP.NET Core チュートリアルに従ってください。
  • Application Insights の有効な接続文字列。 Application Insights にテレメトリを送信するには、この文字列が必要です。 接続文字列を取得するために新しい Application Insights リソースを作成する必要がある場合は、「Application Insights リソースの作成」をご覧ください。

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

Visual Studio for Mac の場合は、手動のガイダンスを使用します。 この手順は、Visual Studio の Windows バージョンでのみサポートされています。

  1. Visual Studio でプロジェクトを開きます。

    ヒント

    Application Insights によって行われたすべての変更を追跡するには、プロジェクトのソース管理を設定できます。 それを設定するには、[ファイル]>[ソース管理に追加] を選択します。

  2. [プロジェクト]>[Application Insights Telemetry の追加] を選択します

  3. [開始] を選択します。 このボタンの名前は、Visual Studio のバージョンによって異なる場合があります。 以前のバージョンの一部では、[開始 (無料)] ボタンという名前になっています。

  4. お使いのサブスクリプションを選択してから、[リソース]>[登録] を選択します。

  5. Application Insights をプロジェクトに追加した後、SDK の最新の安定リリースを使用していることを確認します。 [プロジェクト]>[NuGet パッケージの管理]>[Microsoft.ApplicationInsights.AspNetCore] に移動します。 必要であれば、[更新] を選択します。

    更新用の Application Insights パッケージを選択する場所を示すスクリーンショット

  6. プロジェクトをソース管理に追加した場合は、[表示]>[チーム エクスプローラー]>[変更] に移動します。 各ファイルを選択して、Application Insights のテレメトリによって行われた変更の差分ビューを表示できます。

Application Insights のサーバー側テレメトリを有効にする (Visual Studio なし)

  1. ASP.NET Core 用の Application Insights SDK NuGet パッケージをインストールします。 常に最新の安定バージョンを使用することをお勧めします。 オープンソースの GitHub リポジトリで、SDK の完全なリリース ノートを探します。

    次のコード サンプルでは、プロジェクトの .csproj ファイルに追加される変更が示されています。

        <ItemGroup>
          <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.16.0" />
        </ItemGroup>
    
  2. この例のように、Startup クラスで ConfigureServices() メソッドに services.AddApplicationInsightsTelemetry(); を追加します。

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // The following line enables Application Insights telemetry collection.
            services.AddApplicationInsightsTelemetry();
    
            // This code adds other services for your application.
            services.AddMvc();
        }
    
  3. 接続文字列を設定します。

    接続文字列を AddApplicationInsightsTelemetry の ApplicationInsightsServiceOptions 引数として指定することはできますが、接続文字列は構成に指定することをお勧めします。 appsettings.json で接続文字列を指定する方法は、次のコード サンプルのようになります。 発行の間に、appsettings.json がアプリケーションのルート フォルダーにコピーされるようにします。

        {
          "ApplicationInsights": {
            "ConnectionString" : "Copy connection string from Application Insights Resource Overview"
          },
          "Logging": {
            "LogLevel": {
              "Default": "Warning"
            }
          }
        }
    

    あるいは、"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_STRINGAzure Web Apps で使用されますが、この SDK がサポートされているすべての場所でも使用できます。

    Note

    コードで指定された接続文字列は、他のオプションより優先される環境変数 APPLICATIONINSIGHTS_CONNECTION_STRING より優先されます。

ユーザー シークレットとその他の構成プロバイダー

接続文字列を 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 の監視が正しく構成されているかどうかをすばやく確認できます。 テレメトリがポータルと分析に表示されるまで数分かかることがありますが、Live Metrics では、実行中のプロセスの CPU 使用率がほぼリアルタイムで示されます。 また、要求、依存関係、トレースなどの他のテレメトリも表示できます。

ILogger ログ

既定の構成では、ILoggerWarning ログ以上の重大度のログが収集されます。 FAQ を確認して、この構成をカスタマイズします

依存関係

依存関係の収集は既定で有効になっています。 こちらの記事では、自動収集される依存関係について説明されており、手動で追跡するための手順も含まれます。

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

ASP.NET Core でのパフォーマンス カウンターのサポートは制限されています。

  • SDK バージョン 2.4.1 以降では、アプリケーションが Azure Web Apps (Windows) で実行されている場合、パフォーマンス カウンターが収集されます。
  • SDK バージョン 2.7.1 以降では、アプリケーションが Windows で実行されていて、NETSTANDARD2.0 以降を対象とする場合、パフォーマンス カウンターが収集されます。
  • .NET Framework を対象とするアプリケーションの場合、すべてのバージョンの SDK でパフォーマンス カウンターがサポートされます。
  • SDK バージョン 2.8.0 以降では、Linux の CPU/メモリ カウンターがサポートされます。 Linux では、その他のカウンターはサポートされません。 Linux (およびその他の非 Windows 環境) でシステム カウンターを取得するには、EventCounter を使用することをお勧めします。

EventCounter

既定では、EventCounterCollectionModule は有効になっています。 収集されるカウンターの一覧を構成する方法については、「EventCounter の概要」を参照してください。

HTTP を使用してデータを強化する

HttpContext.Features.Get<RequestTelemetry>().Properties["myProp"] = someData

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

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

  1. _ViewImports.cshtml で、インジェクションを追加します。
    @inject Microsoft.ApplicationInsights.AspNetCore.JavaScriptSnippet JavaScriptSnippet
  1. _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 スニペットが、監視するアプリケーションの各ページの <head> セクションにある必要があります。 クライアント側の監視を有効にするために、アプリケーション テンプレートの _Layout.cshtml に JavaScript スニペットを追加します。

プロジェクトに _Layout.cshtml が含まれていない場合でも、アプリ内のすべてのページの <head> を制御する同等のファイルに JavaScript スニペットを追加することで、クライアント側の監視を追加できます。 または、複数のページにスニペットを追加することもできますが、お勧めしません。

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 を使用する

次の例のように ApplicationInsightsServiceOptionsAddApplicationInsightsTelemetry に渡すことで、いくつかの一般的な設定を変更できます。

public void ConfigureServices(IServiceCollection services)
{
    Microsoft.ApplicationInsights.AspNetCore.Extensions.ApplicationInsightsServiceOptions aiOptions
                = new Microsoft.ApplicationInsights.AspNetCore.Extensions.ApplicationInsightsServiceOptions();
    // Disables adaptive sampling.
    aiOptions.EnableAdaptiveSampling = false;

    // Disables QuickPulse (Live Metrics stream).
    aiOptions.EnableQuickPulseMetricStream = false;
    services.AddApplicationInsightsTelemetry(aiOptions);
}

次の表は、ApplicationInsightsServiceOptions の設定の完全な一覧です。

設定 説明 Default
EnablePerformanceCounterCollectionModule PerformanceCounterCollectionModule を有効または無効にします true
EnableRequestTrackingTelemetryModule RequestTrackingTelemetryModule を有効または無効にします true
EnableEventCounterCollectionModule EventCounterCollectionModule を有効または無効にします true
EnableDependencyTrackingTelemetryModule DependencyTrackingTelemetryModule を有効または無効にします true
EnableAppServicesHeartbeatTelemetryModule AppServicesHeartbeatTelemetryModule を有効または無効にします true
EnableAzureInstanceMetadataTelemetryModule AzureInstanceMetadataTelemetryModule を有効または無効にします true
EnableQuickPulseMetricStream LiveMetrics 機能を有効または無効にします true
EnableAdaptiveSampling アダプティブ サンプリングを有効または無効にします true
EnableHeartbeat ハートビート機能を有効または無効にします。この機能は、"HeartbeatState" という名前のカスタム メトリックを、.NET バージョン、Azure 環境情報 (該当する場合) などのランタイムに関する情報と共に定期的に (既定では 15 分) 送信します。 true
AddAutoCollectedMetricExtractor AutoCollectedMetrics エクストラクターを有効または無効にします。これは、サンプリングが行われる前に要求/依存関係に関する事前に集計されたメトリックを送信する TelemetryProcessor です。 true
RequestCollectionOptions.TrackExceptions 要求収集モジュールによる未処理の例外の追跡についてのレポートを有効または無効にします。 NETSTANDARD 2.0 では false (例外は ApplicationInsightsLoggerProvider で追跡されるため) で、それ以外の場合は true です。
EnableDiagnosticsTelemetryModule DiagnosticsTelemetryModule を有効または無効にします。 無効にすると、次の設定が無視されます: EnableHeartbeatEnableAzureInstanceMetadataTelemetryModuleEnableAppServicesHeartbeatTelemetryModule true

最新の一覧については、ApplicationInsightsServiceOptions での構成可能な設定に関するページを参照してください。

Microsoft.ApplicationInsights.AspNetCore SDK 2.15.0 以降の構成に関する推奨事項

Microsoft.ApplicationInsights.AspNetCore SDK バージョン 2.15.0 以降では、アプリケーションの IConfiguration インスタンスを使用する ConnectionString も含めて、ApplicationInsightsServiceOptions で使用可能なすべての設定を構成することをお勧めします。 次の例に示すように、設定は "ApplicationInsights" セクションの下に記載されている必要があります。 appsettings.json の次のセクションによって、接続文字列が構成され、アダプティブ サンプリングとパフォーマンス カウンターの収集が無効にされます。

{
    "ApplicationInsights": {
    "ConnectionString": "Copy connection string from Application Insights Resource Overview",
    "EnableAdaptiveSampling": false,
    "EnablePerformanceCounterCollectionModule": false
    }
}

services.AddApplicationInsightsTelemetry(aiOptions) を使用した場合、Microsoft.Extensions.Configuration.IConfiguration の設定がオーバーライドされます。

サンプリング

Application Insights SDK for ASP.NET Core では、固定レートとアダプティブ サンプリングの両方がサポートされています。 既定では、アダプティブ サンプリングは有効になっています。

詳しくは、「ASP.NET Core アプリケーションのためのアダプティブ サンプリングの構成」をご覧ください。

TelemetryInitializers の追加

追加の情報でテレメトリをエンリッチする必要があるときは、テレメトリ初期化子を使用します。

次のコードで示すように、新しい TelemetryInitializerDependencyInjection コンテナーに追加します。 DependencyInjection コンテナーに追加した TelemetryInitializer は、SDK によって自動的に取得されます。

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>();
}

Note

services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>(); は単純な初期化子に対して機能します。 それ以外には、次のものが必要です: services.AddSingleton(new MyCustomTelemetryInitializer() { fieldName = "myfieldName" });

TelemetryInitializers の削除

既定では、テレメトリ初期化子は存在します。 すべてまたは特定のテレメトリ初期化子を削除するには、AddApplicationInsightsTelemetry() を呼び出した "後" で、次のサンプル コードを使用します。

public void ConfigureServices(IServiceCollection services)
{
    services.AddApplicationInsightsTelemetry();

    // Remove a specific built-in telemetry initializer
    var tiToRemove = services.FirstOrDefault<ServiceDescriptor>
                        (t => t.ImplementationType == typeof(AspNetCoreEnvironmentTelemetryInitializer));
    if (tiToRemove != null)
    {
        services.Remove(tiToRemove);
    }

    // Remove all initializers
    // This requires importing namespace by using Microsoft.Extensions.DependencyInjection.Extensions;
    services.RemoveAll(typeof(ITelemetryInitializer));
}

テレメトリ プロセッサを追加する

拡張メソッド AddApplicationInsightsTelemetryProcessorIServiceCollection で使用することで、カスタム テレメトリ プロセッサを TelemetryConfiguration に追加できます。 テレメトリ プロセッサは、高度なフィルター処理のシナリオで使用します。 次の例を使用してください。

public void ConfigureServices(IServiceCollection services)
{
    // ...
    services.AddApplicationInsightsTelemetry();
    services.AddApplicationInsightsTelemetryProcessor<MyFirstCustomTelemetryProcessor>();

    // If you have more processors:
    services.AddApplicationInsightsTelemetryProcessor<MySecondCustomTelemetryProcessor>();
}

既定の TelemetryModules の構成または削除

Application Insights では、ユーザーによる手動の追跡を必要とせずに特定のワークロードに関するテレメトリが自動収集されます。

既定では、次の自動収集モジュールが有効になります。 これらのモジュールでは、自動的にテレメトリが収集されます。 それらを無効にするか構成して、既定の動作を変更できます。

  • RequestTrackingTelemetryModule - 受信 Web 要求から RequestTelemetry を収集します
  • DependencyTrackingTelemetryModule - 送信 HTTP 呼び出しと SQL 呼び出しから DependencyTelemetry を収集します
  • PerformanceCollectorModule - Windows PerformanceCounters を収集します
  • QuickPulseTelemetryModule - Live Metrics ポータルで表示するテレメトリを収集します
  • AppServicesHeartbeatTelemetryModule - アプリケーションがホストされる Azure App Service 環境について、(カスタム メトリックとして送信される) ハート ビートを収集します
  • AzureInstanceMetadataTelemetryModule - アプリケーションがホストされる Azure VM 環境について、(カスタム メトリックとして送信される) ハートビートを収集します
  • EventCounterCollectionModule - EventCounters を収集します。このモジュールは新しい機能であり、SDK バージョン 2.8.0 以降で使用できます

既定の TelemetryModule を構成するには、下の画像のように、拡張メソッド ConfigureTelemetryModule<T>IServiceCollection で使用します。

using Microsoft.ApplicationInsights.DependencyCollector;
using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector;

public void ConfigureServices(IServiceCollection services)
{
    services.AddApplicationInsightsTelemetry();

    // The following configures DependencyTrackingTelemetryModule.
    // Similarly, any other default modules can be configured.
    services.ConfigureTelemetryModule<DependencyTrackingTelemetryModule>((module, o) =>
            {
                module.EnableW3CHeadersInjection = true;
            });

    // The following removes all default counters from EventCounterCollectionModule, and adds a single one.
    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 = services.FirstOrDefault<ServiceDescriptor>(t => t.ImplementationType == typeof(PerformanceCollectorModule));
    if (performanceCounterService != null)
    {
        services.Remove(performanceCounterService);
    }
}

バージョン 2.12.2 以降では、ApplicationInsightsServiceOptions には、任意の既定のモジュールを無効にする簡単なオプションが含まれています。

テレメトリ チャネルを構成する

既定のテレメトリ チャネルServerTelemetryChannel です。 次の例は、それをオーバーライドする方法を示したものです。

using Microsoft.ApplicationInsights.Channel;

    public void ConfigureServices(IServiceCollection services)
    {
        // Use the following to replace the default channel with InMemoryChannel.
        // This can also be applied to ServerTelemetryChannel.
        services.AddSingleton(typeof(ITelemetryChannel), new InMemoryChannel() {MaxTelemetryBufferCapacity = 19898 });

        services.AddApplicationInsightsTelemetry();
    }

注意

バッファーのフラッシュが必要な場合 (終了するアプリケーションで SDK を使用する場合など) は、「データのフラッシュ」を参照してください。

テレメトリを動的に無効にする

テレメトリを条件付きで動的に無効にする必要がある場合は、コードの任意の場所で ASP.NET Core の依存関係挿入コンテナーを使用して TelemetryConfiguration インスタンスを解決し、それに DisableTelemetry フラグを設定することができます。

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddApplicationInsightsTelemetry();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, TelemetryConfiguration configuration)
    {
        configuration.DisableTelemetry = true;
        ...
    }

前のコード サンプルでは、Application Insights にテレメトリが送信されなくなります。 これにより、自動収集モジュールでテレメトリが収集されなくなることはありません。 特定の自動収集モジュールを削除する場合は、テレメトリ モジュールの削除に関する記事を参照してください。

よく寄せられる質問

Application Insights で ASP.NET Core 3.X はサポートされますか?

はい。 Application Insights SDK for ASP.NET Core をバージョン 2.8.0 以降に更新してください。 これより前のバージョンの SDK では、ASP.NET Core 3.X はサポートされていません。

また、Visual Studio に基づくサーバー側テレメトリを有効にしている場合は、最新バージョンの Visual Studio 2019 (16.3.0) に更新してオンボードしてください。 以前のバージョンの Visual Studio では、ASP.NET Core 3.X アプリの自動オンボードはサポートされていません。

自動的に収集されないテレメトリを追跡するにはどうすればよいですか?

コンストラクター インジェクションを使用して 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 にカスタム メトリックを送信することもできます。

ILogger logs コレクションをカスタマイズする方法

既定では、Warning ログ以上の重大度のログのみが、自動的にキャプチャされます。 この動作を変更するには、次に示すように、プロバイダー ApplicationInsights のログ構成を明示的にオーバーライドします。 次の構成を使用すると、ApplicationInsights で Information ログ以上の重大度のすべてのログをキャプチャできます。

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    },
    "ApplicationInsights": {
      "LogLevel": {
        "Default": "Information"
      }
    }
  }
}

次の例では、ApplicationInsights プロバイダーによって Information ログがキャプチャされないことに注意してください。 キャプチャされないのは、Warning ログ以上の重大度のログのみをキャプチャするように ApplicationInsights に指示する既定のログ フィルターが、SDK によって追加されるためです。 ApplicationInsights には明示的なオーバーライドが必要です。

{
  "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、コンテナー、Azure Kubernetes Service、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 上のイベント カウンターを収集します。 ほとんどのメトリックは同じです。
  • ServerTelemetryChannel は既定で有効になりますが、アプリケーションが Linux または macOS で実行されている場合は、ネットワークに問題があると、チャネルによってテレメトリを一時的に保持するためのローカル ストレージ フォルダーが自動的に作成されることはありません。 この制限のため、ネットワークやサーバーに一時的に問題が発生すると、テレメトリが失われます。 この問題を回避するには、チャネル用のローカル フォルダーを構成します。
using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel;

    public void ConfigureServices(IServiceCollection services)
    {
        // The following will configure the channel to use the given folder to temporarily
        // store telemetry items during network or Application Insights server issues.
        // User should ensure that the given folder already exists
        // and that the application has read/write permissions.
        services.AddSingleton(typeof(ITelemetryChannel),
                                new ServerTelemetryChannel () {StorageFolder = "/tmp/myfolder"});
        services.AddApplicationInsightsTelemetry();
    }

この制限は、バージョン 2.15.0 以降には適用されません。

この SDK は、新しい .NET Core 3.X ワーカー サービス テンプレート アプリケーションでサポートされていますか?

この SDK には HttpContext が必要です。そのため、.NET Core 3.X ワーカー サービス アプリケーションを含め、HTTP 以外のアプリケーションでは機能しません。 新しくリリースされた Microsoft.ApplicationInsights.WorkerService SDK を使用して、このようなアプリケーションで Application Insights を有効にする方法については、「ワーカー サービス アプリケーション (非 HTTP アプリケーション) 向け Application Insights」を参照してください。

オープンソース SDK

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

次のステップ