Application Insights 中的系統效能計數器

Windows 提供多種效能計數器,例如用於收集處理器、記憶體、磁碟使用量統計資料的這些。 您也可以定義自己的效能計數器。

如果應用程式是在您具有系統管理存取權的內部部署主機或虛擬機器上於 IIS 下執行,則支援收集效能計數器。 雖然以 Azure Web Apps 執行的應用程式無法直接存取效能計數器,但 Application Insights 會收集可用計數器的子集。

注意

下列文件以 Application Insights 傳統 API 為依據。 Application Insights 的長期計劃是使用 OpenTelemetry 收集資料。 如需詳細資訊,請參閱啟用適用於 .NET、Node.js、Python 和 Java 應用程式的 Azure 監視器 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 要求/秒
  • 擲回的 .NET CLR 例外狀況數/秒
  • ASP.NET ApplicationsRequest 執行時間
  • 處理序\私用位元組
  • Process\IO Data Bytes/sec
  • 應用程式佇列中的 ASP.NET 應用程式\要求
  • Processor(_Total)\% Processor Time

ASP.NET Core Web 應用程式目前收集的預設計數器:

  • % Process\Processor Time
  • % Process\Processor Time Normalized
  • Memory\Available Bytes
  • 處理序\私用位元組
  • Process\IO Data Bytes/sec
  • Processor(_Total)\% Processor Time

新增計數器

如果計量清單中未包含您想要的效能計數器,您可以新增該計數器。

  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>
    

注意

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 主控台應用程式的效能計數器

若要收集系統效能計數器並將其傳送至 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.cs 中的 WebApplication.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();

記錄分析中的效能計數器

您可以在記錄分析中搜尋並顯示效能計數器報表。

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 也有 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 App Service 上於 Azure Web Apps 和 Windows 容器中執行的應用程式效能計數器

部署至 Azure Web Apps 的 ASP.NET 和 ASP.NET Core 應用程式都是在特殊的沙箱環境中執行。 部署至 Azure App 服務的應用程式可以利用 Windows 容器,或裝載於沙箱環境中。 如果應用程式部署在 Windows 容器中,容器映像中會提供所有標準效能計數器。

此沙箱環境不允許直接存取系統效能計數器。 不過,有限的計數器子集會公開為環境變數,如公開為環境變數的效能計數器中所述。 只能在此環境中取得計數器的子集。 如需完整清單,請參閱公開為環境變數的效能計數器

適用於 ASP.NETASP.NET Core 的 Application Insights SDK 會偵測程式碼是否已部署至 Web 應用程式或非 Windows 容器。 偵測會決定其是否在沙箱環境中收集效能計數器,或在 Windows 容器或虛擬機器上裝載時使用標準收集機制。

ASP.NET Core 應用程式中的效能計數器

ASP.NET Core 效能計數器的支援受限制:

  • 如果應用程式是在 Azure Web Apps (Windows) 中執行,SDK 版本2.4.1 和以後版本會收集效能計數器。
  • 如果應用程式是在 Windows 中執行,而且目標是 NETSTANDARD2.0 或以後版本,SDK 版本2.7.1 和更新版本會收集效能計數器。
  • 對於以 .NET Framework 為目標的應用程式,所有版本的 SDK 都支援效能計數器。
  • SDK 版本 2.8.0 和更新版本支援 Linux 中的 CPU/記憶體計數器。 Linux 不支援其他計數器。 若要在 Linux (和其他非 Windows 環境) 中取得系統計數器,請使用 EventCounters

警示

與其他計量一樣,您可以設定警示,在效能計數器超出您指定的界限時提出警告。 若要設定警示,請開啟 [警示] 窗格,然後選取 [新增警示]

下一步