.NET'te ağ olay sayaçları
EventCounters basit, platformlar arası ve neredeyse gerçek zamanlı performans ölçümü toplama için kullanılan .NET API'leridir.
Ağ bileşenleri, EventCounters kullanarak temel tanılama bilgilerini yayımlamak için izlenir. Bunlar aşağıdaki gibi bilgiler içerir:
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
İpucu
Listenin tamamı için bkz . iyi bilinen sayaçlar.
İpucu
.NET 8+ sürümünü hedefleyen projelerde EventCounters yerine daha yeni ve daha zengin özellik özellikli ağ ölçümlerini kullanmayı göz önünde bulundurun.
Sağlayıcılar
Ağ bilgileri aşağıdaki sağlayıcılar arasında bölünür:
System.Net.Http
(HttpClient
veSocketsHttpHandler
)System.Net.NameResolution
(Dns
)System.Net.Security
(SslStream
)System.Net.Sockets
Microsoft.AspNetCore.Hosting
Microsoft-AspNetCore-Server-Kestrel
Telemetrinin etkinleştirildiğinde bazı performans yükleri vardır, bu nedenle yalnızca gerçekten ilgilendiğiniz sağlayıcılara abone olduğunuzdan emin olun.
İşlem dışından olay sayaçlarını izleme
dotnet-counters
dotnet-counters
geçici sistem durumu izleme ve birinci düzey performans araştırması için platformlar arası bir performans izleme aracıdır.
dotnet tool install --global dotnet-counters
dotnet-counters monitor --counters System.Net.Http,System.Net.Security --process-id 1234
komutu konsolu sürekli olarak en son sayılarla yeniler.
[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
Tüm kullanılabilir komutlar ve parametreler için dotnet-counter belgelerine bakın.
Application Insights
Uygulama Analizler varsayılan olarak olay sayaçlarını toplamaz. İlgilendiğiniz sayaç kümesini özelleştirme hakkında bilgi için App Analizler EventCounters belgelerine bakın.
Örneğin:
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"));
});
Birçok çalışma zamanına ve ASP.NET olay sayacına abone olma örneği için RuntimeEventCounters örneğine bakın. Her giriş için bir EventCounterCollectionRequest
eklemeniz yeterlidir.
foreach (var (eventSource, counters) in RuntimeEventCounters.EventCounters)
{
foreach (string counter in counters)
{
module.Counters.Add(new EventCounterCollectionRequest(eventSource, counter));
}
}
İşlemdeki olay sayaçlarını kullanma
Kitaplık, Yarp.Telemetry.Consumption
işlem içinden olay sayaçlarının kullanılmasını kolaylaştırır.
Paket şu anda YARP projesinin bir parçası olarak korunsa da, herhangi bir .NET uygulamasında kullanılabilir.
Bunu kullanmak için arabirimini IMetricsConsumer<TMetrics>
uygulayın:
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");
}
}
Ardından uygulamaları DI kapsayıcınıza kaydedin:
services.AddSingleton<IMetricsConsumer<SocketsMetrics>, MyMetricsConsumer>();
services.AddTelemetryListeners();
Kitaplık aşağıdaki kesin olarak belirlenmiş ölçüm türlerini sağlar:
Daha fazla telemetriye mi ihtiyacınız var?
Olaylar veya ölçümler aracılığıyla kullanıma sunulacak diğer yararlı bilgiler için önerileriniz varsa bir dotnet/runtime sorunu oluşturun.
Kitaplığı kullanıyorsanız Yarp.Telemetry.Consumption
ve herhangi bir öneriniz varsa bir microsoft/reverse-proxy sorunu oluşturun.