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

この記事では、ASP.NET Core アプリケーションで Application Insights を有効にする方法について説明します。This article describes how to enable Application Insights for an ASP.NET Core application. この記事の手順を完了すると、Application Insights で、ASP.NET Core アプリケーションから要求、依存関係、例外、パフォーマンス カウンター、ハートビート、ログが収集されます。When you complete the instructions in this article, Application Insights will collect requests, dependencies, exceptions, performance counters, heartbeats, and logs from your ASP.NET Core application.

ここで使用する例は、netcoreapp2.2 を対象とする MVC アプリケーションです。The example we'll use here is an MVC application that targets netcoreapp2.2. これらの手順は、すべての ASP.NET Core アプリケーションに適用できます。You can apply these instructions to all ASP.NET Core applications.

サポートされるシナリオSupported scenarios

Application Insights SDK for ASP.NET Core では、実行されている場所や方法に関係なく、アプリケーションを監視できます。The Application Insights SDK for ASP.NET Core can monitor your applications no matter where or how they run. アプリケーションが実行されていて、Azure へのネットワーク接続がある場合は、テレメトリを収集することができます。If your application is running and has network connectivity to Azure, telemetry can be collected. Application Insights の監視は、.NET Core がサポートされているすべての場所でサポートされます。Application Insights monitoring is supported everywhere .NET Core is supported. 以下がサポートされます。Support covers:

  • [オペレーティング システム] :Windows、Linux、Mac。Operating system: Windows, Linux, or Mac.
  • ホスティング方法: プロセス内、プロセス外。Hosting method: In process or out of process.
  • デプロイ方法: フレームワーク依存、自己完結型。Deployment method: Framework dependent or self-contained.
  • Web サーバー: IIS (インターネット インフォメーション サーバー)、Kestrel。Web server: IIS (Internet Information Server) or Kestrel.
  • ホスティング プラットフォーム: Azure App Service、Azure VM、Docker、Azure Kubernetes Service (AKS) などの Web Apps 機能。Hosting platform: The Web Apps feature of Azure App Service, Azure VM, Docker, Azure Kubernetes Service (AKS), and so on.
  • .NET Core ランタイム バージョン:1.XX、2.XX、または 3.XX.NET Core Runtime version: 1.XX, 2.XX, or 3.XX
  • IDE: Visual Studio、VS Code、コマンド ライン。IDE: Visual Studio, VS Code, or command line.

注意

Application Insights と共に ASP.NET Core 3.0 を使用している場合は、2.8.0 バージョン以降を使用してください。If you are using ASP.NET Core 3.0 along with Application Insights, please use the 2.8.0 version or higher. これは、ASP.NET Core 3.0 をサポートする唯一のバージョンです。This is the only version that supports ASP.NET Core 3.0.

