Application Insights のシステム パフォーマンス カウンターSystem performance counters in Application Insights

Windows には、CPU 占有率や、メモリ、ディスク、ネットワークの使用率など、広範なパフォーマンス カウンターが用意されています。Windows provides a wide variety of performance counters such as CPU occupancy, memory, disk, and network usage. ユーザーが独自のパフォーマンス カウンターを定義することもできます。You can also define your own performance counters. アプリケーションがオンプレミス ホスト上、または管理権限を持っている仮想マシン上の IIS で実行されている限り、パフォーマンス カウンターの収集はサポートされます。Performance counters collection is supported as long as your application is running under IIS on an on-premises host, or virtual machine to which you have administrative access. Azure Web Apps として実行されているアプリケーションはパフォーマンス カウンターには直接アクセスできませんが、使用可能なカウンターのサブセットが Application Insights によって収集されます。Though applications running as Azure Web Apps don't have direct access to performance counters, a subset of available counters are collected by Application Insights.

カウンターを表示するView counters

[メトリック] ウィンドウには、既定のパフォーマンス カウンターのセットが表示されます。The Metrics pane shows the default set of performance counters.

Application Insights で表示されるパフォーマンス カウンター

ASP.NET/ASP.NET Core Web アプリケーションについて収集するように構成されている現在の既定カウンターは次のとおりです。The current default counters that are configured to be collected for ASP.NET/ASP.NET Core web applications are:

  • % Process\Processor Time% Process\Processor Time
  • % Process\Processor Time Normalized% Process\Processor Time Normalized
  • Memory\Available BytesMemory\Available Bytes
  • ASP.NET Requests/SecASP.NET Requests/Sec
  • .NET CLR Exceptions Thrown / sec.NET CLR Exceptions Thrown / sec
  • ASP.NET ApplicationsRequest Execution TimeASP.NET ApplicationsRequest Execution Time
  • Process\Private BytesProcess\Private Bytes
  • Process\IO Data Bytes/secProcess\IO Data Bytes/sec
  • ASP.NET Applications\Requests In Application QueueASP.NET Applications\Requests In Application Queue
  • Processor(_Total)\% Processor TimeProcessor(_Total)\% Processor Time

カウンターを追加するAdd counters

目的のパフォーマンス カウンターがメトリックの一覧に含まれていない場合は、追加することができます。If the performance counter you want isn't included in the list of metrics, you can add it.

  1. サーバーで使えるカウンターを確認するには、ローカル サーバーで次の PowerShell コマンドを実行します。Find out what counters are available in your server by using this PowerShell command on the local server:

    Get-Counter -ListSet *

    (「Get-Counter」をご覧ください)(See Get-Counter.)

  2. ApplicationInsights.config を開きます。Open ApplicationInsights.config.

    • 開発中にアプリに Application Insights を追加した場合は、プロジェクトで ApplicationInsights.config を編集して、サーバーに再デプロイします。If you added Application Insights to your app during development, edit ApplicationInsights.config in your project, and then redeploy it to your servers.
  3. パフォーマンス コレクター ディレクティブを編集します。Edit the performance collector directive:

    
        <Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector">
          <Counters>
            <Add PerformanceCounter="\Objects\Processes"/>
            <Add PerformanceCounter="\Sales(photo)\# Items Sold" ReportAs="Photo sales"/>
          </Counters>
        </Add>
    

注意

ASP.NET Core アプリケーションには ApplicationInsights.config がないため、上記の方法は ASP.NET Core アプリケーションには無効です。ASP.NET Core applications do not have ApplicationInsights.config, and hence the above method is not valid for ASP.NET Core Applications.

標準カウンターとカスタム カウンターの両方をキャプチャできます。You can capture both standard counters and those you've implemented yourself. \Objects\Processes は、すべての Windows システムで使える標準カウンターの例です。\Objects\Processes is an example of a standard counter that is available on all Windows systems. \Sales(photo)\# Items Sold は、Web サービスに実装されているカスタム カウンターの例です。\Sales(photo)\# Items Sold is an example of a custom counter that might be implemented in a web service.

形式は \Category(instance)\Counter" です。インスタンスが存在しないカテゴリの場合は、単に \Category\Counter です。The format is \Category(instance)\Counter", or for categories that don't have instances, just \Category\Counter.

ReportAs に一致しないカウンター名の場合、つまり英字、丸かっこ、スラッシュ、ハイフン、アンダースコア、スペース、ドット (.) 以外の文字が含まれる場合は、[a-zA-Z()/-_ \.]+ が必要です。ReportAs is required for counter names that do not match [a-zA-Z()/-_ \.]+ - that is, they contain characters that are not in the following sets: letters, round brackets, forward slash, hyphen, underscore, space, dot.

インスタンスを指定した場合は、報告されるメトリックの "CounterInstanceName" ディメンションとして収集されます。If you specify an instance, it will be collected as a dimension "CounterInstanceName" of the reported metric.

ASP.NET Web アプリケーションまたは .NET/.NET Core Console アプリケーションについてコードでパフォーマンス カウンターを収集するCollecting performance counters in code for ASP.NET Web Applications or .NET/.NET Core Console Applications

システム パフォーマンス カウンターを収集し、それらを Application Insights に送信する場合は、次のスニペットを使用できます。To collect system performance counters and send them to Application Insights, you can adapt the snippet below:

    var perfCollectorModule = new PerformanceCollectorModule();
    perfCollectorModule.Counters.Add(new PerformanceCounterCollectionRequest(
      @"\Process([replace-with-application-process-name])\Page Faults/sec", "PageFaultsPerfSec")));
    perfCollectorModule.Initialize(TelemetryConfiguration.Active);

