共用方式為


.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 (HttpClientSocketsHttpHandler)
  • 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 問題