次の方法で共有


Application Insights の .NET のカウンター

Azure MonitorApplication Insights では、パフォーマンス カウンターとイベント カウンターがサポートされます。 このガイドでは、.NET アプリケーションでの目的、構成、使用方法など、両方の概要について説明します。

注意事項

Azure Monitor Application Insights を利用する新規のアプリケーションやお客様には、Azure Monitor OpenTelemetry Distro をお勧めします。 Azure Monitor OpenTelemetry Distro では、Application Insights SDK と同様の機能とエクスペリエンスが提供されます。 .NETNode.jsPython 用の移行ガイドを使用して Application Insights SDK から移行することはできますが、私たちはまだ、下位互換性を確保するための機能をいくつか追加していくことに取り組んでいます。

概要

  • パフォーマンス カウンター は Windows オペレーティング システムに組み込まれており、CPU 使用率、メモリ使用量、ディスク アクティビティなどの定義済みのメトリックが提供されます。 これらのカウンターは、最小限のセットアップで標準のパフォーマンス メトリックを監視するのに最適です。 Windows ベースのアプリケーションでのリソース使用率の追跡やシステム レベルのボトルネックのトラブルシューティングに役立ちますが、カスタム アプリケーション固有のメトリックはサポートされていません。
  • イベント カウンター は、Windows、Linux、macOS など、複数のプラットフォームで動作します。 これにより、開発者は、軽量でカスタマイズ可能なアプリケーション固有のメトリックを定義および監視でき、パフォーマンス カウンターよりも柔軟性が高くなります。 イベント カウンターは、システム メトリックが不十分な場合や、クロスプラットフォーム アプリケーションで詳細なテレメトリが必要な場合に便利です。 明示的な実装と構成が必要であるため、セットアップの労力が増えます。

カウンターの構成

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

アプリケーションは、オンプレミスのホストまたは管理アクセス権を持つ仮想マシン上のインターネット インフォメーション サーバー (IIS) で実行されている場合、パフォーマンス カウンターの収集をサポートします。 Azure Web Apps として実行されているアプリケーションはパフォーマンス カウンターに直接アクセスできませんが、Application Insights は使用可能なカウンターのサブセットを収集します。

前提条件

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

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

カウンターを表示する

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

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

  • % Process\Processor Time
  • % Process\Processor Time Normalized
  • Memory\Available Bytes
  • ASP.NET Requests/Sec
  • スローされる .NET 共通言語ランタイム (CLR) 例外の数/秒
  • 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();

ASP.NET と Application Insights のカウント

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

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 環境) でシステム カウンターを取得するには、イベント カウンターを使用してください。

Log Analytics クエリ

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

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

performanceCounters | summarize count(), avg(value) by category, instance, counter

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

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

performanceCounters | where counter == "Available Bytes" | summarize avg(value), min(value) by bin(timestamp, 1h) | render timechart

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

performanceCounters | where counter == "% Processor Time" and instance == "SendMetrics" | summarize avg(value) by cloud_RoleInstance, bin(timestamp, 1d)

警告

他のメトリックと同様に、アラートを設定し、カウンターが指定した制限を超える場合に警告することができます。

アラートを設定するには、[アラート] ウィンドウを開き、[アラートの追加] を選択します。

よく寄せられる質問

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

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