Счетчики сетевых событий в .NET
EventCounters — это API .NET, используемые для упрощенной, кроссплатформенной и почти в реальном времени коллекции метрик производительности.
Сетевые компоненты инструментируются для публикации основных диагностических сведений с помощью 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
— это кроссплатформенное средство мониторинга производительности для мониторинга работоспособности и исследования производительности первого уровня.
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
Аналитика приложения по умолчанию не собирает счетчики событий. Сведения о настройке набора счетчиков, интересующих вас, см. в документации app Аналитика 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 или обратным прокси-сервером.