.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
는 임시 상태 모니터링 및 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
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