前提条件Prerequisites

  • 機能している ASP.NET Core アプリケーション。A functioning ASP.NET Core application. ASP.NET Core アプリケーションを作成する必要がある場合は、こちらの ASP.NET Core チュートリアルに従ってください。If you need to create an ASP.NET Core application, follow this ASP.NET Core tutorial.
  • 有効な Application Insights インストルメンテーション キー。A valid Application Insights instrumentation key. Application Insights にテレメトリを送信するには、このキーが必要です。This key is required to send any telemetry to Application Insights. インストルメンテーション キーを取得するために新しい Application Insights リソースを作成する必要がある場合は、「Application Insights リソースの作成」をご覧ください。If you need to create a new Application Insights resource to get an instrumentation key, see Create an Application Insights resource.

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

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

    ヒント

    必要な場合は、プロジェクトのソース管理を設定すると、Application Insights によって行われたすべての変更を追跡することができます。If you want to, you can set up source control for your project so you can track all the changes that Application Insights makes. ソース管理を有効にするには、 [ファイル] > [ソース管理に追加] を選択します。To enable source control, select File > Add to Source Control.

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

  3. [開始] を選択します。Select Get Started. この選択のテキストは、Visual Studio のバージョンによって多少異なる場合があります。This selection's text might vary, depending on your version of Visual Studio. 以前のバージョンの一部では、代わりに [開始 (無料)] ボタンが使われています。Some earlier versions use a Start Free button instead.

  4. サブスクリプションを選択します。Select your subscription. 次に、 [リソース] > [登録] を選択します。Then select Resource > Register.

  5. Application Insights をプロジェクトに追加したら、SDK の最新の安定リリースを使用していることを確認します。After adding Application Insights to your project, check to confirm that you're using the latest stable release of the SDK. [プロジェクト] > [NuGet パッケージの管理] > [Microsoft.ApplicationInsights.AspNetCore] に移動します。Go to Project > Manage NuGet Packages > Microsoft.ApplicationInsights.AspNetCore. 必要であれば、 [更新] を選択します。If you need to, choose Update.

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

  6. オプションのヒントに従い、プロジェクトをソース管理に追加した場合は、 [表示] > [チーム エクスプローラー] > [変更] に移動します。If you followed the optional tip and added your project to source control, go to View > Team Explorer > Changes. 次に、各ファイルを選択して、Application Insights のテレメトリによって行われた変更の差分ビューを表示します。Then select each file to see a diff view of the changes made by Application Insights telemetry.

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

  1. ASP.NET Core 用の Application Insights SDK NuGet パッケージをインストールします。Install the Application Insights SDK NuGet package for ASP.NET Core. 常に最新の安定バージョンを使用することをお勧めします。We recommend that you always use the latest stable version. オープンソースの GitHub リポジトリで、SDK の完全なリリース ノートを探します。Find full release notes for the SDK on the open-source GitHub repo.

    次のコード サンプルでは、プロジェクトの .csproj ファイルに追加される変更が示されています。The following code sample shows the changes to be added to your project's .csproj file.

        <ItemGroup>
          <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.12.0" />
        </ItemGroup>
    
  2. この例のように、Startup クラスで ConfigureServices() メソッドに services.AddApplicationInsightsTelemetry(); を追加します。Add services.AddApplicationInsightsTelemetry(); to the ConfigureServices() method in your Startup class, as in this example:

        // 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. インストルメンテーション キーを設定します。Set up the instrumentation key.

    インストルメンテーション キーを AddApplicationInsightsTelemetry に引数として指定することはできますが、インストルメンテーション キーは構成に指定することをお勧めします。Although you can provide the instrumentation key as an argument to AddApplicationInsightsTelemetry, we recommend that you specify the instrumentation key in configuration. appsettings.json でインストルメンテーション キーを指定する方法は、次のコード サンプルのようになります。The following code sample shows how to specify an instrumentation key in appsettings.json. 発行の間に、appsettings.json がアプリケーションのルート フォルダーにコピーされるようにします。Make sure appsettings.json is copied to the application root folder during publishing.

        {
          "ApplicationInsights": {
            "InstrumentationKey": "putinstrumentationkeyhere"
          },
          "Logging": {
            "LogLevel": {
              "Default": "Warning"
            }
          }
        }
    

    または、次のいずれかの環境変数にインストルメンテーション キーを指定します。Alternatively, specify the instrumentation key in either of the following environment variables:

    • APPINSIGHTS_INSTRUMENTATIONKEY

    • ApplicationInsights:InstrumentationKey

    次に例を示します。For example:

    • SET ApplicationInsights:InstrumentationKey=putinstrumentationkeyhere

    • SET APPINSIGHTS_INSTRUMENTATIONKEY=putinstrumentationkeyhere

    通常、APPINSIGHTS_INSTRUMENTATIONKEY では Azure Web Apps にデプロイされるアプリケーションのインストルメンテーション キーを指定します。Typically, APPINSIGHTS_INSTRUMENTATIONKEY specifies the instrumentation key for applications deployed to Azure Web Apps.

    注意

    コードで指定されたインストルメンテーション キーは、他のオプションより優先される環境変数 APPINSIGHTS_INSTRUMENTATIONKEY より優先されます。An instrumentation key specified in code wins over the environment variable APPINSIGHTS_INSTRUMENTATIONKEY, which wins over other options.

アプリケーションを実行するRun your application

