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

Windows には、プロセッサ、メモリ、ディスクの使用率の統計を収集するために使用されるものなど、広範なパフォーマンス カウンターが用意されています。 ユーザーが独自のパフォーマンス カウンターを定義することもできます。

アプリケーションがオンプレミス ホスト上の IIS で実行されているか、自分が管理権限を持っている仮想マシンである限り、パフォーマンス カウンターの収集はサポートされます。 Azure Web Apps として実行されているアプリケーションはパフォーマンス カウンターには直接アクセスできませんが、使用可能なカウンターのサブセットが Application Insights によって収集されます。

Note

以下のドキュメントは、Application Insights クラシック API に関するものです。 Application Insights の長期的な計画は、OpenTelemetry を使用してデータを収集することです。 詳細については、「.NET、Node.js、Python、Java アプリケーション用の Azure Monitor OpenTelemetry を有効にする」を参照してください。

前提条件

パフォーマンス モニター ユーザー グループに追加して、パフォーマンス カウンターを監視するアクセス許可をアプリ プール サービス アカウントに付与します。

net localgroup "Performance Monitor Users" /add "IIS APPPOOL\NameOfYourPool"

カウンターを表示する

[メトリック] ウィンドウには、既定のパフォーマンス カウンターのセットが表示されます。

Screenshot that shows performance counters reported in Application Insights.

ASP.NET Web アプリケーション用の現在の既定のカウンター:

  • % Process\Processor Time
  • % Process\Processor Time Normalized
  • Memory\Available Bytes
  • ASP.NET Requests/Sec
  • .NET CLR Exceptions Thrown / sec
  • ASP.NET ApplicationsRequest Execution Time
  • Process\Private Bytes
  • Process\IO Data Bytes/sec
  • ASP.NET Applications\Requests In Application Queue
  • Processor(_Total)\% プロセッサ時間

ASP.NET Core Web アプリケーション用に収集された現在の既定のカウンター:

  • % Process\Processor Time
  • % Process\Processor Time Normalized
  • Memory\Available Bytes
  • Process\Private Bytes
  • Process\IO Data Bytes/sec
  • Processor(_Total)\% プロセッサ時間

カウンターを追加する

目的のパフォーマンス カウンターがメトリックの一覧に含まれていない場合は、追加することができます。

  1. サーバーで使えるカウンターを確認するには、ローカル サーバーで次の PowerShell コマンドを実行します。

    Get-Counter -ListSet *
    

    詳細については、「Get-Counter」を参照してください。

  2. ApplicationInsights.configを開きます。

    開発の間にアプリに Application Insights を追加した場合は、以下のようにします。

    1. プロジェクトで ApplicationInsights.config を編集します。
    2. サーバーに再デプロイします。
  3. パフォーマンス コレクター ディレクティブを編集します。

    
        <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>
    

Note

ASP.NET Core アプリケーションには ApplicationInsights.config がないため、上記のメソッドは、ASP.NET Core アプリケーションでは有効ではありません。

標準カウンターと自分で実装したカウンターの両方をキャプチャできます。 \Objects\Processes は、すべての Windows システムで使える標準カウンターの例です。 \Sales(photo)\# Items Sold は、Web サービスに実装されているカスタム カウンターの例です。

形式は \Category(instance)\Counter です。インスタンスが存在しないカテゴリの場合は、単に \Category\Counter です。

[a-zA-Z()/-_ \.]+ と一致しないカウンター名には ReportAs パラメーターが必要です。 つまり、英字、丸かっこ、スラッシュ、ハイフン、アンダースコア、スペース、ドット (.) 以外の文字が含まれる場合です。

インスタンスを指定した場合は、報告されるメトリックのディメンション CounterInstanceName として収集されます。

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

システム パフォーマンス カウンターを収集し、それらを Application Insights に送信する場合は、次のスニペットを使用できます。

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

作成したカスタム メトリックの場合も同様です。

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

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

Program.csWebApplication.CreateBuilder() メソッドの後に PerformanceCollectorModule を構成します。

using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddApplicationInsightsTelemetry();

// The following configures PerformanceCollectorModule.

builder.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"));
    });

var app = builder.Build();

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

Log Analytics でパフォーマンス カウンター レポートを検索して表示できます。

performanceCounters スキーマは、各パフォーマンス カウンターの categorycounter 名、および instance 名を表示します。 各アプリケーションのテレメトリでは、そのアプリケーションのカウンターのみが確認できます。 たとえば、使用できるカウンターを表示するには次のようにします。

Screenshot that shows performance counters in Application Insights analytics.

ここで、Instance は役割またはサーバー マシンのインスタンスではなくパフォーマンス カウンターのインスタンスを示します。 パフォーマンス カウンター インスタンス名は通常、プロセスまたはアプリケーションの名前によって、プロセッサ時間などのカウンターをセグメントに分割します。

最近の利用可能なメモリのグラフを取得するには、次のようにします。

Screenshot that shows a memory time chart in Application Insights analytics.

他のテレメトリと同様に、performanceCounters にも、アプリを実行しているホスト サーバー インスタンスの ID を示す列 cloud_RoleInstance があります。 たとえば、異なるコンピューター上でのアプリのパフォーマンスを比較するには、次のようにします。

Screenshot that shows performance segmented by role instance in Application Insights analytics.

ASP.NET と Application Insights のカウント

次のセクションでは、ASP.NET と Application Insights のカウントについて説明します。

例外レートと例外のメトリックの違いは何ですか

  • Exception rate: 例外レートはシステム パフォーマンス カウンターです。 CLR ではスローされた処理済みおよび未処理の例外をすべてカウントし、特定のサンプリング時間間隔での合計をその時間間隔の長さで除算します。 Application Insights SDK では、この結果を収集し、ポータルに送信します。
  • Exceptions: 例外メトリックは、グラフのサンプリング時間間隔中にポータルが受信した TrackException レポートの数です。 これには、コード内で TrackException 呼び出しを記述した処理済みの例外のみが含まれます。 すべての未処理の例外が含まれているわけではありません。

Azure Web Apps と Azure App Service 上の Windows コンテナーで実行されているアプリケーションのパフォーマンス カウンター

Azure Web Apps にデプロイされた ASP.NET アプリケーションと ASP.NET Core アプリケーションは、特別なサンド ボックス環境で実行されます。 Azure App Service にデプロイされたアプリケーションは、Windows コンテナーを利用するか、サンドボックス環境でホストすることができます。 アプリケーションが Windows コンテナーにデプロイされている場合は、すべての標準パフォーマンス カウンターをコンテナー イメージで使用できます。

サンドボックス環境では、システム パフォーマンス カウンターへの直接アクセスはできません。 ただし、「環境変数として公開されるパフォーマンス カウンター」に記載されているように、限定されたカウンターのサブセットが、環境変数として公開されています。 この環境ではカウンターのサブセットのみが使用可能です。 完全な一覧については、「環境変数として公開されるパフォーマンス カウンター」を参照してください。

Application Insights SDK for ASP.NET および ASP.NET Core は、コードが Web アプリまたは Windows 以外のコンテナーにデプロイされているかどうかを検出します。 この検出により、サンドボックス環境でパフォーマンス カウンターを収集するか、Windows コンテナーまたは仮想マシンでホストされている場合に標準の収集メカニズムを利用するかが決まります。

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

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 を使用してください。

警告

他のメトリックと同様に、パフォーマンス カウンターが指定した制限を超えた場合に警告するアラートを設定できます。 アラートを設定するには、[アラート] ウィンドウを開き、[アラートの追加] を選択します。

次のステップ