Creare e usare contatori di prestazioni in un'applicazione AzureCreate and use performance counters in an Azure application

Questo articolo descrive i vantaggi dei contatori delle prestazioni e come inserirli nell'applicazione Azure.This article describes the benefits of and how to put performance counters into your Azure application. È possibile usarli per raccogliere dati, trovare colli di bottiglia e ottimizzare le prestazioni del sistema e dell'applicazione.You can use them to collect data, find bottlenecks, and tune system and application performance.

I contatori delle prestazioni disponibili per Windows Server, IIS e ASP.NET possono essere raccolti e usati anche per determinare l'integrità di ruoli Web, ruoli di lavoro e macchine virtuali di Azure.Performance counters available for Windows Server, IIS, and ASP.NET can also be collected and used to determine the health of your Azure web roles, worker roles, and Virtual Machines. È anche possibile creare e usare contatori delle prestazioni personalizzati.You can also create and use custom performance counters.

È possibile esaminare i dati dei contatori delle prestazioniYou can examine performance counter data

  1. Direttamente nell'host applicazione con lo strumento Performance Monitor accessibile da Desktop remotoDirectly on the application host with the Performance Monitor tool accessed using Remote Desktop
  2. Con System Center Operations Manager con Azure Management PackWith System Center Operations Manager using the Azure Management Pack
  3. Con altri strumenti di monitoraggio che accedono ai dati di diagnostica trasferiti ad Archiviazione di Azure.With other monitoring tools that access the diagnostic data transferred to Azure storage. Per altre informazioni, vedere Archiviare e visualizzare i dati di diagnostica nell'account di archiviazione Azure .See Store and View Diagnostic Data in Azure Storage for more information.

Per altre informazioni sul monitoraggio delle prestazioni dell'applicazione nel portale di Azure, vedere Come monitorare i servizi cloud.For more information on monitoring the performance of your application in the Azure portal, see How to Monitor Cloud Services.

Per ulteriori indicazioni dettagliate sulla creazione di una strategia di registrazione e traccia e sull'utilizzo della diagnostica e di altre tecniche per risolvere i problemi e ottimizzare le applicazioni Azure, vedere le procedure consigliate di risoluzione dei problemi per lo sviluppo di applicazioni Azure.For additional in-depth guidance on creating a logging and tracing strategy and using diagnostics and other techniques to troubleshoot problems and optimize Azure applications, see Troubleshooting Best Practices for Developing Azure Applications.

Abilitare il monitoraggio del contatore delle prestazioniEnable performance counter monitoring

Per impostazione predefinita, i contatori delle prestazioni non sono abilitati.Performance counters are not enabled by default. L'applicazione o un'attività di avvio deve modificare la configurazione predefinita dell'agente di diagnostica in modo che includa i contatori delle prestazioni specifici da monitorare per ogni istanza del ruolo.Your application or a startup task must modify the default diagnostics agent configuration to include the specific performance counters that you wish to monitor for each role instance.

Contatori delle prestazioni disponibili per Microsoft AzurePerformance counters available for Microsoft Azure

Azure fornisce un subset dei contatori delle prestazioni disponibili per Windows Server, IIS e lo stack ASP.NET.Azure provides a subset of the performance counters available for Windows Server, IIS and the ASP.NET stack. La tabella seguente elenca alcuni contatori delle prestazioni particolarmente interessanti per le applicazioni Azure.The following table lists some of the performance counters of particular interest for Azure applications.