アプリケーションを実行し、それに対して要求を行います。Run your application and make requests to it. これで Application Insights にテレメトリが送られるはずです。Telemetry should now flow to Application Insights. Application Insights SDK では、次のテレメトリと共に、アプリケーションへの受信 Web 要求を自動的に収集します。The Application Insights SDK automatically collects incoming web requests to your application, along with the following telemetry as well.

ライブ メトリックLive Metrics

Live Metrics を使用すると、Application Insights の監視が正しく構成されているかどうかをすばやく確認できます。Live Metrics can be used to quickly verify if Application Insights monitoring is configured correctly. ポータルおよび分析でテレメトリの表示が始まるまで数分かかることがありますが、Live Metrics では、実行中のプロセスの CPU 使用率がほぼリアルタイムで示されます。While it might take a few minutes before telemetry starts appearing in the portal and analytics, Live Metrics would show CPU usage of the running process in near real-time. また、要求、依存関係、トレースなどの他のテレメトリも表示できます。It can also show other telemetry like Requests, Dependencies, Traces, etc.

ILogger ログILogger logs

重大度が Warning 以上の ILogger で出力されたログは、自動的にキャプチャされます。Logs emitted via ILogger of severity Warning or greater are automatically captured. Application Insights によってキャプチャされるログ レベルをカスタマイズする場合は、ILogger のドキュメントに従ってください。Follow ILogger docs to customize which log levels are captured by Application Insights.

依存関係Dependencies

依存関係の収集は既定で有効になっています。Dependency collection is enabled by default. こちらの記事では、自動収集される依存関係について説明されており、手動で追跡するための手順も含まれます。This article explains the dependencies that are automatically collected, and also contain steps to do manual tracking.

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

ASP.NET Core でのパフォーマンス カウンターのサポートは制限されています。Support for performance counters in ASP.NET Core is limited:

  • SDK バージョン 2.4.1 以降では、アプリケーションが Azure Web Apps (Windows) で実行されている場合、パフォーマンス カウンターが収集されます。SDK versions 2.4.1 and later collect performance counters if the application is running in Azure Web Apps (Windows).
  • SDK バージョン 2.7.1 以降では、アプリケーションが Windows で実行されていて、NETSTANDARD2.0 以降を対象とする場合、パフォーマンス カウンターが収集されます。SDK versions 2.7.1 and later collect performance counters if the application is running in Windows and targets NETSTANDARD2.0 or later.
  • .NET Framework を対象とするアプリケーションの場合、すべてのバージョンの SDK でパフォーマンス カウンターがサポートされます。For applications targeting the .NET Framework, all versions of the SDK support performance counters.
  • SDK バージョン 2.8.0 以降では、Linux の CPU/メモリ カウンターがサポートされます。SDK Versions 2.8.0 and later support cpu/memory counter in Linux. Linux では、その他のカウンターはサポートされません。No other counter is supported in Linux. Linux (およびその他の非 Windows 環境) でシステム カウンターを取得するには、EventCounter を使用することをお勧めします。The recommended way to get system counters in Linux (and other non-Windows environments) is by using EventCounters

EventCounterEventCounter

EventCounterCollectionModule は既定で有効になっており、.NET Core 3.0 アプリから既定のカウンター セットが収集されます。EventCounterCollectionModule is enabled by default, and it will collect a default set of counters from .NET Core 3.0 apps. EventCounter チュートリアルには、収集される既定のカウンター セットがリスト表示されています。The EventCounter tutorial lists the default set of counters collected. また、リストのカスタマイズについても説明されています。It also has instructions on customizing the list.

Web アプリケーションに対してクライアント側のテレメトリを有効にするEnable client-side telemetry for web applications

サーバー側テレメトリの収集を始めるためなら、上記の手順で十分です。The preceding steps are enough to help you start collecting server-side telemetry. お使いのアプリケーションにクライアント側コンポーネントがある場合、使用状況テレメトリの収集を始めるには次の手順のようにします。If your application has client-side components, follow the next steps to start collecting usage telemetry.

  1. _ViewImports.cshtml で、インジェクションを追加します。In _ViewImports.cshtml, add injection:

        @inject Microsoft.ApplicationInsights.AspNetCore.JavaScriptSnippet JavaScriptSnippet
    
  2. _Layout.cshtml で、<head> セクションの終わりに (ただし、他のスクリプトの前に) HtmlHelper を挿入します。In _Layout.cshtml, insert HtmlHelper at the end of the <head> section but before any other script. ページからカスタム JavaScript テレメトリを報告する場合は、このスニペットの後に挿入します。If you want to report any custom JavaScript telemetry from the page, inject it after this snippet:

        @Html.Raw(JavaScriptSnippet.FullScript)
        </head>
    

