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"
檢視計數器
[ 計量] 窗格會顯示一組預設的性能計數器。
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)\% 處理器時間
新增計數器
如果您想要的性能計數器未包含在計量清單中,您可以加以新增。
在本機伺服器上使用此 PowerShell 命令,找出伺服器中可用的計數器:
Get-Counter -ListSet *
如需詳細資訊,請參閱
Get-Counter
。開啟 [
ApplicationInsights.config
]。如果您在開發期間將 Application Insights 新增至您的應用程式:
- 在您的項目中編輯
ApplicationInsights.config
。 - 將它重新部署至您的伺服器。
- 在您的項目中編輯
編輯效能收集器指示詞:
<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.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();
Log Analytics 中的性能計數器
您可以在 Log Analytics 中搜尋及顯示性能計數器報告。
performanceCounters 架構會category
公開每個性能計數器的、 counter
instance
名稱和名稱。 在每個應用程式的遙測中,您只會看到該應用程式的計數器。 例如,若要查看可用的計數器:
在這裡, Instance
是指性能計數器實例,而不是角色或伺服器計算機實例。 性能計數器實例名稱通常會依進程或應用程式的名稱區隔計數器,例如處理器時間。
若要在最近一段時間內取得可用記憶體的圖表:
與其他遙測一樣, performanceCounters 也有一個數據行 cloud_RoleInstance
,指出應用程式執行所在的主機伺服器實例身分識別。 例如,若要比較不同電腦上應用程式效能:
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.NET 和 ASP.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。
警示
如同其他計量,您可以 設定警示 ,以在性能計數器超出您指定的限制時發出警告。 若要設定警示,請開啟 [ 警示 ] 窗格,然後選取 [ 新增警示]。