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-カウンター
dotnet-counters
は、アドホック正常性監視と第 1 レベルのパフォーマンス調査のためのクロスプラットフォーム パフォーマンス監視ツールです。
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 では、既定ではイベント カウンターは収集されません。 関心のあるカウンターのセットのカスタマイズについては、 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 の問題を作成します。
.NET