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 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 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 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.