上で参照されている .cshtml ファイル名は、既定の MVC アプリケーション テンプレートからのものです。The .cshtml file names referenced earlier are from a default MVC application template. 最終的に、アプリケーションに対するクライアント側の監視を正しく有効にするためには、JavaScript スニペットが、監視するアプリケーションの各ページの <head> セクションにある必要があります。Ultimately, if you want to properly enable client-side monitoring for your application, the JavaScript snippet must appear in the <head> section of each page of your application that you want to monitor. このアプリケーション テンプレートでは、Javascript スニペットを _Layout.cshtml に追加することで、実質的にこの目標を達成できます。You can accomplish this goal for this application template by adding the JavaScript snippet to _Layout.cshtml.

プロジェクトに _Layout.cshtml が含まれない場合でも、クライアント側の監視を追加することができます。If your project doesn't include _Layout.cshtml, you can still add client-side monitoring. アプリ内のすべてのページの <head> を制御する同等のファイルに JavaScript のスニペットを追加することで、これを行うことができます。You can do this by adding the JavaScript snippet to an equivalent file that controls the <head> of all pages within your app. または、複数のページにスニペットを追加することもできますが、この方法では保守が困難になるので、一般にはお勧めしません。Or you can add the snippet to multiple pages, but this solution is difficult to maintain and we generally don't recommend it.

Application Insights SDK を構成するConfigure the Application Insights SDK

Application Insights SDK for ASP.NET Core をカスタマイズして、既定の構成を変更できます。You can customize the Application Insights SDK for ASP.NET Core to change the default configuration. Application Insights ASP.NET SDK のユーザーであれば、ApplicationInsights.config を使用する構成または TelemetryConfiguration.Active の変更に慣れている場合もあります。Users of the Application Insights ASP.NET SDK might be familiar with changing configuration by using ApplicationInsights.config or by modifying TelemetryConfiguration.Active. ASP.NET Core の場合、構成は別の方法で変更します。You change configuration differently for ASP.NET Core. ASP.NET Core SDK をアプリケーションに追加し、ASP.NET Core の組み込み依存関係インジェクションを使用して構成します。Add the ASP.NET Core SDK to the application and configure it by using ASP.NET Core built-in dependency injection. 他の方法が指示されていない限り、ほとんどすべての構成の変更は、Startup.cs クラスの ConfigureServices() メソッドで行います。Make almost all configuration changes in the ConfigureServices() method of your Startup.cs class, unless you're directed otherwise. 以下のセクションではさらに詳しく説明します。The following sections offer more information.

注意

ASP.NET Core アプリケーションでは、TelemetryConfiguration.Active を変更することによる構成の変更はサポートされていません。In ASP.NET Core applications, changing configuration by modifying TelemetryConfiguration.Active isn't supported.

ApplicationInsightsServiceOptions を使用するUsing ApplicationInsightsServiceOptions

次の例のように ApplicationInsightsServiceOptionsAddApplicationInsightsTelemetry に渡すことで、いくつかの一般的な設定を変更できます。You can modify a few common settings by passing ApplicationInsightsServiceOptions to AddApplicationInsightsTelemetry, as in this example:

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 の設定の完全な一覧Full List of settings in ApplicationInsightsServiceOptions

