Aracılığıyla paylaş


.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 üzere yapılandırılmıştır. 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

Tavsiye

Listenin tamamı için bkz. iyi bilinen sayaçlar.

Tavsiye

.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 ve SocketsHttpHandler)
  • 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 doğaçlama sağlık 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.

Uygulama Öngörüleri

Application Insights varsayılan olarak olay sayaçlarını toplamaz. İlgilendiğiniz sayaç kümesini özelleştirme hakkında bilgi için AppInsights 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));
    }
}

İşlem içi olay sayaçlarını kullanma

Yarp.Telemetry.Consumption kütüphanesi, işlem içindeki olay sayaçlarının kolaylıkla kullanılmasını sağlar. Paket şu anda YARP projesinin bir parçası olarak korunsa da, herhangi bir .NET uygulamasında kullanılabilir.

Bunu kullanmak için IMetricsConsumer<TMetrics> arabirimi 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.