Coletar contadores de desempenho para seu Serviço de Nuvem do Azure (clássico)
Importante
Os Serviços na Nuvem (clássicos) foram preteridos para todos os clientes a partir de 1º de setembro de 2024. Todas as implantações em execução existentes serão interrompidas e encerradas pela Microsoft e os dados serão perdidos permanentemente a partir de outubro de 2024. Novas implantações devem usar o novo modelo de implantação baseado no Azure Resource Manager Serviços de Nuvem do Azure (suporte estendido).
Os contadores de desempenho fornecem uma maneira de controlar o desempenho do seu aplicativo e do host. O Windows Server fornece muitos contadores de desempenho diferentes relacionados a hardware, aplicativos, sistema operacional e muito mais. Ao coletar e enviar contadores de desempenho para o Azure, você pode analisar essas informações para ajudar a tomar melhores decisões.
Descubra os balcões disponíveis
Um contador de desempenho é composto por duas partes, um nome de conjunto (também conhecido como categoria) e um ou mais contadores. Você pode usar o PowerShell para obter uma lista de contadores de desempenho disponíveis:
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 ...
A CounterSetName
propriedade representa um conjunto (ou categoria) e é um bom indicador do que os contadores de desempenho estão relacionados. A Paths
propriedade representa uma coleção de contadores para um conjunto. Você também pode obter a Description
propriedade para obter mais informações sobre o conjunto de contadores.
Para obter todos os contadores de um conjunto, use o CounterSetName
valor e expanda a Paths
coleção. Cada item de caminho é um contador que você pode consultar. Por exemplo, para obter os contadores disponíveis relacionados ao conjunto, expanda Processor
a Paths
coleção:
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
Esses caminhos de contador individuais podem ser adicionados à estrutura de diagnóstico usada pelo seu serviço de nuvem. Para obter mais informações sobre como um caminho de contador de desempenho é construído, consulte Especificando um caminho de contador.
Coletar um contador de desempenho
Um contador de desempenho pode ser adicionado ao seu serviço de nuvem para o Diagnóstico do Azure ou o Application Insights.
Application Insights
O Azure Application Insights for Cloud Services permite especificar quais contadores de desempenho você deseja coletar. Depois de adicionar o Application Insights ao seu projeto, um arquivo de configuração chamado ApplicationInsights.config é adicionado ao seu projeto do Visual Studio. Esse arquivo de configuração define que tipo de informações o Application Insights coleta e envia para o Azure.
Abra o arquivo ApplicationInsights.config e localize o elemento ApplicationInsights>TelemetryModules. Cada <Add>
elemento filho define um tipo de telemetria a ser coletada, juntamente com sua configuração. O tipo de módulo de telemetria do contador de desempenho é Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector
. Se esse elemento já estiver definido, não o adicione uma segunda vez. Cada contador de desempenho a ser coletado é definido sob um nó chamado <Counters>
. Eis um exemplo que recolhe contadores de desempenho da unidade:
<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 ... -->
Cada contador de desempenho é representado como um <Add>
elemento em <Counters>
. O PerformanceCounter
atributo define qual contador de desempenho coletar. O ReportAs
atributo é o título a ser exibido no portal do Azure para o contador de desempenho. Qualquer contador de desempenho coletado é colocado em uma categoria chamada Personalizado no portal. Ao contrário do Diagnóstico do Azure, você não pode definir o intervalo em que esses contadores de desempenho são coletados e enviados para o Azure. Com o Application Insights, os contadores de desempenho são coletados e enviados a cada minuto.
O Application Insights coleta automaticamente os seguintes contadores de desempenho:
- \Processo(?? APP_WIN32_PROC??) % de tempo do processador
- \Memory\Available Bytes
- Exceções CLR do .NET(?? APP_CLR_PROC??) # de Exceps Thrown / seg
- \Process(??APP_WIN32_PROC??)\Private Bytes
- \Process(??APP_WIN32_PROC??)\IO Data Bytes/sec
- \Processador(_Total)% Tempo do processador
Para obter mais informações, consulte Contadores de desempenho do sistema em Application Insights e Application Insights for Azure Cloud Services.
Diagnóstico do Azure
Importante
Embora todos esses dados sejam agregados à conta de armazenamento, o portal não fornece uma maneira nativa de mapear os dados. É altamente recomendável que você integre outro serviço de diagnóstico, como o Application Insights, em seu aplicativo.
A extensão de Diagnóstico do Azure para Serviços de Nuvem permite especificar quais contadores de desempenho você deseja coletar. Para configurar o Diagnóstico do Azure, consulte Visão geral do monitoramento do serviço de nuvem.
Os contadores de desempenho que você deseja coletar são definidos no arquivo diagnostics.wadcfgx . Abra este arquivo no Visual Studio e localize o elemento DiagnosticsConfiguration>, PublicConfig>, WadCfg>, DiagnosticMonitorConfiguration,>PerformanceCounters. Adicione um novo elemento PerformanceCounterConfiguration como filho. Este elemento tem dois atributos: counterSpecifier
e sampleRate
. O counterSpecifier
atributo define qual conjunto de contadores de desempenho do sistema (descrito na seção anterior) deve ser coletado. O sampleRate
valor indica a frequência com que esse valor é pesquisado. Como um todo, todos os contadores de desempenho são transferidos para o Azure de acordo com o valor do atributo do scheduledTransferPeriod
elemento paiPerformanceCounters
.
Para obter mais informações sobre o PerformanceCounters
elemento de esquema, consulte o Esquema de Diagnóstico do Azure.
O período definido pelo sampleRate
atributo usa o tipo de dados de duração XML para indicar com que frequência o contador de desempenho é sondado. No exemplo a seguir, a taxa é definida como , o PT3M
que significa [P]eriod[T]ime[3][M]inutes
: a cada três minutos.
Para obter mais informações sobre como os sampleRate
e scheduledTransferPeriod
são definidos, consulte a seção Tipo de dados de duração no tutorial Tipos de data e hora XML do W3.
<?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>
Criar um novo contador de perf
Um novo contador de desempenho pode ser criado e usado pelo seu código. Seu código que cria um novo contador de desempenho deve estar sendo executado elevado, caso contrário, ele falhará. O código de inicialização do serviço de OnStart
nuvem pode criar o contador de desempenho, exigindo que você execute a função em um contexto elevado. Ou você pode criar uma tarefa de inicialização que é executada elevada e cria o contador de desempenho. Para obter mais informações sobre tarefas de inicialização, consulte Como configurar e executar tarefas de inicialização para um serviço de nuvem.
Para configurar sua função para executar elevado, adicione um <Runtime>
elemento ao arquivo .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>
Você pode criar e registrar um novo contador de desempenho com algumas linhas de código. Use a sobrecarga de System.Diagnostics.PerformanceCounterCategory.Create
método que cria a categoria e o contador. O código a seguir primeiro verifica se a categoria existe e, se faltar, cria a categoria e o contador.
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
}
}
Quando quiser usar o contador, chame o Increment
método ou IncrementBy
.
// Increase the counter by 1
counterServiceUsed.Increment();
Agora que seu aplicativo usa seu contador personalizado, você precisa configurar o Diagnóstico do Azure ou o Application Insights para acompanhar o contador.
Application Insights
Como dito anteriormente, os contadores de desempenho do Application Insights são definidos no arquivo ApplicationInsights.config . Abra ApplicationInsights.config e localize o elemento ApplicationInsights>TelemetryModules>Add>Counters. Crie um <Add>
elemento filho e defina o PerformanceCounter
atributo para a categoria e o nome do contador de desempenho que você criou em seu código. Defina o ReportAs
atributo para um nome amigável que você deseja ver no portal.
<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 ... -->
Diagnóstico do Azure
Como dito anteriormente, os contadores de desempenho que você deseja coletar são definidos no arquivo diagnostics.wadcfgx . Abra este arquivo no Visual Studio e localize o elemento DiagnosticsConfiguration>, PublicConfig>, WadCfg>, DiagnosticMonitorConfiguration,>PerformanceCounters. Adicione um novo elemento PerformanceCounterConfiguration como filho. Defina o counterSpecifier
atributo para a categoria e o nome do contador de desempenho que você criou em seu código.
<?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>