設定Setting [説明]Description DefaultDefault
EnableQuickPulseMetricStreamEnableQuickPulseMetricStream LiveMetrics 機能を有効または無効にしますEnable/Disable LiveMetrics feature truetrue
EnableAdaptiveSamplingEnableAdaptiveSampling アダプティブ サンプリングを有効または無効にしますEnable/Disable Adaptive Sampling truetrue
EnableHeartbeatEnableHeartbeat ハートビート機能を有効または無効にします。この機能は、"HeartBeatState" という名前のカスタム メトリックを、.NET バージョン、Azure 環境情報 (該当する場合) などのランタイムに関する情報と共に定期的に (既定では 15 分) 送信します。Enable/Disable Heartbeats feature, which periodically (15-min default) sends a custom metric named 'HeartBeatState' with information about the runtime like .NET Version, Azure Environment information, if applicable, etc. truetrue
AddAutoCollectedMetricExtractorAddAutoCollectedMetricExtractor AutoCollectedMetrics エクストラクターを有効または無効にします。これは、サンプリングが行われる前に要求/依存関係に関する事前に集計されたメトリックを送信する TelemetryProcessor です。Enable/Disable AutoCollectedMetrics extractor, which is a TelemetryProcessor that sends pre-aggregated metrics about Requests/Dependencies before sampling takes place. truetrue
RequestCollectionOptions.TrackExceptionsRequestCollectionOptions.TrackExceptions 要求収集モジュールによる未処理の例外の追跡についてのレポートを有効または無効にします。Enable/Disable reporting of unhandled Exception tracking by the Request collection module. NETSTANDARD 2.0 では false (例外は ApplicationInsightsLoggerProvider で追跡されるため) で、それ以外の場合は true です。false in NETSTANDARD2.0 (because Exceptions are tracked with ApplicationInsightsLoggerProvider), true otherwise.

最新の一覧については、ApplicationInsightsServiceOptions の構成可能な設定を参照してください。See the configurable settings in ApplicationInsightsServiceOptions for the most up-to-date list.

サンプリングSampling

Application Insights SDK for ASP.NET Core では、固定レートとアダプティブ サンプリングの両方がサポートされています。The Application Insights SDK for ASP.NET Core supports both fixed-rate and adaptive sampling. アダプティブ サンプリングは、既定で有効になっています。Adaptive sampling is enabled by default.

詳しくは、「ASP.NET Core アプリケーションのためのアダプティブ サンプリングの構成」をご覧ください。For more information, see Configure adaptive sampling for ASP.NET Core applications.

TelemetryInitializers の追加Adding TelemetryInitializers

すべてのテレメトリで送信されるグローバル プロパティを定義するときは、テレメトリ初期化子を使います。Use telemetry initializers when you want to define global properties that are sent with all telemetry.

次のコードで示すように、新しい TelemetryInitializerDependencyInjection コンテナーに追加します。Add any new TelemetryInitializer to the DependencyInjection container as shown in the following code. DependencyInjection コンテナーに追加した TelemetryInitializer は、SDK によって自動的に取得されます。The SDK automatically picks up any TelemetryInitializer that's added to the DependencyInjection container.

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

TelemetryInitializers の削除Removing TelemetryInitializers

テレメトリ初期化子は既定で存在します。Telemetry initializers are present by default. すべてまたは特定のテレメトリ初期化子を削除するには、AddApplicationInsightsTelemetry() を呼び出した "" で、次のサンプル コードを使用します。To remove all or specific telemetry initializers, use the following sample code after you call 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));
}

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

拡張メソッド AddApplicationInsightsTelemetryProcessorIServiceCollection で使用することで、カスタム テレメトリ プロセッサを TelemetryConfiguration に追加できます。You can add custom telemetry processors to TelemetryConfiguration by using the extension method AddApplicationInsightsTelemetryProcessor on IServiceCollection. テレメトリ プロセッサは、高度なフィルター処理のシナリオで使用します。You use telemetry processors in advanced filtering scenarios. 次の例を使用してください。Use the following example.

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

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

既定の TelemetryModules の構成または削除Configuring or removing default TelemetryModules

Application Insights では、テレメトリ モジュールを使用して、ユーザーが手動で追跡することなく特定のワークロードに関する有用なテレメトリが自動収集されます。Application Insights uses telemetry modules to automatically collect useful telemetry about specific workloads without requiring manual tracking by user.