Categoria contatore: oggetto (istanza)Counter Category: Object (Instance) Nome contatoreCounter Name RiferimentoReference
Eccezioni CLR .NET (globale).NET CLR Exceptions(Global) N. eccezioni/sec# Exceps Thrown / sec Contatori delle prestazioni delle eccezioniException Performance Counters
Memoria CLR .NET (globale).NET CLR Memory(Global) Percentuale tempo in GC% Time in GC Contatori delle prestazioni di memoriaMemory Performance Counters
ASP.NETASP.NET Riavvii applicazioneApplication Restarts Contatori delle prestazioni per ASP.NETPerformance Counters for ASP.NET
ASP.NETASP.NET Tempo di esecuzione della richiestaRequest Execution Time Contatori delle prestazioni per ASP.NETPerformance Counters for ASP.NET
ASP.NETASP.NET Richieste disconnesseRequests Disconnected Contatori delle prestazioni per ASP.NETPerformance Counters for ASP.NET
ASP.NETASP.NET Riavvii processo di lavoroWorker Process Restarts Contatori delle prestazioni per ASP.NETPerformance Counters for ASP.NET
Applicazioni ASP.NET (totale)ASP.NET Applications(Total) Totale richiesteRequests Total Contatori delle prestazioni per ASP.NETPerformance Counters for ASP.NET
Applicazioni ASP.NET (totale)ASP.NET Applications(Total) Richieste/secRequests/Sec Contatori delle prestazioni per ASP.NETPerformance Counters for ASP.NET
ASP.NET v4.0.30319ASP.NET v4.0.30319 Tempo di esecuzione della richiestaRequest Execution Time Contatori delle prestazioni per ASP.NETPerformance Counters for ASP.NET
ASP.NET v4.0.30319ASP.NET v4.0.30319 Tempo di attesa richiestaRequest Wait Time Contatori delle prestazioni per ASP.NETPerformance Counters for ASP.NET
ASP.NET v4.0.30319ASP.NET v4.0.30319 Richieste correntiRequests Current Contatori delle prestazioni per ASP.NETPerformance Counters for ASP.NET
ASP.NET v4.0.30319ASP.NET v4.0.30319 Richieste in codaRequests Queued Contatori delle prestazioni per ASP.NETPerformance Counters for ASP.NET
ASP.NET v4.0.30319ASP.NET v4.0.30319 Richieste respinteRequests Rejected Contatori delle prestazioni per ASP.NETPerformance Counters for ASP.NET
MemoriaMemory MByte disponibiliAvailable MBytes Contatori delle prestazioni di memoriaMemory Performance Counters
MemoriaMemory Byte vincolatiCommitted Bytes Contatori delle prestazioni di memoriaMemory Performance Counters
Processor(_Total)Processor(_Total) % di tempo processore% Processor Time Contatori delle prestazioni per ASP.NETPerformance Counters for ASP.NET
TCPv4TCPv4 Errori di connessioneConnection Failures Oggetto TCPTCP Object
TCPv4TCPv4 Connessioni stabiliteConnections Established Oggetto TCPTCP Object
TCPv4TCPv4 Connessioni ripristinateConnections Reset Oggetto TCPTCP Object
TCPv4TCPv4 Segmenti inviati/secSegments Sent/sec Oggetto TCPTCP Object
Interfaccia di rete ()Network Interface() Byte ricevuti/secBytes Received/sec Oggetto interfaccia di reteNetwork Interface Object
Interfaccia di rete ()Network Interface() Byte inviati/secBytes Sent/sec Oggetto interfaccia di reteNetwork Interface Object
Interfaccia di rete (Scheda di rete per il bus delle macchine virtuali Microsoft _2)Network Interface(Microsoft Virtual Machine Bus Network Adapter _2) Byte ricevuti/secBytes Received/sec Oggetto interfaccia di reteNetwork Interface Object
Interfaccia di rete (Scheda di rete per il bus delle macchine virtuali Microsoft _2)Network Interface(Microsoft Virtual Machine Bus Network Adapter _2) Byte inviati/secBytes Sent/sec Oggetto interfaccia di reteNetwork Interface Object
Interfaccia di rete (Scheda di rete per il bus delle macchine virtuali Microsoft _2)Network Interface(Microsoft Virtual Machine Bus Network Adapter _2) Totale byte/secBytes Total/sec Oggetto interfaccia di reteNetwork Interface Object

Creare e aggiungere contatori delle prestazioni personalizzati all'applicazioneCreate and add custom performance counters to your application

Azure include il supporto per creare e modificare contatori delle prestazioni personalizzati per ruoli Web e ruoli di lavoro.Azure has support to create and modify custom performance counters for web roles and worker roles. I contatori possono essere usati per tenere traccia del comportamento specifico dell'applicazione e per monitorarlo.The counters may be used to track and monitor application-specific behavior. È possibile creare ed eliminare categorie e identificatori dei contatori delle prestazioni personalizzati da un'attività di avvio, un ruolo Web o un ruolo di lavoro con autorizzazioni elevate.You can create and delete custom performance counter categories and specifiers from a startup task, web role, or worker role with elevated permissions.

Nota

Il codice che apporta le modifiche ai contatori delle prestazioni personalizzati deve avere autorizzazioni di esecuzione elevate.Code that makes changes to custom performance counters must have elevated permissions to run. Se il codice è in un ruolo Web o in un ruolo di lavoro, il ruolo deve includere il tag nel file ServiceDefinition.csdef per la corretta inizializzazione del ruolo.If the code is in a web role or worker role, the role must include the tag in the ServiceDefinition.csdef file for the role to initialize properly.

È possibile inviare i dati dei contatori delle prestazioni personalizzati alla risorsa di archiviazione di Azure con l'agente di diagnostica.You can send custom performance counter data to Azure storage using the diagnostics agent.

