Application Insights 中 .NET 的計數器
Azure 監視器Application Insights 支援性能計數器和事件計數器。 本指南提供兩者的概觀,包括其用途、組態和 .NET 應用程式中的使用方式。
警告
我們建議為新應用程式或客戶提供 Azure 監視器 Application Insights 的 Azure 監視器 OpenTelemetry 散發版本。 Azure 監視器 OpenTelemetry 散發版本提供與 Application Insights SDK 類似的功能和體驗。 您可以使用適用於 .NET、Node.js 和 Python 的移轉指南,從 Application Insights SDK 移轉,但我們仍在努力新增更多功能以提供回溯相容性。
概觀
- 性能計數器 內建於 Windows作系統中,並提供預先定義的計量,例如 CPU 使用量、記憶體耗用量和磁碟活動。 這些計數器很適合用來監視最低設定的標準效能計量。 它們有助於追蹤資源使用率,或針對 Windows 應用程式中的系統層級瓶頸進行疑難解答,但不支援自定義應用程式特定計量。
- 事件計數器可 跨多個平台運作,包括 Windows、Linux 和 macOS。 它們可讓開發人員定義及監視羽量型、可自定義的應用程式特定計量,以提供比性能計數器更多的彈性。 當系統計量不足或跨平臺應用程式中需要詳細遙測時,事件計數器就很有用。 它們需要明確的實作和設定,讓設定更加費心。
設定計數器
Windows 提供各種 性能計數器,例如用來收集處理器、記憶體和磁碟使用量統計數據的計數器。 您也可以定義自己的效能計數器。
如果您的應用程式在內部部署主機或具有系統管理存取權的虛擬機上,在 Internet Information Server (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 要求/秒
- .NET Common Language Runtime (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
新增計數器
如果計量清單中未包含您想要的效能計數器,您可以新增該計數器。
在本機伺服器上使用以下 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
。
不符合 [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();
ASP.NET 和 Application Insights 計數
以下小節討論 ASP.NET 和 Application Insights 計數。
在 Azure App Service 上於 Azure Web Apps 和 Windows 容器中執行的應用程式效能計數器
部署至 Azure Web Apps 的 ASP.NET 和 ASP.NET Core 應用程式都是在特殊的沙箱環境中執行。 部署至 Azure App 服務的應用程式可以利用 Windows 容器,或裝載於沙箱環境中。 如果應用程式部署在 Windows 容器中,容器映像中會提供所有標準效能計數器。
此沙箱環境不允許直接存取系統效能計數器。 不過,有限的計數器子集會公開為環境變數,如公開為環境變數的效能計數器中所述。 只能在此環境中取得計數器的子集。 如需完整清單,請參閱公開為環境變數的效能計數器。
適用於 ASP.NET 和 ASP.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 環境),請使用事件計數器。
Log Analytics 查詢
您可以在記錄分析中搜尋並顯示效能計數器報表。
PerformanceCounters 結構描述會公開每個效能計數器的 category
、counter
名稱和 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 也有 cloud_RoleInstance
資料行可指出應用程式執行所在主機伺服器執行個體的身分識別。 例如,若要比較不同機器上的應用程式效能︰
performanceCounters | where counter == "% Processor Time" and instance == "SendMetrics" | summarize avg(value) by cloud_RoleInstance, bin(timestamp, 1d)
警示
如同其他計量,您可以 設定警示 ,以在計數器超出指定的限制時發出警告。
若要設定警示,請開啟 [警示] 窗格,然後選取 [新增警示]。