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

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

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

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

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

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

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

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

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

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

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

    public void ConfigureServices(IServiceCollection services)
    {
        //... other code...

        // The following code shows how to configure the module to collect
        // additional counters.
        services.ConfigureTelemetryModule<EventCounterCollectionModule>(
            (module, o) =>
            {
                // This removes all default counters, if any.
                module.Counters.Clear();

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

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

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

EventCounterCollectionModule можно отключить с помощью ApplicationInsightsServiceOptions. Пример на основе ASP.NET Core SDK показан ниже.

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

    public void ConfigureServices(IServiceCollection services)
    {
        //... other code...

        var applicationInsightsServiceOptions = new ApplicationInsightsServiceOptions();
        applicationInsightsServiceOptions.EnableEventCounterCollectionModule = false;
        services.AddApplicationInsightsTelemetry(applicationInsightsServiceOptions);
    }

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

    using Microsoft.ApplicationInsights.WorkerService;
    using Microsoft.Extensions.DependencyInjection;

    var applicationInsightsServiceOptions = new ApplicationInsightsServiceOptions();
    applicationInsightsServiceOptions.EnableEventCounterCollectionModule = false;
    services.AddApplicationInsightsTelemetryWorkerService(applicationInsightsServiceOptions);

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

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

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

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

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

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

customMetrics | summarize avg(value) by name

Счетчики событий, отображаемые в службе аналитики Application Insights

Чтобы получить диаграмму для определенного счетчика (например, 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

Диаграмма для одного счетчика в Application Insights

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

видны узлы

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

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

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

В настоящее время в динамических метриках нельзя просматривать объекты EventCounter. Для просмотра данных телеметрии используйте обозреватель метрик или службу аналитики.

Служба Application Insights была включена на портале веб-приложений Azure. Но почему я не вижу счетчики событий (объекты EventCounter)?

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

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