I dati dei contatori delle prestazioni standard vengono generati dai processi di Azure.The standard performance counter data is generated by the Azure processes. I dati dei contatori delle prestazioni personalizzati devono essere creati dall'applicazione ruolo Web o ruolo di lavoro.Custom performance counter data must be created by your web role or worker role application. Per informazioni sui tipi di dati che possono essere archiviati nei contatori delle prestazioni personalizzati, vedere Tipi di contatori delle prestazioni .See Performance Counter Types for information on the types of data that can be stored in custom performance counters. Per un esempio di creazione e impostazione dei dati dei contatori delle prestazioni personalizzati in un ruolo Web, vedere Esempio PerformanceCounters .See PerformanceCounters Sample for an example that creates and sets custom performance counter data in a web role.

Archiviare e visualizzare i dati dei contatori delle prestazioniStore and view performance counter data

Azure memorizza nella cache i dati dei contatori delle prestazioni con altre informazioni di diagnostica.Azure caches performance counter data with other diagnostic information. Questi dati sono disponibili per il monitoraggio remoto mentre l'istanza del ruolo è in esecuzione con l'accesso desktop remoto per visualizzare strumenti come Performance Monitor.This data is available for remote monitoring while the role instance is running using remote desktop access to view tools such as Performance Monitor. Per rendere i dati persistenti al di fuori dell'istanza del ruolo, l'agente di diagnostica deve trasferire i dati nell'account di archiviazione di Azure.To persist the data outside of the role instance, the diagnostics agent must transfer the data to Azure storage. Il limite di dimensioni dei dati dei contatori delle prestazioni memorizzati nella cache può essere configurato nell'agente di diagnostica oppure come parte di un limite condiviso per tutti i dati di diagnostica.The size limit of the cached performance counter data can be configured in the diagnostics agent, or it may be configured to be part of a shared limit for all the diagnostic data. Per altre informazioni sull'impostazione delle dimensioni del buffer, vedere OverallQuotaInMB e DirectoriesBufferConfiguration.For more information about setting the buffer size, see OverallQuotaInMB and DirectoriesBufferConfiguration. Per una panoramica della configurazione dell'agente di diagnostica per i trasferire i dati in un account di archiviazione, vedere Archiviare e visualizzare i dati di diagnostica nell'account di archiviazione AzureSee Store and View Diagnostic Data in Azure Storage for an overview of setting up the diagnostics agent to transfer data to a storage account.

Ogni istanza dei contatori delle prestazioni configurati viene registrata con una frequenza di campionamento specificata e i dati campionati vengono trasferiti nell'account di archiviazione in base a una richiesta di trasferimento pianificato o a una richiesta di trasferimento su richiesta.Each configured performance counter instance is recorded at a specified sampling rate, and the sampled data is transferred to the storage account either by a scheduled transfer request or an on-demand transfer request. I trasferimenti automatici possono essere pianificati con una frequenza di una volta ogni minuto.Automatic transfers may be scheduled as often as once per minute. I dati dei contatori delle prestazioni trasferiti dall'agente di diagnostica vengono archiviati in una tabella, WADPerformanceCountersTable, nell'account di archiviazione.Performance counter data transferred by the diagnostics agent is stored in a table, WADPerformanceCountersTable, in the storage account. Questa tabella è accessibile e può essere sottoposta a query con i metodi API di archiviazione standard di Azure.This table may be accessed and queried with standard Azure storage API methods. Per un esempio di query e di visualizzazione dei dati dei contatori delle prestazioni dalla tabella WADPerformanceCountersTable, vedere l' esempio PerformanceCounters per Microsoft Azure .See Microsoft Azure PerformanceCounters Sample for an example of querying and displaying performance counter data from the WADPerformanceCountersTable table.

Nota

A seconda della latenza della coda e della frequenza di trasferimento dell'agente di diagnostica, i dati dei contatori delle prestazioni più recenti nell'account di archiviazione potrebbero essere scaduti da alcuni minuti.Depending on the diagnostics agent transfer frequency and queue latency, the most recent performance counter data in the storage account may be several minutes out of date.

Abilitare i contatori delle prestazioni con il file di configurazione della diagnosticaEnable performance counters using diagnostics configuration file

Usare la procedura seguente per abilitare i contatori delle prestazioni nell'applicazione Azure.Use the following procedure to enable performance counters in your Azure application.

PrerequisitiPrerequisites

