Знакомство с объектами EventCounter

EventCounter (счетчик событий) — это механизм .NET и .NET Core для публикации и использования счетчиков или статистики. Счетчики событий (объекты EventCounter) поддерживаются во всех платформах ОС — Windows, Linux и macOS. Их можно рассматривать как кроссплатформенный эквивалент объектов PerformanceCounter, которые поддерживаются только в Windows-системах.

Хотя пользователи могут публиковать любые пользовательские EventCounters параметры в соответствии с потребностями, .NET публикует набор этих счетчиков по умолчанию. В этом документе описаны шаги, необходимые для сбора и просмотра EventCounters (определенных системой или пользователем) в приложение Azure Аналитика.

Примечание.

В следующей документации используется классический API приложения Аналитика. Долгосрочный план приложения Аналитика заключается в сборе данных с помощью OpenTelemetry. Дополнительные сведения см. в разделе "Включить Azure Monitor OpenTelemetry" для приложений .NET, Node.js, Python и Java.

Использование Application Insights для сбора объектов EventCounter

Application Insights поддерживает сбор объектов EventCounters с помощью своего модуля EventCounterCollectionModule, который входит в состав недавно выпущенного пакета NuGet — Microsoft.ApplicationInsights.EventCounterCollector. Модуль EventCounterCollectionModule автоматически включается при использовании AspNetCore или WorkerService. EventCounterCollectionModule собирает счетчики с неконфигурируемой частотой сбора в 60 секунд. Для сбора объектов EventCounter не нужны специальные разрешения. Для приложений ASP.NET Core также необходимо добавить Microsoft.Application Аналитика. Пакет AspNetCore.

dotnet add package Microsoft.ApplicationInsights.EventCounterCollector
dotnet add package Microsoft.ApplicationInsights.AspNetCore

Счетчики, собираемые по умолчанию

Начиная с версии 2.15.0 пакета SDK AspNetCore или WorkerService счетчики по умолчанию не собираются. Сам модуль включен, чтобы пользователи могли добавлять нужные счетчики для их сбора.

Список хорошо известных счетчиков, публикуемых средой выполнения .NET, см. в статье Доступные счетчики.

Настройка собираемых счетчиков

В следующем примере показано, как следует добавлять или удалять счетчики. Эта настройка будет выполнена как часть конфигурации службы приложений после включения сбора данных телеметрии приложения Аналитика.AddApplicationInsightsTelemetry()AddApplicationInsightsWorkerService() Ниже приведен пример кода из приложения для ASP.NET Core. Информацию о других типах приложений можно найти в этом документе.

using Microsoft.ApplicationInsights.Extensibility.EventCounterCollector;
using Microsoft.Extensions.DependencyInjection;

builder.Services.ConfigureTelemetryModule<EventCounterCollectionModule>(
        (module, o) =>
        {
            // Removes all default counters, if any.
            module.Counters.Clear();

            // Adds a user defined counter "MyCounter" from EventSource named "MyEventSource"
            module.Counters.Add(
                new EventCounterCollectionRequest("MyEventSource", "MyCounter"));

            // Adds the system counter "gen-0-size" from "System.Runtime"
            module.Counters.Add(
                new EventCounterCollectionRequest("System.Runtime", "gen-0-size"));
        }
    );

Отключение модуля сбора данных EventCounter

EventCounterCollectionModule можно отключить с помощью ApplicationInsightsServiceOptions.

В следующем примере используется пакет SDK ASP.NET Core.

using Microsoft.ApplicationInsights.AspNetCore.Extensions;
using Microsoft.Extensions.DependencyInjection;

var applicationInsightsServiceOptions = new ApplicationInsightsServiceOptions();
applicationInsightsServiceOptions.EnableEventCounterCollectionModule = false;
builder.Services.AddApplicationInsightsTelemetry(applicationInsightsServiceOptions);

Аналогичный подход также можно использовать для пакета SDK для WorkerService, но пространство имен должно быть изменено, как показано в следующем примере.

using Microsoft.ApplicationInsights.AspNetCore.Extensions;
using Microsoft.Extensions.DependencyInjection;

var applicationInsightsServiceOptions = new ApplicationInsightsServiceOptions();
applicationInsightsServiceOptions.EnableEventCounterCollectionModule = false;
builder.Services.AddApplicationInsightsTelemetry(applicationInsightsServiceOptions);

Счетчики событий в обозревателе метрик

Чтобы просмотреть метрики EventCounter в обозревателе метрик, выберите ресурс Application Insights и в качестве пространства имен метрик выберите метрики на основе журнала. После этого метрики EventCounter отобразятся в пользовательской категории.

Event counters reported in Application Insights Metric Explorer

Счетчики событий в службе аналитики

Отчеты по счетчикам событий также можно искать и просматривать в службе аналитики, в таблице customMetrics.

Выполните, к примеру, следующий запрос, чтобы посмотреть, какие счетчики собираются и доступны для запроса:

customMetrics | summarize avg(value) by name

Event counters reported in Application Insights Analytics

Чтобы получить диаграмму для определенного счетчика (например, ThreadPool Completed Work Item Count) за последний период времени, выполните следующий запрос.

customMetrics 
| where name contains "System.Runtime|ThreadPool Completed Work Item Count"
| where timestamp >= ago(1h)
| summarize  avg(value) by cloud_RoleInstance, bin(timestamp, 1m)
| render timechart

Chat of a single counter in Application Insights

Как и другие данные телеметрии, данные customMetrics также содержат столбец cloud_RoleInstance, который указывает идентификатор экземпляра сервера, на котором выполняется приложение. Приведенный выше запрос показывает значение счетчика для каждого экземпляра и может использоваться для сравнения производительности различных экземпляров сервера.

видны узлы

Как и для других метрик, вы можете задать оповещение, которое предупредит вас о том, что значение счетчика событий выходит за установленные пределы. Откройте область "Оповещения" и щелкните "Добавить оповещение".

Часто задаваемые вопросы

Можно ли просматривать объекты EventCounter в динамических метриках?

Динамические метрики не отображают eventCounters по состоянию на сегодняшний день. Для просмотра данных телеметрии используйте обозреватель метрик или службу аналитики.

Служба Application Insights была включена на портале веб-приложений Azure. Почему не удается увидеть EventCounters?

Расширение Application Insights для ASP.NET Core пока не поддерживает эту функцию.

Следующие шаги