次の自動収集モジュールが既定で有効になります。The following automatic-collection modules are enabled by default. これらのモジュールでは、自動的にテレメトリが収集されます。These modules are responsible for automatically collecting telemetry. それらを無効にするか構成して、既定の動作を変更できます。You can disable or configure them to alter their default behavior.

  • RequestTrackingTelemetryModule - 受信 Web 要求から RequestTelemetry を収集します。RequestTrackingTelemetryModule - Collects RequestTelemetry from incoming web requests.
  • DependencyTrackingTelemetryModule - 送信 http 呼び出しと sql 呼び出しから DependencyTelemetry を収集します。DependencyTrackingTelemetryModule - Collects DependencyTelemetry from outgoing http calls and sql calls.
  • PerformanceCollectorModule - Windows PerformanceCounters を収集します。PerformanceCollectorModule - Collects Windows PerformanceCounters.
  • QuickPulseTelemetryModule - Live Metrics ポータルで表示するテレメトリを収集します。QuickPulseTelemetryModule - Collects telemetry for showing in Live Metrics portal.
  • AppServicesHeartbeatTelemetryModule - アプリケーションがホストされる Azure App Service 環境について、(カスタム メトリックとして送信される) ハート ビートを収集します。AppServicesHeartbeatTelemetryModule - Collects heart beats (which are sent as custom metrics), about Azure App Service environment where application is hosted.
  • AzureInstanceMetadataTelemetryModule - アプリケーションがホストされる Azure VM 環境について、(カスタム メトリックとして送信される) ハート ビートを収集します。AzureInstanceMetadataTelemetryModule - Collects heart beats (which are sent as custom metrics), about Azure VM environment where application is hosted.
  • EventCounterCollectionModule - EventCounter を収集します。EventCounterCollectionModule - Collects EventCounters. このモジュールは新機能であり、SDK バージョン 2.8.0 以降で使用できます。This module is a new feature and is available in SDK Version 2.8.0 and higher.

既定の TelemetryModule を構成するには、下の画像のように、拡張メソッド ConfigureTelemetryModule<T>IServiceCollection で使用します。To configure any default TelemetryModule, use the extension method ConfigureTelemetryModule<T> on IServiceCollection, as shown in the following example.

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.Clear();
                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);
    }
}

テレメトリ チャネルを構成するConfiguring a telemetry channel

既定のチャネルは ServerTelemetryChannel です。The default channel is ServerTelemetryChannel. 次の例のようにしてオーバーライドできます。You can override it as the following example shows.

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();
    }

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

テレメトリを条件に基づき、動的に無効にする場合、コードの任意の場所に ASP.NET Core 依存関係挿入コンテナーを持つ TelemetryConfiguration インスタンスを解決し、それに DisableTelemetry フラグを設定できます。If you want to disable telemetry conditionally and dynamically, you may resolve TelemetryConfiguration instance with ASP.NET Core dependency injection container anywhere in your code and set DisableTelemetry flag on it.

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

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

上記は、自動収集モジュールでテレメトリが収集されないようにするものではありません。The above does not prevent any auto collection modules from collecting telemetry. 上記の方法では、Application Insights へのテレメトリの送信のみが無効になります。Only the sending of telemetry to Application Insights gets disabled with the above approach. 特定の自動収集モジュールが必要でない場合は、テレメトリ モジュールを削除することをお勧めしますIf a particular auto collection module is not desired, it is best to remove the telemetry module

よく寄せられる質問Frequently asked questions

Application Insights で ASP.NET Core 3.0 はサポートされますか?Does Application Insights support ASP.NET Core 3.0?

はい。Yes. Application Insights SDK for ASP.NET Core バージョン 2.8.0 以降に更新してください。Update to Application Insights SDK for ASP.NET Core version 2.8.0 or higher. これより古いバージョンの SDK では、ASP.NET Core 3.0 はサポートされていません。Older versions of the SDK do not support ASP.NET Core 3.0.

また、こちらの Visual Studio ベースの手順を使用している場合は、最新バージョンの Visual Studio 2019 (16.3.0) に更新してオンボードしてください。Also, if you are using Visual Studio based instructions from here, update to the latest version of Visual Studio 2019 (16.3.0) to onboard. 以前のバージョンの Visual Studio では、ASP.NET Core 3.0 アプリの自動オンボードはサポートされていません。Previous versions of Visual Studio do not support automatic onboarding for ASP.NET Core 3.0 apps.