Questa sezione presuppone che il monitor di diagnostica sia stato importato nell'applicazione e che il file di configurazione della diagnostica sia stato aggiunto alla soluzione Visual Studio (diagnostics.wadcfg in SDK 2.4 e versioni precedenti o diagnostics.wadcfgx in SDK 2.5 e versioni successive).This section assumes that you have imported the Diagnostics monitor into your application and added the diagnostics configuration file to your Visual Studio solution (diagnostics.wadcfg in SDK 2.4 and below or diagnostics.wadcfgx in SDK 2.5 and above). Per altre informazioni, vedere i passaggi 1 e 2 in Abilitazione della diagnostica nei servizi cloud e nelle macchine virtuali di Azure.See steps 1 and 2 in Enabling Diagnostics in Azure Cloud Services and Virtual Machines) for more information.

Passaggio 1: Raccogliere e archiviare i dati dei contatori delle prestazioniStep 1: Collect and store data from performance counters

Dopo avere aggiunto il file della diagnostica alla soluzione Visual Studio, è possibile configurare la raccolta e l'archiviazione dei dati dei contatori delle prestazioni in un'applicazione Azure.After you have added the diagnostics file to your Visual Studio solution, you can configure the collection and storage of performance counter data in an Azure application. Questa operazione viene eseguita tramite l'aggiunta di contatori delle prestazioni nel file della diagnostica.This is done by adding performance counters to the diagnostics file. I dati di diagnostica, inclusi i dati dei contatori delle prestazioni, vengono innanzitutto raccolti nell'istanzaDiagnostics data, including performance counters, is first collected on the instance. e quindi salvati in modo permanente nella tabella WADPerformanceCountersTable del servizio tabelle di Azure, pertanto è necessario specificare l'account di archiviazione nell'applicazione.The data is then persisted to the WADPerformanceCountersTable table in the Azure Table service, so you will also need to specify the storage account in your application. Se si esegue il test dell'applicazione in locale nell'emulatore di calcolo, è anche possibile archiviare i dati di diagnostica in locale nell'emulatore di archiviazione.If you're testing your application locally in the Compute Emulator, you can also store diagnostics data locally in the Storage Emulator. Prima di archiviare i dati di diagnostica è necessario passare al portale di Azure e creare un account di archiviazione classico.Before you store diagnostics data, you must first go to the Azure portal and create a classic storage account. È consigliabile creare l'account di archiviazione nella stessa area geografica in cui si trova l'applicazione Azure.A best practice is to locate your storage account in the same geo-location as your Azure application. Mantenendo l'applicazione e l'account di archiviazione di Azure nella stessa area geografica, si evita il pagamento di costi per la larghezza di banda esterna e si riduce la latenza.By keeping the Azure application and storage account are in the same geo-location, you avoid paying external bandwidth costs and reduce latency.

Aggiungere i contatori delle prestazioni nel file della diagnosticaAdd performance counters to the diagnostics file

È possibile usare diversi contatori.There are many counters you can use. L'esempio seguente comprende diversi contatori delle prestazioni consigliati per il monitoraggio dei ruoli Web e di lavoro.The following example shows several performance counters that are recommended for web and worker role monitoring.

Aprire il file della diagnostica (diagnostics.wadcfg in SDK 2.4 e versioni precedenti o diagnostics.wadcfgx in SDK 2.5 e versioni successive) e aggiungere quanto segue all'elemento DiagnosticMonitorConfiguration:Open the diagnostics file (diagnostics.wadcfg in SDK 2.4 and below or diagnostics.wadcfgx in SDK 2.5 and above) and add the following to the DiagnosticMonitorConfiguration element:

