Сбор данных счетчиков производительности для облачной службы Azure (классическая версия)
Внимание
Облачные службы (классическая версия) теперь устарела для всех клиентов с 1 сентября 2024 года. Все существующие запущенные развертывания будут остановлены и завершены корпорацией Майкрософт, и данные будут постоянно потеряны начиная с октября 2024 года. Для новых развертываний следует использовать Облачные службы Azure с расширенной поддержкой. Это новая модель развертывания на основе Azure Resource Manager.
Счетчики производительности предоставляют возможность отслеживать работу приложения и узла. 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
.
Все счетчики для набора можно найти в коллекции Paths
с помощью значения CounterSetName
. Каждый элемент пути является счетчиком. Его можно запросить. Например, чтобы получить доступные счетчики, связанные с набором 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
Эти пути отдельных счетчиков можно добавить на платформу диагностики, используемую облачной службой. Дополнительные сведения о создании пути счетчика производительности см. в статье Specifying a Counter Path (Указание пути счетчика).
Сбор данных счетчика производительности
Счетчик производительности можно добавить в облачную службу для диагностики Azure или Application Insights.
Application Insights
Azure Application Insights для облачных служб позволяет указать счетчики производительности для сбора данных. После того как вы добавите Application Insights в свой проект, в проект Visual Studio добавляется файл конфигурации с именем ApplicationInsights.config. Он определяет, какой тип данных 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 для счетчика производительности. Все счетчики производительности, данные которых вы собираете, помещаются в настраиваемую категорию на портале. В отличие от Диагностика 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 и в разделе Счетчики производительности.
Система диагностики Azure
Внимание
Все эти данные собираются в учетной записи хранения, но портал не содержит встроенных средств для их визуализации. Настоятельно рекомендуем интегрировать в приложение другую службу диагностики, например Application Insights.
Расширение системы диагностики Azure для облачных служб позволяет указать счетчики производительности для сбора данных. Сведения об установке диагностики Azure см. в разделе Настройка расширения системы диагностики.
Счетчики производительности, данные которых вы хотите собрать, определены в файле diagnostics.wadcfgx. Откройте этот файл в Visual Studio и найдите элемент DiagnosticsConfiguration PublicConfigdCfg>>DiagnosticMonitorConfiguration>>PerformanceCounters. Добавьте новый дочерний элемент PerformanceCounterConfiguration. Этот элемент имеет два атрибута: counterSpecifier
и sampleRate
. Атрибут counterSpecifier
определяет набор счетчиков производительности системы (описанный в предыдущем разделе) для сбора данных. Значение sampleRate
указывает, как часто выполняется опрос. В целом все счетчики производительности передаются в Azure в соответствии со значением атрибута scheduledTransferPeriod
родительского элемента PerformanceCounters
.
Дополнительные сведения об элементе схемы PerformanceCounters
см. в разделе Схема Диагностики Azure.
Период, определенный атрибутом sampleRate
, использует тип данных продолжительности XML, чтобы указать, как часто проверяется счетчик производительности. В следующем примере для PT3M
параметра задана частота, которая означает [P]eriod[T]ime[3][M]inutes
: каждые три минуты.
Дополнительные сведения об определении sampleRate
и scheduledTransferPeriod
см. в разделе Тип данных о длительности в руководстве XSD Date and Time Data Types (Типы даты и времени XSD).
<?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 PublicConfigdCfg>>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>