自動的に収集されないテレメトリを追跡するにはどうすればよいですか?How can I track telemetry that's not automatically collected?

コンストラクター インジェクションを使用して TelemetryClient のインスタンスを取得し、そのインスタンスで必須の TrackXXX() メソッドを呼び出します。Get an instance of TelemetryClient by using constructor injection, and call the required TrackXXX() method on it. ASP.NET Core アプリケーションで新しい TelemetryClient インスタンスを作成することはお勧めしません。We don't recommend creating new TelemetryClient instances in an ASP.NET Core application. TelemetryClient のシングルトン インスタンスが DependencyInjection コンテナーに既に登録されており、それによって TelemetryConfiguration がテレメトリの残りの部分と共有されます。A singleton instance of TelemetryClient is already registered in the DependencyInjection container, which shares TelemetryConfiguration with rest of the telemetry. 新しい TelemetryClient インスタンスの作成は、残りのテレメトリとは別の構成が必要な場合にのみ推奨されます。Creating a new TelemetryClient instance is recommended only if it needs a configuration that's separate from the rest of the telemetry.

次の例では、コントローラーから追加のテレメトリを追跡する方法を確認できます。The following example shows how to track additional telemetry from a controller.

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 リファレンスに関するページを参照してください。For more information about custom data reporting in Application Insights, see Application Insights custom metrics API reference.

一部の Visual Studio テンプレートでは、Application Insights を有効にする目的で UseApplicationInsights() 拡張メソッドが IWebHostBuilder で使用されていました。Some Visual Studio templates used the UseApplicationInsights() extension method on IWebHostBuilder to enable Application Insights. この使用方法は今でも有効ですか?Is this usage still valid?

拡張メソッド UseApplicationInsights() はまだサポートされていますが、Application Insights SDK バージョン 2.8.0 以降では古いものとしてマークされています。While the extension method UseApplicationInsights() is still supported, it is marked obsolete in Application Insights SDK version 2.8.0 onwards. 次のメジャー バージョンの SDK で削除されます。It will be removed in the next major version of the SDK. Application Insights テレメトリを有効にする方法としては、いくつかの構成を制御するためのオーバーロードが用意されているため、AddApplicationInsightsTelemetry() を使用することをお勧めします。The recommended way to enable Application Insights telemetry is by using AddApplicationInsightsTelemetry() because it provides overloads to control some configuration. また、ASP.NET Core 3.0 アプリでは、services.AddApplicationInsightsTelemetry() が Application Insights を有効にする唯一の方法です。Also, in ASP.NET Core 3.0 apps, services.AddApplicationInsightsTelemetry() is the only way to enable application insights.

ASP.NET Core アプリケーションを Web Apps にデプロイしています。I'm deploying my ASP.NET Core application to Web Apps. Application Insights 拡張を Web アプリから有効にできますか?Should I still enable the Application Insights extension from Web Apps?

この記事に示されているように、SDK がビルド時にインストールされる場合は、App Service ポータルから Application Insights の拡張機能を有効にする必要はありません。If the SDK is installed at build time as shown in this article, you don't need to enable the Application Insights extension from the App Service portal. 拡張機能はインストールされていても、既に SDK がアプリケーションに追加されていることが検出されると、バックオフします。Even if the extension is installed, it will back off when it detects that the SDK is already added to the application. 拡張機能から Application Insights を有効にする場合、SDK をインストールして更新する必要はありません。If you enable Application Insights from the extension, you don't have to install and update the SDK. ただし、この記事の手順に従って Application Insights を有効にする場合は、次のような理由で柔軟性が増します。But if you enable Application Insights by following instructions in this article, you have more flexibility because:

  • Application Insights テレメトリは以下で引き続き機能します。Application Insights telemetry will continue to work in:
    • Windows、Linux、Mac を含む、すべてのオペレーティング システム。All operating systems, including Windows, Linux, and Mac.
    • 自己完結型やフレームワーク依存型など、すべての発行モード。All publish modes, including self-contained or framework dependent.
    • 完全 .NET Framework を含む、すべてのターゲット フレームワーク。All target frameworks, including the full .NET Framework.
    • Web Apps、VM、Linux、コンテナー、Azure Kubernetes Service、Azure 以外のホスティングなど、すべてのホスティング オプション。All hosting options, including Web Apps, VMs, Linux, containers, Azure Kubernetes Service, and non-Azure hosting.
    • プレビュー バージョンを含むすべての .NET Core バージョン。All .NET Core versions including preview versions.
  • Visual Studio からデバッグしているとき、テレメトリをローカル環境で見ることができます。You can see telemetry locally when you're debugging from Visual Studio.
  • TrackXXX() API を使って、追加のカスタム テレメトリを追跡できます。You can track additional custom telemetry by using the TrackXXX() API.
  • 構成を完全に制御できます。You have full control over the configuration.

