Поделиться через


Сбор данных счетчиков производительности для облачной службы Azure (классическая версия)

Это важно

Облачные службы (классическая версия) переведены в разряд устаревших для всех клиентов с 1 сентября 2024 года. Все существующие запущенные развертывания будут остановлены и завершены корпорацией Майкрософт, и данные будут окончательно потеряны начиная с октября 2024 года. Новые развертывания должны использовать новую модель развертывания azure Resource Manager на основе Облачных служб Azure (расширенная поддержка).

Счетчики производительности предоставляют возможность отслеживать работу приложения и узла. Windows Server предоставляет множество различных счетчиков производительности, связанных с программным обеспечением, приложениями, ОС и т. д. Собирая и отправляя данные счетчика производительности в Azure, вы сможете анализировать их и принимать более взвешенные решения.

Поиск доступных счетчиков

Счетчик производительности состоит из двух частей: имени набора (также известного как категория) и одного или нескольких счетчиков. Вы можете получить список доступных счетчиков производительности с помощью PowerShell.

Get-Counter -ListSet * | Select-Object CounterSetName, Paths | Sort-Object CounterSetName

CounterSetName                                  Paths
--------------                                  -----
.NET CLR Data                                   {\.NET CLR Data(*)\SqlClient...
.NET CLR Exceptions                             {\.NET CLR Exceptions(*)\# o...
.NET CLR Interop                                {\.NET CLR Interop(*)\# of C...
.NET CLR Jit                                    {\.NET CLR Jit(*)\# of Metho...
.NET Data Provider for Oracle                   {\.NET Data Provider for Ora...
.NET Data Provider for SqlServer                {\.NET Data Provider for Sql...
.NET Memory Cache 4.0                           {\.NET Memory Cache 4.0(*)\C...
AppV Client Streamed Data Percentage            {\AppV Client Streamed Data ...
ASP.NET                                         {\ASP.NET\Application Restar...
ASP.NET Apps v4.0.30319                         {\ASP.NET Apps v4.0.30319(*)...
ASP.NET State Service                           {\ASP.NET State Service\Stat...
ASP.NET v2.0.50727                              {\ASP.NET v2.0.50727\Applica...
ASP.NET v4.0.30319                              {\ASP.NET v4.0.30319\Applica...
Authorization Manager Applications              {\Authorization Manager Appl...

#... results cut to save space ...

Свойство CounterSetName представляет собой набор (категорию) и указывает на то, с чем связан счетчик производительности. Свойство Paths представляет собой коллекцию счетчиков для набора. Дополнительные сведения о наборе счетчиков содержатся в свойстве Description.

Все счетчики для набора можно найти в коллекции CounterSetName с помощью значения Paths. Каждый элемент пути является счетчиком. Его можно запросить. Например, чтобы получить доступные счетчики, связанные с набором Processor, раскройте коллекцию Paths.

Get-Counter -ListSet * | Where-Object CounterSetName -eq "Processor" | Select -ExpandProperty Paths

\Processor(*)\% Processor Time
\Processor(*)\% User Time
\Processor(*)\% Privileged Time
\Processor(*)\Interrupts/sec
\Processor(*)\% DPC Time
\Processor(*)\% Interrupt Time
\Processor(*)\DPCs Queued/sec
\Processor(*)\DPC Rate
\Processor(*)\% Idle Time
\Processor(*)\% C1 Time
\Processor(*)\% C2 Time
\Processor(*)\% C3 Time
\Processor(*)\C1 Transitions/sec
\Processor(*)\C2 Transitions/sec
\Processor(*)\C3 Transitions/sec

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

Сбор данных счетчика производительности

Счетчик производительности можно добавить в облачную службу для диагностики Azure или Application Insights.

Application Insights

Azure Application Insights для облачных служб позволяет указать счетчики производительности для сбора данных. После добавления Application Insights в проект добавляется файл конфигурации с именемApplicationInsights.config в проект Visual Studio. Он определяет, какой тип данных Application Insights собирает и отправляет в Azure.

Откройте файл ApplicationInsights.config и найдите элемент ApplicationInsights>TelemetryModules . Каждый дочерний элемент <Add> определяет тип телеметрии, собираемый вместе с его конфигурацией. Тип модуля телеметрического счетчика производительности следующий: Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector. Если этот элемент уже определен, не добавляйте его во второй раз. Каждый счетчик производительности для сбора определяется в узле с именем <Counters>. Ниже приведен пример, который собирает счетчики производительности диска:

<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings">

  <TelemetryModules>

    <Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector">
      <Counters>
        <Add PerformanceCounter="\LogicalDisk(C:)\Disk Write Bytes/sec" ReportAs="Disk write (C:)" />
        <Add PerformanceCounter="\LogicalDisk(C:)\Disk Read Bytes/sec" ReportAs="Disk read (C:)" />
      </Counters>
    </Add>

  </TelemetryModules>

<!-- ... cut to save space ... -->

Каждый счетчик производительности представлен как элемент <Add> в разделе <Counters>. Атрибут PerformanceCounter определяет счетчик производительности для сбора данных. Атрибут ReportAs — это заголовок, отображаемый на портале Azure для счетчика производительности. Любой счетчик производительности, который вы собираете, помещается в категорию с именем Custom на портале. В отличие от Диагностика Azure, невозможно задать интервал сбора и отправки этих счетчиков производительности в Azure. С Application Insights данные счетчиков производительности собираются и отправляются каждую минуту.

Application Insights автоматически собирает данные следующих счетчиков производительности:

  • \Процесс(??APP_WIN32_PROC??)% Процессорное время
  • \Память\доступные байты
  • .NET CLR Exceptions(??APP_CLR_PROC??)# Исключений в секунду
  • \Process(??APP_WIN32_PROC??)\Байт исключительного пользования
  • \Process(??APP_WIN32_PROC??)\I/O — обмен данными, байт в секунду
  • \Процессор(_общий объем ресурсов)% загруженности процессора

Дополнительные сведения см. в разделе "Счетчики производительности системы" в Application Insights и Application Insights для облачных служб Azure.

Система диагностики Azure

Это важно

Хотя все эти данные объединяются в учетную запись хранения, портал не предоставляет собственного способа построения диаграмм данных. Настоятельно рекомендуем интегрировать в приложение другую службу диагностики, например Application Insights.

Расширение системы диагностики Azure для облачных служб позволяет указать счетчики производительности для сбора данных. Сведения о настройке системы диагностики Azure см. в разделе "Обзор мониторинга облачных служб".

Счетчики производительности, которые необходимо собрать, определяются в файле diagnostics.wadcfgx . Откройте этот файл в Visual Studio и найдите элемент DiagnosticsConfiguration>PublicConfig>WadCfg>DiagnosticMonitorConfiguration>PerformanceCounters. Добавьте новый элемент PerformanceCounterConfiguration в качестве дочернего элемента. Этот элемент имеет два атрибута: counterSpecifier и sampleRate. Атрибут counterSpecifier определяет набор счетчиков производительности системы (описанный в предыдущем разделе) для сбора данных. Значение sampleRate указывает, как часто выполняется опрос. В целом все счетчики производительности передаются в Azure в соответствии со значением атрибута PerformanceCounters родительского элемента scheduledTransferPeriod.

Дополнительные сведения об элементе PerformanceCounters схемы см. в схеме диагностики Azure.

Период, определенный атрибутом sampleRate, использует тип данных продолжительности XML, чтобы указать, как часто проверяется счетчик производительности. В следующем примере для PT3Mпараметра задана частота, которая означает [P]eriod[T]ime[3][M]inutes: каждые три минуты.

Дополнительные сведения о том, как определяются sampleRate и scheduledTransferPeriod, см. в разделе «Тип данных длительности» в учебнике по типам дат и времени W3 XML.

<?xml version="1.0" encoding="utf-8"?>
<DiagnosticsConfiguration  xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
  <PublicConfig>
    <WadCfg>
      <DiagnosticMonitorConfiguration overallQuotaInMB="4096">

        <!-- ... cut to save space ... -->

        <PerformanceCounters scheduledTransferPeriod="PT1M">
          <PerformanceCounterConfiguration counterSpecifier="\Memory\Available MBytes" sampleRate="PT3M" />
          <PerformanceCounterConfiguration counterSpecifier="\Web Service(_Total)\ISAPI Extension Requests/sec" sampleRate="PT3M" />
          <PerformanceCounterConfiguration counterSpecifier="\Web Service(_Total)\Bytes Total/Sec" sampleRate="PT3M" />
          <PerformanceCounterConfiguration counterSpecifier="\ASP.NET Applications(__Total__)\Requests/Sec" sampleRate="PT3M" />
          <PerformanceCounterConfiguration counterSpecifier="\ASP.NET Applications(__Total__)\Errors Total/Sec" sampleRate="PT3M" />
          <PerformanceCounterConfiguration counterSpecifier="\ASP.NET\Requests Queued" sampleRate="PT3M" />
          <PerformanceCounterConfiguration counterSpecifier="\ASP.NET\Requests Rejected" sampleRate="PT3M" />
          <PerformanceCounterConfiguration counterSpecifier="\Processor(_Total)\% Processor Time" sampleRate="PT3M" />

          <!-- This is a new perf counter which will track the C: disk read activity in bytes per second, every minute -->
          <PerformanceCounterConfiguration counterSpecifier="\LogicalDisk(C:)\Disk Read Bytes/sec" sampleRate="PT1M" />

        </PerformanceCounters>
      </DiagnosticMonitorConfiguration>
    </WadCfg>
    
    <!-- ... cut to save space ... -->

  </PublicConfig>
</DiagnosticsConfiguration>

Создание счетчика производительности

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

Чтобы настроить роль для запуска с повышенными привилегиями, добавьте 'элемент' <Runtime> в файл .csdef.

<ServiceDefinition name="CloudServiceLoadTesting" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6">
  <WorkerRole name="WorkerRoleWithSBQueue1" vmsize="Large">

    <!-- ... cut to save space ... -->

    <Runtime executionContext="elevated">
      
    </Runtime>

    <!-- ... cut to save space ... -->

  </WorkerRole>
</ServiceDefinition>

Вы можете создать и зарегистрировать счетчик производительности с несколькими строками кода. Используйте перегрузку метода System.Diagnostics.PerformanceCounterCategory.Create, которая создает категорию и счетчик. Следующий код сначала проверяет, существует ли категория (если она отсутствует, он создает категорию и счетчик).

using System.Diagnostics;
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.ServiceRuntime;

namespace WorkerRoleWithSBQueue1
{
    public class WorkerRole : RoleEntryPoint
    {
        // Perf counter variable representing times service was used.
        private PerformanceCounter counterServiceUsed;

        public override bool OnStart()
        {
            // ... Other startup code here ...

            // Define the category and counter names.
            string perfCounterCatName = "MyService";
            string perfCounterName = "Times Used";

            // Create the counter if needed. Our counter category only has a single counter.
            // Both the category and counter are created in the same method call.
            if (!PerformanceCounterCategory.Exists(perfCounterCatName))
            {
                PerformanceCounterCategory.Create(perfCounterCatName, "Collects information about the cloud service.", 
                                                  PerformanceCounterCategoryType.SingleInstance, 
                                                  perfCounterName, "How many times the cloud service was used.");
            }

            // Get reference to our counter
            counterServiceUsed = new PerformanceCounter(perfCounterCatName, perfCounterName);
            counterServiceUsed.ReadOnly = false;
            
            return base.OnStart();
        }

        // ... cut class code to save space
    }
}

Если необходимо использовать счетчик, вызовите метод Increment или IncrementBy.

// Increase the counter by 1
counterServiceUsed.Increment();

Теперь, когда приложение использует ваш счетчик, необходимо настроить службу диагностики Azure или Application Insights для отслеживания счетчика.

Application Insights

Как упоминалось ранее, счетчики производительности для Application Insights определяются в файлеApplicationInsights.config . Откройте ApplicationInsights.config и найдите элемент ApplicationInsights>TelemetryModules>Add>Counters . Создайте дочерний элемент <Add> и укажите для атрибута PerformanceCounter категорию и имя созданного в коде счетчика производительности. Для атрибута ReportAs задайте простое имя, которое вы хотите увидеть на портале.

<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings">

  <TelemetryModules>

    <Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector">
      <Counters>
        <!-- ... cut other perf counters to save space ... -->

        <!-- This new perf counter matches the [category name]\[counter name] defined in your code -->
        <Add PerformanceCounter="\MyService\Times Used" ReportAs="Service used counter" />
      </Counters>
    </Add>

  </TelemetryModules>

<!-- ... cut to save space ... -->

Система диагностики Azure

Как упоминалось ранее, счетчики производительности, которые необходимо собрать, определяются в файле diagnostics.wadcfgx . Откройте этот файл в Visual Studio и найдите элемент DiagnosticsConfiguration>PublicConfig>WadCfg>DiagnosticMonitorConfiguration>PerformanceCounters. Добавьте новый элемент PerformanceCounterConfiguration в качестве дочернего элемента. Укажите для атрибута counterSpecifier категорию и имя созданного в коде счетчика производительности.

<?xml version="1.0" encoding="utf-8"?>
<DiagnosticsConfiguration  xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
  <PublicConfig>
    <WadCfg>
      <DiagnosticMonitorConfiguration overallQuotaInMB="4096">

        <!-- ... cut to save space ... -->

        <PerformanceCounters scheduledTransferPeriod="PT1M">
          <!-- ... cut other perf counters to save space ... -->
          
          <!-- This new perf counter matches the [category name]\[counter name] defined in your code -->
          <PerformanceCounterConfiguration counterSpecifier="\MyService\Times Used" sampleRate="PT1M" />

        </PerformanceCounters>
      </DiagnosticMonitorConfiguration>
    </WadCfg>
    
    <!-- ... cut to save space ... -->

  </PublicConfig>
</DiagnosticsConfiguration>

Дальнейшие шаги