<PerformanceCounters bufferQuotaInMB="0" scheduledTransferPeriod="PT30M">
    <PerformanceCounterConfiguration counterSpecifier="\Memory\Available Bytes" sampleRate="PT30S" />
    <PerformanceCounterConfiguration counterSpecifier="\Processor(_Total)\% Processor Time" sampleRate="PT30S" />

    <!-- Use the Process(w3wp) category counters in a web role -->

    <PerformanceCounterConfiguration counterSpecifier="\Process(w3wp)\% Processor Time" sampleRate="PT30S" />
    <PerformanceCounterConfiguration counterSpecifier="\Process(w3wp)\Private Bytes" sampleRate="PT30S" />
    <PerformanceCounterConfiguration counterSpecifier="\Process(w3wp)\Thread Count" sampleRate="PT30S" />

    <!-- Use the Process(WaWorkerHost) category counters in a worker role.
        <PerformanceCounterConfiguration counterSpecifier="\Process(WaWorkerHost)\% Processor Time" sampleRate="PT30S" />
        <PerformanceCounterConfiguration counterSpecifier="\Process(WaWorkerHost)\Private Bytes" sampleRate="PT30S" />
        <PerformanceCounterConfiguration counterSpecifier="\Process(WaWorkerHost)\Thread Count" sampleRate="PT30S" />
    -->

    <PerformanceCounterConfiguration counterSpecifier="\.NET CLR Interop(_Global_)\# of marshalling" sampleRate="PT30S" />
    <PerformanceCounterConfiguration counterSpecifier="\.NET CLR Loading(_Global_)\% Time Loading" sampleRate="PT30S" />
    <PerformanceCounterConfiguration counterSpecifier="\.NET CLR LocksAndThreads(_Global_)\Contention Rate / sec" sampleRate="PT30S" />
    <PerformanceCounterConfiguration counterSpecifier="\.NET CLR Memory(_Global_)\# Bytes in all Heaps" sampleRate="PT30S" />
    <PerformanceCounterConfiguration counterSpecifier="\.NET CLR Networking(_Global_)\Connections Established" sampleRate="PT30S" />
    <PerformanceCounterConfiguration counterSpecifier="\.NET CLR Remoting(_Global_)\Remote Calls/sec" sampleRate="PT30S" />
    <PerformanceCounterConfiguration counterSpecifier="\.NET CLR Jit(_Global_)\% Time in Jit" sampleRate="PT30S" />
</PerformanceCounters>

L'attributo bufferQuotaInMB, che specifica la quantità massima di spazio di archiviazione disponibile nel file system per il tipo di raccolta dati (log di Azure, log di IIS ecc.).The bufferQuotaInMB attribute, which specifies the maximum amount of file system storage that is available for the data collection type (Azure logs, IIS logs, etc.). Il valore predefinito è 0.The default is 0. Quando viene raggiunta la quota massima, i dati meno recenti vengono eliminati man mano che vengono aggiunti nuovi dati.When the quota is reached, the oldest data is deleted as new data is added. La somma di tutte le proprietà di bufferQuotaInMB deve essere maggiore del valore dell'attributo OverallQuotaInMB.The sum of all the bufferQuotaInMB properties must be greater than the value of the OverallQuotaInMB attribute. Per informazioni dettagliate su come determinare la quantità di archiviazione necessaria per la raccolta dei dati di diagnostica, vedere la sezione relativa alla configurazione di WAD in Procedure consigliate di risoluzione dei problemi per lo sviluppo di applicazioni Azure.For a more detailed discussion of determining how much storage will be required for the collection of diagnostics data, see the Setup WAD section of Troubleshooting Best Practices for Developing Azure Applications.

L'attributo scheduledTransferPeriod, che specifica l'intervallo tra i trasferimenti di dati pianificati, arrotondato per eccesso al minuto più vicino.The scheduledTransferPeriod attribute, which specifies the interval between scheduled transfers of data, rounded up to the nearest minute. Negli esempi seguenti è impostato su PT30M (30 minuti).In the following examples, it is set to PT30M (30 minutes). Un valore di impostazione troppo basso, ad esempio 1 minuto, del periodo di trasferimento influisce negativamente sulle prestazioni dell'applicazione in produzione, ma può risultare utile per l'esecuzione rapida della diagnostica in fase di test.Setting the transfer period to a small value, such as 1 minute, will adversely impact your application's performance in production but can be useful for seeing diagnostics working quickly when you are testing. Il periodo di trasferimento pianificato deve essere sufficientemente basso da garantire che i dati di diagnostica non vengano sovrascritti nell'istanza, ma anche sufficientemente alto da non influire sulle prestazioni dell'applicazione.The scheduled transfer period should be small enough to ensure that diagnostic data is not overwritten on the instance, but large enough that it will not impact the performance of your application.

L'attributo counterSpecifier specifica il contatore delle prestazioni di cui raccogliere i dati.The counterSpecifier attribute specifies the performance counter to collect. L'attributo sampleRate specifica la frequenza con cui raccogliere i dati del contatore delle prestazioni, in questo caso 30 secondi.The sampleRate attribute specifies the rate at which the performance counter should be sampled, in this case 30 seconds.

Una volta aggiunti i contatori delle prestazioni di cui raccogliere i dati, salvare le modifiche nel file diagnostica.Once you've added the performance counters that you want to collect, save your changes to the diagnostics file. Sarà quindi necessario specificare l'account di archiviazione nel quale verranno salvati in modo permanente i dati di diagnostica.Next, you need to specify the storage account that the diagnostics data will be persisted to.

Specificare l'account di archiviazioneSpecify the storage account

