.NET 中的網路事件計數器
EventCounters 是 .NET API,用於輕量、跨平台和近即時效能的計量集合。
使用 EventCounters 檢測網路元件後,會發佈基本的診斷資訊。 其中包含的資訊如下:
System.Net.Http
>requests-started
System.Net.Http
>requests-failed
System.Net.Http
>http11-connections-current-total
System.Net.Security
>all-tls-sessions-open
System.Net.Sockets
>outgoing-connections-established
System.Net.NameResolution
>dns-lookups-duration
提示
如需完整清單,請參閱已知的計數器。
提示
在以 .NET 8+ 為目標的專案上,請考慮使用較新且功能更豐富的網路計量,而不是 EventCounters。
提供者
網路資訊會分割到下列提供者:
System.Net.Http
(HttpClient
和SocketsHttpHandler
)System.Net.NameResolution
(Dns
)System.Net.Security
(SslStream
)System.Net.Sockets
Microsoft.AspNetCore.Hosting
Microsoft-AspNetCore-Server-Kestrel
啟用遙測會有一些效能負荷的情況,因此請務必只訂閱您實際感興趣的提供者。
從程序外部監視事件計數器
dotnet-counters
dotnet-counters
是跨平台效能監視工具,適用於臨機操作的狀況監控和第一層級的效能調查。
dotnet tool install --global dotnet-counters
dotnet-counters monitor --counters System.Net.Http,System.Net.Security --process-id 1234
此命令會以最新的數字持續重新整理主控台。
[System.Net.Http]
Current Http 1.1 Connections 3
Current Http 2.0 Connections 1
Current Http 3.0 Connections 0
Current Requests 4
HTTP 1.1 Requests Queue Duration (ms) 0
HTTP 2.0 Requests Queue Duration (ms) 0
HTTP 3.0 Requests Queue Duration (ms) 0
Requests Failed 0
Requests Failed Rate (Count / 1 sec) 0
Requests Started 470
Requests Started Rate (Count / 1 sec) 18
如需所有可用的命令和參數,請參閱 dotnet-counter 文件。
Application Insights
Application Insights 預設不會收集事件計數器。 如需自訂您感興趣的計數器組合詳細資訊,請參閱 AppInsights EventCounters 文件。
例如:
services.ConfigureTelemetryModule<EventCounterCollectionModule>((module, options) =>
{
module.Counters.Add(new EventCounterCollectionRequest("System.Net.Http", "current-requests"));
module.Counters.Add(new EventCounterCollectionRequest("System.Net.Http", "requests-failed"));
module.Counters.Add(new EventCounterCollectionRequest("System.Net.Http", "http11-connections-current-total"));
module.Counters.Add(new EventCounterCollectionRequest("System.Net.Security", "all-tls-sessions-open"));
});
如需如何訂閱許多執行階段和 ASP.NET 事件計數器的範例,請參閱 RuntimeEventCounters 範例。 只要針對每個項目新增 EventCounterCollectionRequest
即可。
foreach (var (eventSource, counters) in RuntimeEventCounters.EventCounters)
{
foreach (string counter in counters)
{
module.Counters.Add(new EventCounterCollectionRequest(eventSource, counter));
}
}
在程序內取用事件計數器
Yarp.Telemetry.Consumption
程式庫可讓您輕鬆地從程序內取用事件計數器。
雖然套件目前對隨著 YARP 專案維護,但可用於任何 .NET 應用程式中。
若要使用,請實作 IMetricsConsumer<TMetrics>
介面:
public sealed class MyMetricsConsumer : IMetricsConsumer<SocketsMetrics>
{
public void OnMetrics(SocketsMetrics previous, SocketsMetrics current)
{
var elapsedTime = (current.Timestamp - previous.Timestamp).TotalMilliseconds;
Console.WriteLine($"Received {current.BytesReceived - previous.BytesReceived} bytes in the last {elapsedTime:N2} ms");
}
}
然後向您的 DI 容器註冊該實作:
services.AddSingleton<IMetricsConsumer<SocketsMetrics>, MyMetricsConsumer>();
services.AddTelemetryListeners();
程式庫提供下列強型別計量類型:
需要更多遙測?
如果您有其他可以透過事件或計量公開的實用資訊建議,請建立 dotnet/runtime 問題。
如果您使用的是 Yarp.Telemetry.Consumption
程式庫而且您有任何建議,請建立 microsoft/reverse-proxy 問題。