Status Monitor などのツールを利用して Application Insights 監視を有効にできますか?Can I enable Application Insights monitoring by using tools like Status Monitor?

いいえ。No. 現在、Status MonitorStatus Monitor v2 では、ASP.NET 4.x のみがサポートされます。Status Monitor and Status Monitor v2 currently support ASP.NET 4.x only.

ASP.NET Core 2.0 アプリケーションでは、Application Insights が自動的に有効になりますか?Is Application Insights automatically enabled for my ASP.NET Core 2.0 application?

Microsoft.AspNetCore.All 2.0 メタパッケージには、Application Insights SDK (バージョン 2.1.0) が含まれていました。The Microsoft.AspNetCore.All 2.0 metapackage included the Application Insights SDK (version 2.1.0). アプリケーションを Visual Studio デバッガーの下で実行すると、Visual Studio によって Application Insights が有効にされ、テレメトリが IDE 自体にローカルに表示されます。If you run the application under Visual Studio debugger, Visual Studio enables Application Insights and shows telemetry locally in the IDE itself. テレメトリは、インストルメンテーション キーが指定されない限り、Application Insights サービスに送信されませんでした。Telemetry wasn't sent to the Application Insights service unless an instrumentation key was specified. 2.0 アプリについても、この記事の指示に従って Application Insights を有効にすることをお勧めします。We recommend following the instructions in this article to enable Application Insights, even for 2.0 apps.

Linux でアプリケーションを実行する場合、すべての機能がサポートされますか?If I run my application in Linux, are all features supported?

はい。Yes. SDK の機能サポートは、次の例外を除き、すべてのプラットフォームで同じです。Feature support for the SDK is the same in all platforms, with the following exceptions:

  • パフォーマンス カウンターは、Windows でのみサポートされます。Performance counters are supported only in Windows.
  • ServerTelemetryChannel が既定で有効になっていても、アプリケーションが Linux または MacOS で実行されているときは、ネットワークに問題がある場合に、チャネルによってテレメトリを一時的に保持するためのローカル ストレージ フォルダーが自動的に作成されることはありません。Even though ServerTelemetryChannel is enabled by default, if the application is running in Linux or MacOS, the channel doesn't automatically create a local storage folder to keep telemetry temporarily if there are network issues. この制限のため、ネットワークやサーバーに一時的に問題が発生すると、テレメトリが失われます。Because of this limitation, telemetry is lost when there are temporary network or server issues. この問題を回避するには、チャネル用のローカル フォルダーを構成します。To work around this issue, configure a local folder for the channel:
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();
    }

この SDK は、新しい .NET Core 3.0 ワーカー サービス テンプレート アプリケーションでサポートされていますか?Is this SDK supported for the new .NET Core 3.0 Worker Service template applications?

この SDK には HttpContext が必要であるため、.NET Core 3.0 ワーカー サービス アプリケーションを含め、HTTP 以外のアプリケーションでは機能しません。This SDK requires HttpContext, and hence does not work in any non-HTTP applications, including the .NET Core 3.0 Worker Service applications. 新しくリリースされた Microsoft.ApplicationInsights.WorkerService SDK を使用して、このようなアプリケーションで Application Insights を有効にする方法については、こちらを参照してください。Refer to this document for enabling application insights in such applications, using the newly released Microsoft.ApplicationInsights.WorkerService SDK.

オープンソース SDKOpen-source SDK

コードを読んで協力してください。Read and contribute to the code.

ビデオVideo

次のステップNext steps