作成したカスタム メトリックの場合も同様です。Or you can do the same thing with custom metrics you created:

    var perfCollectorModule = new PerformanceCollectorModule();
    perfCollectorModule.Counters.Add(new PerformanceCounterCollectionRequest(
      @"\Sales(photo)\# Items Sold", "Photo sales"));
    perfCollectorModule.Initialize(TelemetryConfiguration.Active);

ASP.NET Core Web アプリケーションについてコードでパフォーマンス カウンターを収集するCollecting performance counters in code for ASP.NET Core Web Applications

以下の ConfigureServices クラスの Startup.cs メソッドを変更します。Modify ConfigureServices method in your Startup.cs class as below.

using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector;

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

        // The following configures PerformanceCollectorModule.
  services.ConfigureTelemetryModule<PerformanceCollectorModule>((module, o) =>
            {
                // the application process name could be "dotnet" for ASP.NET Core self-hosted applications.
                module.Counters.Add(new PerformanceCounterCollectionRequest(
    @"\Process([replace-with-application-process-name])\Page Faults/sec", "DotnetPageFaultsPerfSec"));
            });
    }

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

Analytics でパフォーマンス カウンター レポートを検索して表示できます。You can search and display performance counter reports in Analytics.

performanceCounters スキーマは、各パフォーマンス カウンターの categorycounter 名、および instance 名を表示します。The performanceCounters schema exposes the category, counter name, and instance name of each performance counter. 各アプリケーションのテレメトリでは、そのアプリケーションのカウンターのみが確認できます。In the telemetry for each application, you'll see only the counters for that application. たとえば、使用できるカウンターを表示するには次のようにします。For example, to see what counters are available:

Application Insights Analytics のパフォーマンス カウンター

(ここで、"instance" は役割またはサーバー マシンのインスタンスではなくパフォーマンス カウンターのインスタンスを示します。('Instance' here refers to the performance counter instance, not the role, or server machine instance. パフォーマンス カウンター インスタンス名は通常、プロセスまたはアプリケーションの名前によって、プロセッサ時間などのカウンターをセグメントに分割します。)The performance counter instance name typically segments counters such as processor time by the name of the process or application.)

最近の利用可能なメモリのグラフを取得するには、次のようにします。To get a chart of available memory over the recent period:

Application Insights Analytics のメモリ タイムチャート

他のテレメトリと同様に、performanceCounters にも、アプリを実行しているホスト サーバー インスタンスの ID を示す列 cloud_RoleInstance があります。Like other telemetry, performanceCounters also has a column cloud_RoleInstance that indicates the identity of the host server instance on which your app is running. たとえば、異なるコンピューター上でのアプリのパフォーマンスを比較するには、次のようにします。For example, to compare the performance of your app on the different machines:

Application Insights Analytics でロール インスタンス別にセグメント化されたパフォーマンス

ASP.NET と Application Insights のカウントASP.NET and Application Insights counts

例外レートと例外のメトリックの違いは何ですかWhat's the difference between the Exception rate and Exceptions metrics?

  • 例外レート はシステム パフォーマンス カウンターです。Exception rate is a system performance counter. CLR ではスローされた処理済みおよび未処理の例外をすべてカウントし、特定のサンプリング時間間隔での合計をその時間間隔の長さで除算します。The CLR counts all the handled and unhandled exceptions that are thrown, and divides the total in a sampling interval by the length of the interval. Application Insights SDK では、この結果を収集し、ポータルに送信します。The Application Insights SDK collects this result and sends it to the portal.

  • 例外 は、グラフのサンプリング時間間隔中にポータルが受信した TrackException レポートの数です。Exceptions is a count of the TrackException reports received by the portal in the sampling interval of the chart. これには、コード内で TrackException 呼び出しが記述されている処理済みの例外のみが含まれ、 未処理の例外はいずれも含められません。It includes only the handled exceptions where you have written TrackException calls in your code, and doesn't include all unhandled exceptions.

Azure Web Apps で実行されているアプリケーションのパフォーマンス カウンターPerformance counters for applications running in Azure Web Apps

Azure Web Apps にデプロイされた ASP.NET アプリケーションと ASP.NET Core アプリケーションは、特別なサンド ボックス環境で実行されます。Both ASP.NET and ASP.NET Core applications deployed to Azure Web Apps run in a special sandbox environment. この環境では、システム パフォーマンス カウンターへの直接アクセスは許可されません。This environment does not allow direct access to system performance counters. ただし、ここに記載されているように、限定されたカウンターのサブセットが、環境変数として公開されています。However, a limited subset of counters are exposed as environment variables as described here. ASP.NET および ASP.NET Core 用 Application Insights SDK は、これらの環境変数から、Azure Web Apps からのパフォーマンス カウンターを収集します。Application Insights SDK for ASP.NET and ASP.NET Core collects performance counters from Azure Web Apps from these special environment variables. この環境ではカウンターのサブセットのみが使用可能で、完全な一覧はここにあります。Only a subset of counters are available in this environment, and the full list can be found here.

ASP.NET Core アプリケーションのパフォーマンス カウンターPerformance counters in ASP.NET Core applications

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

警告Alerts

他のメトリックと同様に、パフォーマンス カウンターが指定した制限を超えた場合に警告するアラートを設定できます。Like other metrics, you can set an alert to warn you if a performance counter goes outside a limit you specify. [アラート] ウィンドウを開き、[アラートの追加] をクリックします。Open the Alerts pane and click Add Alert.

次のステップNext steps