Per salvare in modo permanente le informazioni di diagnostica nell'account di archiviazione di Azure, è necessario specificare una stringa di connessione nel file di configurazione del servizio (ServiceConfiguration.cscfg).To persist your diagnostics information to your Azure Storage account, you must specify a connection string in your service configuration (ServiceConfiguration.cscfg) file.

Per Azure SDK 2.5 l'account di archiviazione può essere specificato nel file diagnostics.wadcfgx.For Azure SDK 2.5, the Storage Account can be specified in the diagnostics.wadcfgx file.

Nota

Queste istruzioni si applicano solo ad Azure SDK 2.4 e versioni precedenti.These instructions only apply to Azure SDK 2.4 and below. Per Azure SDK 2.5 l'account di archiviazione può essere specificato nel file diagnostics.wadcfgx.For Azure SDK 2.5, the Storage Account can be specified in the diagnostics.wadcfgx file.

Per impostare le stringhe di connessione:To set the connection strings:

  1. Aprire il file ServiceConfiguration.Cloud.cscfg usando l'editor di testo preferito e impostare la stringa di connessione per l'account di archiviazione.Open the ServiceConfiguration.Cloud.cscfg file using your favorite text editor and set the connection string for your storage. I valori AccountName e AccountKey sono disponibili nel dashboard dell'account di archiviazione del portale di Azure, in Chiavi di accesso.The AccountName and AccountKey values are found in the Azure portal in the storage account dashboard, under Access keys.

    <ConfigurationSettings>
      <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="DefaultEndpointsProtocol=https;AccountName=<name>;AccountKey=<key>"/>
    </ConfigurationSettings>
    
  2. Salvare il file ServiceConfiguration.Cloud.cscfg.Save the ServiceConfiguration.Cloud.cscfg file.
  3. Aprire il file ServiceConfiguration.Local.cscfg e verificare che UseDevelopmentStorage sia impostato su true.Open the ServiceConfiguration.Local.cscfg file and verify that UseDevelopmentStorage is set to true.

    <ConfigurationSettings>
      <Settingname="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true"/>
    </ConfigurationSettings>
    

    Ora che le stringhe di connessione sono impostate, i dati di diagnostica verranno salvati in modo permanente nell'account di archiviazione al momento della distribuzione dell'applicazione.Now that the connection strings are set, your application will persist diagnostics data to your storage account when your application is deployed.

  4. Salvare e compilare il progetto, quindi distribuire l'applicazione.Save and build your project, then deploy your application.

Passaggio 2: (Facoltativo) Creare contatori delle prestazioni personalizzatiStep 2: (Optional) Create custom performance counters

Oltre ai contatori delle prestazioni predefiniti, è possibile aggiungere contatori delle prestazioni personalizzati per monitorare i ruoli Web o di lavoro.In addition to the pre-defined performance counters, you can add your own custom performance counters to monitor web or worker roles. I contatori delle prestazioni personalizzati possono essere utilizzati per tenere traccia e monitorare il funzionamento specifico dell'applicazione e possono essere creati o eliminati in un'attività di avvio, in un ruolo Web o in un ruolo di lavoro con autorizzazioni elevate.Custom performance counters may be used to track and monitor application-specific behavior and can be created or deleted in a startup task, web role, or worker role with elevated permissions.

L'agente Diagnostica di Azure aggiorna la configurazione dei contatori delle prestazioni dal file con estensione wadcfg un minuto dopo l'avvio.The Azure diagnostics agent refreshes the performance counter configuration from the .wadcfg file one minute after starting. Se si creano contatori delle prestazioni personalizzati nel metodo OnStart e l'esecuzione delle attività di avvio dura più di un minuto, i contatori delle prestazioni personalizzati non risulteranno creati quando l'agente Diagnostica di Azure cercherà di caricarli.If you create custom performance counters in the OnStart method and your startup tasks take longer than one minute to execute, your custom performance counters will not have been created when the Azure Diagnostics agent tries to load them. In questo scenario Diagnostica di Azure acquisirà correttamente tutti i dati di diagnostica tranne i contatori delle prestazioni personalizzati.In this scenario, you will see that Azure Diagnostics correctly captures all diagnostics data except your custom performance counters. Per risolvere questo problema, creare i contatori delle prestazioni in un'attività di avvio o spostare parte delle operazioni delle attività di avvio al metodo OnStart dopo avere creato i contatori delle prestazioni.To resolve this issue, create the performance counters in a startup task or move some of your startup task work to the OnStart method after creating the performance counters.

