Application Insights 中的系統性能計數器

Windows 提供各種 性能計數器,例如用來收集處理器、記憶體和磁碟使用量統計數據的計數器。 您也可以定義自己的效能計數器。

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

注意

下列文件依賴Application Insights傳統 API。 Application Insights 的長期計劃是使用 OpenTelemetry 收集數據。 如需詳細資訊,請參閱 為 .NET、Node.js、Python 和 Java 應用程式啟用 Azure 監視器 OpenTelemetry。

必要條件

將它新增至 效能監視器 Users 群組,授與應用程式集區服務帳戶許可權,以監視性能計數器。

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 例外狀況擲回 / 秒
  • ASP.NET ApplicationsRequest 運行時間
  • Process\Private Bytes
  • Process\IO Data Bytes/sec
  • ASP.NET 應用程式佇列中的應用程式\要求
  • 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>
    

注意

ASP.NET Core 應用程式沒有 ApplicationInsights.config,因此上述方法不適用於 ASP.NET Core 應用程式。

您可以擷取您已自行實作的標準計數器和計數器。 \Objects\Processes 是所有 Windows 系統上可用的標準計數器範例。 \Sales(photo)\# Items Sold 是可在 Web 服務中實作的自定義計數器範例。

格式為 \Category(instance)\Counter,或針對沒有 實體的類別,只有 \Category\Counter

ReportAs不符合的計數器名稱[a-zA-Z()/-_ \.]+需要 參數。 也就是說,它們包含不在下列集合中的字元:字母、圓括號、正斜線、連字元、底線、空格和點。

如果您指定 實例,則會收集為報告計量的維度 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.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 架構會category公開每個性能計數器的、 counterinstance名稱和名稱。 在每個應用程式的遙測中,您只會看到該應用程式的計數器。 例如,若要查看可用的計數器:

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 容器中執行的應用程式效能計數器

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

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

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

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

ASP.NET Core 中性能計數器的支援有限:

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

警示

如同其他計量,您可以 設定警示 ,以在性能計數器超出您指定的限制時發出警告。 若要設定警示,請開啟 [ 警示 ] 窗格,然後選取 [ 新增警示]。

下一步