Partilhar via


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 PT3Mque 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>

Próximos passos