Per creare un semplice contatore delle prestazioni personalizzato denominato "\MyCustomCounterCategory\MyButton1Counter", effettuare i passaggi seguenti:Perform the following steps to create a simple custom performance counter named "\MyCustomCounterCategory\MyButton1Counter":

  1. Aprire il file di definizione del servizio (CSDEF) dell'applicazione.Open the service definition file (CSDEF) for your application.
  2. Aggiungere l'elemento Runtime all'elemento WebRole o WorkerRole per consentire l'esecuzione con privilegi elevati:Add the Runtime element to the WebRole or WorkerRole element to allow execution with elevated privileges:

    <runtime executioncontext="elevated"/>
    
  3. Salvare il file.Save the file.
  4. Aprire il file della diagnostica (diagnostics.wadcfg in SDK 2.4 e versioni precedenti o diagnostics.wadcfgx in SDK 2.5 e versioni successive) e aggiungere quanto segue a DiagnosticMonitorConfiguration:Open the diagnostics file (diagnostics.wadcfg in SDK 2.4 and below or diagnostics.wadcfgx in SDK 2.5 and above) and add the following to the DiagnosticMonitorConfiguration

    <PerformanceCounters bufferQuotaInMB="0" scheduledTransferPeriod="PT30M">
      <PerformanceCounterConfiguration counterSpecifier="\MyCustomCounterCategory\MyButton1Counter" sampleRate="PT30S"/>
    </PerformanceCounters>
    
  5. Salvare il file.Save the file.
  6. Creare la categoria dei contatori delle prestazioni personalizzati nel metodo OnStart del ruolo prima di richiamare base.OnStart.Create the custom performance counter category in the OnStart method of your role, before invoking base.OnStart. Nell'esempio C# seguente viene creata una categoria personalizzata, nel caso in cui non esista già:The following C# example creates a custom category, if it does not already exist:

    public override bool OnStart()
    {
      if (!PerformanceCounterCategory.Exists("MyCustomCounterCategory"))
      {
         CounterCreationDataCollection counterCollection = new CounterCreationDataCollection();
    
         // add a counter tracking user button1 clicks
         CounterCreationData operationTotal1 = new CounterCreationData();
         operationTotal1.CounterName = "MyButton1Counter";
         operationTotal1.CounterHelp = "My Custom Counter for Button1";
         operationTotal1.CounterType = PerformanceCounterType.NumberOfItems32;
         counterCollection.Add(operationTotal1);
    
         PerformanceCounterCategory.Create(
           "MyCustomCounterCategory",
           "My Custom Counter Category",
           PerformanceCounterCategoryType.SingleInstance, counterCollection);
    
         Trace.WriteLine("Custom counter category created.");
      }
      else {
        Trace.WriteLine("Custom counter category already exists.");
      }
    
    return base.OnStart();
    }
    
  7. Aggiornare i contatori all'interno dell'applicazione.Update the counters within your application. Nell'esempio seguente viene aggiornato un contatore delle prestazioni personalizzato per gli eventi Button1_Click:The following example updates a custom performance counter on Button1_Click events:

    protected void Button1_Click(object sender, EventArgs e)
    {
      PerformanceCounter button1Counter = new PerformanceCounter(
        "MyCustomCounterCategory",
        "MyButton1Counter",
        string.Empty,
        false);
      button1Counter.Increment();
      this.Button1.Text = "Button 1 count: " +
        button1Counter.RawValue.ToString();
    }
    
  8. Salvare il file.Save the file.

I dati dei contatori delle prestazioni personalizzati verranno ora raccolti dal monitoraggio di diagnostica di Azure.Custom performance counter data will now be collected by the Azure diagnostics monitor.

Passaggio 3: Eseguire query sui dati dei contatori delle prestazioniStep 3: Query performance counter data

Dopo che l'applicazione è stata distribuita ed è in esecuzione, il monitoraggio diagnostica inizierà a raccogliere i dati dei contatori delle prestazioni e a salvarli in modo permanente nell'archiviazione di Azure.Once your application is deployed and running, the Diagnostics monitor will begin collecting performance counters and persisting that data to Azure storage. Usare strumenti come Esplora server in Visual Studio, Azure Storage Explorer o Azure Diagnostics Manager di Cerebrata per visualizzare i dati dei contatori delle prestazioni nella tabella WADPerformanceCountersTable.You use tools such as Server Explorer in Visual Studio, Azure Storage Explorer, or Azure Diagnostics Manager by Cerebrata to view the performance counters data in the WADPerformanceCountersTable table. A livello di codice è anche possibile eseguire una query sul servizio tabelle usando C#, Java, Node.js, Python, Ruby o PHP.You can also programmatically query the Table service using C#, Java, Node.js, Python, Ruby, or PHP.

Nell'esempio C# seguente viene illustrato come eseguire una query di base sulla tabella WADPerformanceCountersTable e come salvare i dati di diagnostica in un file CSV.The following C# example shows a basic query against the WADPerformanceCountersTable table and saves the diagnostics data to a CSV file. Dopo aver salvato i contatori delle prestazioni in un file CSV, è possibile usare le funzionalità grafiche di Microsoft Excel o altri strumenti per visualizzare i dati.Once the performance counters are saved to a CSV file, you can use the graphing capabilities in Microsoft Excel or some other tool to visualize the data. Ricordarsi di aggiungere un riferimento a Microsoft.WindowsAzure.Storage.dll, che è stato incluso in Azure SDK per .NET a partire dalla versione di ottobre 2012.Be sure to add a reference to Microsoft.WindowsAzure.Storage.dll, which is included in the Azure SDK for .NET October 2012 and later. L'assembly viene installato nella directory %Programmi%\Microsoft SDKs\Microsoft Azure.NET SDK\version-num\ref.The assembly is installed to the %Program Files%\Microsoft SDKs\Microsoft Azure.NET SDK\version-num\ref\ directory.

using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Auth;
using Microsoft.WindowsAzure.Storage.Table;
...

// Get the connection string. When using Microsoft Azure Cloud Services, it is recommended
// you store your connection string using the Microsoft Azure service configuration
// system (*.csdef and *.cscfg files). You can you use the CloudConfigurationManager type
// to retrieve your storage connection string.  If you're not using Cloud Services, it's
// recommended that you store the connection string in your web.config or app.config file.
// Use the ConfigurationManager type to retrieve your storage connection string.

string connectionString = Microsoft.WindowsAzure.CloudConfigurationManager.GetSetting("StorageConnectionString");
//string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString;

// Get a reference to the storage account using the connection string.  You can also use the development
// storage account (Storage Emulator) for local debugging.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
//CloudStorageAccount storageAccount = CloudStorageAccount.DevelopmentStorageAccount;

// Create the table client.
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

// Create the CloudTable object that represents the "WADPerformanceCountersTable" table.
CloudTable table = tableClient.GetTableReference("WADPerformanceCountersTable");

// Create the table query, filter on a specific CounterName, DeploymentId and RoleInstance.
TableQuery<PerformanceCountersEntity> query = new TableQuery<PerformanceCountersEntity>()
  .Where(
    TableQuery.CombineFilters(
      TableQuery.GenerateFilterCondition("CounterName", QueryComparisons.Equal, @"\Processor(_Total)\% Processor Time"),
      TableOperators.And,
      TableQuery.CombineFilters(
      TableQuery.GenerateFilterCondition("DeploymentId", QueryComparisons.Equal, "ec26b7a1720447e1bcdeefc41c4892a3"),
      TableOperators.And,
      TableQuery.GenerateFilterCondition("RoleInstance", QueryComparisons.Equal, "WebRole1_IN_0")
    )
  )
);

// Execute the table query.
IEnumerable<PerformanceCountersEntity> result = table.ExecuteQuery(query);

// Process the query results and build a CSV file.
StringBuilder sb = new StringBuilder("TimeStamp,EventTickCount,DeploymentId,Role,RoleInstance,CounterName,CounterValue\n");

foreach (PerformanceCountersEntity entity in result)
{
  sb.Append(entity.Timestamp + "," + entity.EventTickCount + "," + entity.DeploymentId + ","
    + entity.Role + "," + entity.RoleInstance + "," + entity.CounterName + "," + entity.CounterValue+"\n");
}

StreamWriter sw = File.CreateText(@"C:\temp\PerfCounters.csv");
sw.Write(sb.ToString());
sw.Close();

Per eseguire il mapping di entità a oggetti C#, viene utilizzata una classe personalizzata derivata da TableEntity.Entities map to C# objects using a custom class derived from TableEntity. Il codice seguente definisce una classe dell'entità che rappresenta un contatore delle prestazioni nella tabella WADPerformanceCountersTable .The following code defines an entity class that represents a performance counter in the WADPerformanceCountersTable table.

public class PerformanceCountersEntity : TableEntity
{
  public long EventTickCount { get; set; }
  public string DeploymentId { get; set; }
  public string Role { get; set; }
  public string RoleInstance { get; set; }
  public string CounterName { get; set; }
  public double CounterValue { get; set; }
}

Passaggi successiviNext Steps

Visualizzare altri articoli sulla diagnostica di AzureView additional articles on Azure Diagnostics