Trasmettere i dati di Diagnostica di Azure nel percorso critico tramite Hub eventiStreaming Azure Diagnostics data in the hot path by using Event Hubs

Diagnostica di Azure fornisce metodi flessibili per raccogliere le metriche e i log delle macchine virtuali (VM) di servizi cloud e trasferire i risultati in Archiviazione di Azure.Azure Diagnostics provides flexible ways to collect metrics and logs from cloud services virtual machines (VMs) and transfer results to Azure Storage. A partire da marzo 2016 (SDK 2.9), è possibile eseguire inviare la diagnostica a origini dati completamente personalizzate e trasferire i dati del percorso critico in pochi secondi tramite Hub eventi di Azure.Starting in the March 2016 (SDK 2.9) time frame, you can send Diagnostics to custom data sources and transfer hot path data in seconds by using Azure Event Hubs.

Tipi di dati supportati:Supported data types include:

  • Tracciamento degli eventi di Windows (ETW)Event Tracing for Windows (ETW) events
  • Contatori delle prestazioniPerformance counters
  • Registri eventi di WindowsWindows event logs
  • Log applicazioniApplication logs
  • Log dell'infrastruttura Diagnostica di AzureAzure Diagnostics infrastructure logs

Questo articolo illustra le modalità di configurazione di Diagnostica di Azure con Hub eventi dall'inizio alla fine.This article shows you how to configure Azure Diagnostics with Event Hubs from end to end. Vengono inoltre fornite delle linee guida per gli scenari comuni seguenti:Guidance is also provided for the following common scenarios:

  • Come personalizzare le metriche e i log inviati a Hub eventiHow to customize the logs and metrics that get sent to Event Hubs
  • Come modificare le configurazioni in ciascun ambienteHow to change configurations in each environment
  • Come visualizzare i dati di flusso di Hub eventiHow to view Event Hubs stream data
  • Come risolvere i problemi di connessioneHow to troubleshoot the connection

PrerequisitiPrerequisites

La ricezione di dati di Diagnostica di Azure in Hub eventi è supportata in Servizi cloud, macchine virtuali, set di scalabilità di macchine virtuali e Service Fabric a partire da Azure SDK 2.9 e dalla versione corrispondente di Strumenti di Azure per Visual Studio.Event Hubs receieving data from Azure Diagnostics is supported in Cloud Services, VMs, Virtual Machine Scale Sets, and Service Fabric starting in the Azure SDK 2.9 and the corresponding Azure Tools for Visual Studio.

Collegare Diagnostica di Azure al sink dell'Hub eventiConnect Azure Diagnostics to Event Hubs sink

Per impostazione predefinita, Diagnostica di Azure invia sempre log e metriche a un account di archiviazione di Azure.By default, Azure Diagnostics always sends logs and metrics to an Azure Storage account. Un'applicazione può anche inviare dati agli Hub eventi aggiungendo una nuova sezione Sinks nell'elemento PublicConfig / WadCfg del file .wadcfgx.An application may also send data to Event Hubs by adding a new Sinks section under the PublicConfig / WadCfg element of the .wadcfgx file. In Visual Studio il file .wadcfgx viene archiviato nel percorso di destinazione seguente: Progetto servizio cloud > Ruoli > (NomeRuolo) > file diagnostics.wadcfgx.In Visual Studio, the .wadcfgx file is stored in the following path: Cloud Service Project > Roles > (RoleName) > diagnostics.wadcfgx file.

<SinksConfig>
  <Sink name="HotPath">
    <EventHub Url="https://diags-mycompany-ns.servicebus.windows.net/diageventhub" SharedAccessKeyName="SendRule" />
  </Sink>
</SinksConfig>
"SinksConfig": {
    "Sink": [
        {
            "name": "HotPath",
            "EventHub": {
                "Url": "https://diags-mycompany-ns.servicebus.windows.net/diageventhub",
                "SharedAccessKeyName": "SendRule"
            }
        }
    ]
}

In questo esempio l'URL dell'Hub eventi è impostato sullo spazio dei nomi completo dell'Hub eventi: spazio dei nomi di Hub eventi + "/" + nome Hub eventi.In this example, the event hub URL is set to the fully qualified namespace of the event hub: Event Hubs namespace + "/" + event hub name.

L'URL dell'Hub eventi viene visualizzato nel Portale di Azure sul dashboard di Hub eventi.The event hub URL is displayed in the Azure portal on the Event Hubs dashboard.

Il nome del Sink può essere impostato su qualsiasi stringa valida, purché lo stesso valore venga usato in modo coerente in tutto il file di configurazione.The Sink name can be set to any valid string as long as the same value is used consistently throughout the config file.

Nota

In questa sezione potrebbero esserci altri sink configurati, come ad esempio applicationInsights .There may be additional sinks, such as applicationInsights configured in this section. Diagnostica di Azure consente di definire uno o più sink, ammesso che ciascun sink venga dichiarato anche nella sezione PrivateConfig .Azure Diagnostics allows one or more sinks to be defined if each sink is also declared in the PrivateConfig section.

Il sink dell'Hub eventi deve essere dichiarato e definito anche nella sezione PrivateConfig del file di configurazione .wadcfgx .The Event Hubs sink must also be declared and defined in the PrivateConfig section of the .wadcfgx config file.

<PrivateConfig xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
  <StorageAccount name="{account name}" key="{account key}" endpoint="{optional storage endpoint}" />
  <EventHub Url="https://diags-mycompany-ns.servicebus.windows.net/diageventhub" SharedAccessKeyName="SendRule" SharedAccessKey="{base64 encoded key}" />
</PrivateConfig>
{
    "storageAccountName": "{account name}",
    "storageAccountKey": "{account key}",
    "storageAccountEndPoint": "{optional storage endpoint}",
    "EventHub": {
        "Url": "https://diags-mycompany-ns.servicebus.windows.net/diageventhub",
        "SharedAccessKeyName": "SendRule",
        "SharedAccessKey": "{base64 encoded key}"
    }
}

Il valore SharedAccessKeyName deve corrispondere a una chiave di firma di accesso condiviso e ai criteri definiti nello spazio dei nomi di Hub eventi .The SharedAccessKeyName value must match a Shared Access Signature (SAS) key and policy that has been defined in the Event Hubs namespace. Passare al dashboard Hub eventi nel portale di Azure, selezionare la scheda Configura e impostare un criterio denominato (ad esempio, "SendRule") che dispone delle autorizzazioni di invio .Browse to the Event Hubs dashboard in the Azure portal, click the Configure tab, and set up a named policy (for example, "SendRule") that has Send permissions. Anche il valore StorageAccount viene dichiarato in PrivateConfig.The StorageAccount is also declared in PrivateConfig. Non è necessario modificare i valori se funzionano.There is no need to change values here if they are working. In questo esempio, i valori vengono lasciati vuoti, poiché verranno impostati da un asset downstream.In this example, we leave the values empty, which is a sign that a downstream asset will set the values. Ad esempio, il file di configurazione dell'ambiente ServiceConfiguration.Cloud.cscfg consente l'impostazione delle chiavi e dei nomi appropriati per l'ambiente.For example, the ServiceConfiguration.Cloud.cscfg environment configuration file sets the environment-appropriate names and keys.

Avviso

La chiave di firma di accesso condiviso di Hub eventi è archiviata in testo normale nel file .wadcfgx .The Event Hubs SAS key is stored in plain text in the .wadcfgx file. Spesso questa chiave viene archiviata nel controllo del codice sorgente o risulta disponibile in un asset del server di compilazione, pertanto è necessario proteggerla in maniera appropriata.Often, this key is checked in to source code control or is available as an asset in your build server, so you should protect it as appropriate. Si consiglia di usare una chiave SAS con autorizzazioni Send only in modo che qualsiasi utente malintenzionato possa al massimo scrivere nell'Hub eventi, ma non ascoltarlo o gestirlo.We recommend that you use a SAS key here with Send only permissions so that a malicious user can write to the event hub, but not listen to it or manage it.

Configurare la Diagnostica di Azure per inviare log e metriche a Hub eventiConfigure Azure Diagnostics to send logs and metrics to Event Hubs

Come illustrato in precedenza, tutti i dati di diagnostica predefiniti e personalizzati (ovvero metriche e log) vengono inviati automaticamente ad Archiviazione di Azure agli intervalli configurati.As discussed previously, all default and custom diagnostics data, that is, metrics and logs, is automatically sent to Azure Storage in the configured intervals. Con Hub eventi (e qualsiasi sink aggiuntivo), è possibile specificare qualsiasi nodo radice o foglia nella gerarchia da inviare a Hub eventi.With Event Hubs and any additional sink, you can specify any root or leaf node in the hierarchy to be sent to the event hub. Questi includono gli eventi ETW, i contatori delle prestazioni, i registri eventi di Windows e i registri dell'applicazione.This includes ETW events, performance counters, Windows event logs, and application logs.

È importante valutare il numero di punti dati effettivi da trasferire all'Hub eventi.It is important to consider how many data points should actually be transferred to Event Hubs. Di solito gli sviluppatori trasferiscono i dati del percorso critico a bassa latenza che devono essere utilizzati e interpretati rapidamente.Typically, developers transfer low-latency hot-path data that must be consumed and interpreted quickly. I sistemi che monitorano gli avvisi o le regole di scalabilità automatica sono degli esempi.Systems that monitor alerts or autoscale rules are examples. Uno sviluppatore può anche configurare un archivio di analisi o di ricerca alternativo; ad esempio, Analisi di flusso di Azure, ElasticSearch, un sistema di monitoraggio personalizzato o un sistema di monitoraggio preferito di terze parti.A developer might also configure an alternate analysis store or search store -- for example, Azure Stream Analytics, Elasticsearch, a custom monitoring system, or a favorite monitoring system from others.

Di seguito alcuni esempi di configurazioni.The following are some example configurations.

<PerformanceCounters scheduledTransferPeriod="PT1M" sinks="HotPath">
  <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" />
</PerformanceCounters>
"PerformanceCounters": {
    "scheduledTransferPeriod": "PT1M",
    "sinks": "HotPath",
    "PerformanceCounterConfiguration": [
        {
            "counterSpecifier": "\\Processor(_Total)\\% Processor Time",
            "sampleRate": "PT3M"
        },
        {
            "counterSpecifier": "\\Memory\\Available MBytes",
            "sampleRate": "PT3M"
        },
        {
            "counterSpecifier": "\\Web Service(_Total)\\ISAPI Extension Requests/sec",
            "sampleRate": "PT3M"
        }
    ]
}

Nell'esempio precedente poiché il sink viene applicato al nodo padre PerformanceCounters nella gerarchia, tutti i nodi figlio PerformanceCounters verranno inviati agli hub eventi.In the above example, the sink is applied to the parent PerformanceCounters node in the hierarchy, which means all child PerformanceCounters will be sent to Event Hubs.

<PerformanceCounters scheduledTransferPeriod="PT1M">
  <PerformanceCounterConfiguration counterSpecifier="\Memory\Available MBytes" sampleRate="PT3M" />
  <PerformanceCounterConfiguration counterSpecifier="\Web Service(_Total)\ISAPI Extension Requests/sec" sampleRate="PT3M" />
  <PerformanceCounterConfiguration counterSpecifier="\ASP.NET\Requests Queued" sampleRate="PT3M" sinks="HotPath" />
  <PerformanceCounterConfiguration counterSpecifier="\ASP.NET\Requests Rejected" sampleRate="PT3M" sinks="HotPath"/>
  <PerformanceCounterConfiguration counterSpecifier="\Processor(_Total)\% Processor Time" sampleRate="PT3M" sinks="HotPath"/>
</PerformanceCounters>
"PerformanceCounters": {
    "scheduledTransferPeriod": "PT1M",
    "PerformanceCounterConfiguration": [
        {
            "counterSpecifier": "\\Processor(_Total)\\% Processor Time",
            "sampleRate": "PT3M",
            "sinks": "HotPath"
        },
        {
            "counterSpecifier": "\\Memory\\Available MBytes",
            "sampleRate": "PT3M"
        },
        {
            "counterSpecifier": "\\Web Service(_Total)\\ISAPI Extension Requests/sec",
            "sampleRate": "PT3M"
        },
        {
            "counterSpecifier": "\\ASP.NET\\Requests Rejected",
            "sampleRate": "PT3M",
            "sinks": "HotPath"
        },
        {
            "counterSpecifier": "\\ASP.NET\\Requests Queued",
            "sampleRate": "PT3M",
            "sinks": "HotPath"
        }
    ]
}

Nell'esempio precedente il sink è applicato solo a tre contatori: richieste in coda, richieste rifiutate e % tempo processore.In the previous example, the sink is applied to only three counters: Requests Queued, Requests Rejected, and % Processor time.

Nell'esempio seguente viene illustrato come uno sviluppatore può limitare la quantità di dati inviati come metriche importanti che vengono usate per l'integrità del servizio.The following example shows how a developer can limit the amount of sent data to be the critical metrics that are used for this service’s health.

<Logs scheduledTransferPeriod="PT1M" sinks="HotPath" scheduledTransferLogLevelFilter="Error" />
"Logs": {
    "scheduledTransferPeriod": "PT1M",
    "scheduledTransferLogLevelFilter": "Error",
    "sinks": "HotPath"
}

In questo esempio, il sink viene applicato ai registri e filtrato solo per l'analisi a livello di errore.In this example, the sink is applied to logs and is filtered only to error level trace.

Distribuire e aggiornare un'applicazione dei servizi cloud e della configurazione della diagnosticaDeploy and update a Cloud Services application and diagnostics config

Visual Studio offre il modo più semplice per distribuire l'applicazione e la configurazione sink dell'Hub eventi.Visual Studio provides the easiest path to deploy the application and Event Hubs sink configuration. Per visualizzare e modificare il file, aprire il file .wadcfgx in Visual Studio, modificarlo e salvarlo.To view and edit the file, open the .wadcfgx file in Visual Studio, edit it, and save it. Il percorso è Progetto servizio cloud > Ruoli > (NomeRuolo) > diagnostics.wadcfgx.The path is Cloud Service Project > Roles > (RoleName) > diagnostics.wadcfgx.

A questo punto, tutte le operazioni di distribuzione e di aggiornamento delle distribuzioni in Visual Studio, Visual Studio Team System e tutti i comandi o script che si basano su MSBuild e usano la destinazione /t:publish includeranno il file .wadcfgx nel processo di creazione dei pacchetti.At this point, all deployment and deployment update actions in Visual Studio, Visual Studio Team System, and all commands or scripts that are based on MSBuild and use the /t:publish target include the .wadcfgx in the packaging process. Le distribuzioni e gli aggiornamenti distribuiscono anche il file in Azure tramite l'appropriata estensione agente di Diagnostica di Azure nelle macchine virtuali.In addition, deployments and updates deploy the file to Azure by using the appropriate Azure Diagnostics agent extension on your VMs.

Al termine della distribuzione dell'applicazione e della configurazione di Diagnostica di Azure, l'attività verrà visualizzata immediatamente nel dashboard dell'Hub eventi.After you deploy the application and Azure Diagnostics configuration, you will immediately see activity in the dashboard of the event hub. Ciò indica che si è pronti per passare alla visualizzazione dei dati del percorso critico nel client listener o nello strumento di analisi scelto.This indicates that you're ready to move on to viewing the hot-path data in the listener client or analysis tool of your choice.

Nella figura seguente, il dashboard Hub eventi mostra l'invio integro dei dati di diagnostica all'Hub eventi a partire da un certo momento dopo le 23.00,In the following figure, the Event Hubs dashboard shows healthy sending of diagnostics data to the event hub starting sometime after 11 PM. ossia quando l'applicazione è stata distribuita con una versione aggiornata del file .wadcfgx e il sink è stato configurato correttamente.That's when the application was deployed with an updated .wadcfgx file, and the sink was configured properly.

Nota

Quando si eseguono gli aggiornamenti del file di configurazione di Diagnostica di Azure (.wadcfgx), si consiglia di eseguire il push degli aggiornamenti per l'intera applicazione e la configurazione tramite la pubblicazione di Visual Studio o tramite script di Windows PowerShell.When you make updates to the Azure Diagnostics config file (.wadcfgx), it's recommended that you push the updates to the entire application as well as the configuration by using either Visual Studio publishing, or a Windows PowerShell script.

Visualizzare i dati del percorso criticoView hot-path data

Come illustrato in precedenza, esistono molti casi d'uso per l'ascolto e l'elaborazione dei dati dell'Hub eventi.As discussed previously, there are many use cases for listening to and processing Event Hubs data.

Un approccio semplice consiste nel creare una piccola applicazione console di verifica per l'ascolto dell'Hub eventi e per la stampa del flusso di output.One simple approach is to create a small test console application to listen to the event hub and print the output stream. È possibile inserire il seguente codice (descritto dettagliatamente nell'articolo Introduzione all'Hub eventi) in un'applicazione console.You can place the following code, which is explained in more detail in Get started with Event Hubs), in a console application.

L'applicazione console deve includere il pacchetto Event Processor Host NuGet.Note that the console application must include the Event Processor Host NuGet package.

Sostituire i valori in parentesi tonde nella funzione Main con i valori per le proprie risorse.Remember to replace the values in angle brackets in the Main function with values for your resources.

//Console application code for EventHub test client
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.ServiceBus.Messaging;

namespace EventHubListener
{
    class SimpleEventProcessor : IEventProcessor
    {
        Stopwatch checkpointStopWatch;

        async Task IEventProcessor.CloseAsync(PartitionContext context, CloseReason reason)
        {
            Console.WriteLine("Processor Shutting Down. Partition '{0}', Reason: '{1}'.", context.Lease.PartitionId, reason);
            if (reason == CloseReason.Shutdown)
            {
                await context.CheckpointAsync();
            }
        }

        Task IEventProcessor.OpenAsync(PartitionContext context)
        {
            Console.WriteLine("SimpleEventProcessor initialized.  Partition: '{0}', Offset: '{1}'", context.Lease.PartitionId, context.Lease.Offset);
            this.checkpointStopWatch = new Stopwatch();
            this.checkpointStopWatch.Start();
            return Task.FromResult<object>(null);
        }

        async Task IEventProcessor.ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> messages)
        {
            foreach (EventData eventData in messages)
            {
                string data = Encoding.UTF8.GetString(eventData.GetBytes());
                    Console.WriteLine(string.Format("Message received.  Partition: '{0}', Data: '{1}'",
                        context.Lease.PartitionId, data));

                foreach (var x in eventData.Properties)
                {
                    Console.WriteLine(string.Format("    {0} = {1}", x.Key, x.Value));
                }
            }

            //Call checkpoint every 5 minutes, so that worker can resume processing from 5 minutes back if it restarts.
            if (this.checkpointStopWatch.Elapsed > TimeSpan.FromMinutes(5))
            {
                await context.CheckpointAsync();
                this.checkpointStopWatch.Restart();
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            string eventHubConnectionString = "Endpoint= <your connection string>”
            string eventHubName = "<Event hub name>";
            string storageAccountName = "<Storage account name>";
            string storageAccountKey = "<Storage account key>”;
            string storageConnectionString = string.Format("DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}", storageAccountName, storageAccountKey);

            string eventProcessorHostName = Guid.NewGuid().ToString();
            EventProcessorHost eventProcessorHost = new EventProcessorHost(eventProcessorHostName, eventHubName, EventHubConsumerGroup.DefaultGroupName, eventHubConnectionString, storageConnectionString);
            Console.WriteLine("Registering EventProcessor...");
            var options = new EventProcessorOptions();
            options.ExceptionReceived += (sender, e) => { Console.WriteLine(e.Exception); };
            eventProcessorHost.RegisterEventProcessorAsync<SimpleEventProcessor>(options).Wait();

            Console.WriteLine("Receiving. Press enter key to stop worker.");
            Console.ReadLine();
            eventProcessorHost.UnregisterEventProcessorAsync().Wait();
        }
    }
}

Risoluzione dei problemi relativi ai sink dell'Hub eventiTroubleshoot Event Hubs sinks

  • L'Hub eventi non visualizza le attività dell'evento in ingresso o in uscita come previsto.The event hub does not show incoming or outgoing event activity as expected.

    Verificare che l'Hub eventi esegua correttamente il provisioning.Check that your event hub is successfully provisioned. Tutte le informazioni di connessione nella sezione PrivateConfig del file .wadcfgx devono corrispondere ai valori della risorsa, come illustrato nel portale.All connection info in the PrivateConfig section of .wadcfgx must match the values of your resource as seen in the portal. Assicurarsi di avere definito un criterio SAS ("SendRule" nell'esempio) nel portale e che sia stata concessa l'autorizzazione di invio .Make sure that you have a SAS policy defined ("SendRule" in the example) in the portal and that Send permission is granted.

  • Dopo un aggiornamento, l'Hub eventi non visualizza più le attività dell'evento in ingresso o in uscita.After an update, the event hub no longer shows incoming or outgoing event activity.

    In primo luogo, assicurarsi che le informazioni di configurazione e dell'Hub eventi siano esatte, come spiegato in precedenza.First, make sure that the event hub and configuration info is correct as explained previously. Capita che a volte PrivateConfig venga reimpostato in un aggiornamento della distribuzione.Sometimes the PrivateConfig is reset in a deployment update. La soluzione consigliata consiste nell'apportare tutte le modifiche nel file .wadcfgx del progetto e quindi eseguire il push di un aggiornamento completo dell'applicazione.The recommended fix is to make all changes to .wadcfgx in the project and then push a complete application update. Se non è possibile, verificare che l'aggiornamento della diagnostica esegua il push della sezione PrivateConfig completa, che include la chiave SAS.If this is not possible, make sure that the diagnostics update pushes a complete PrivateConfig that includes the SAS key.

  • Ho provato a seguire i suggerimenti, ma l'Hub eventi continua a non funzionare.I tried the suggestions, and the event hub is still not working.

    Eseguire una ricerca nella tabella di Archiviazione di Azure contenente i registri e gli errori della Diagnostica di Azure: WADDiagnosticInfrastructureLogsTable.Try looking in the Azure Storage table that contains logs and errors for Azure Diagnostics itself: WADDiagnosticInfrastructureLogsTable. Una possibilità consiste nell'usare uno strumento come Esplora archivi Azure per connettersi a questo account di archiviazione, visualizzare la tabella e aggiungere una query per il TimeStamp delle ultime 24 ore.One option is to use a tool such as Azure Storage Explorer to connect to this storage account, view this table, and add a query for TimeStamp in the last 24 hours. È possibile utilizzare lo strumento per esportare un file .csv e aprirlo in un'applicazione come Microsoft Excel.You can use the tool to export a .csv file and open it in an application such as Microsoft Excel. Excel semplifica la ricerca di stringhe di presentazione come EventHubsper visualizzare l'errore segnalato.Excel makes it easy to search for calling-card strings, such as EventHubs, to see what error is reported.

Passaggi successiviNext steps

Altre informazioni su Hub eventiLearn more about Event Hubs

Appendice: completare l'esempio di file (.wadcfgx) della configurazione di Diagnostica di AzureAppendix: Complete Azure Diagnostics configuration file (.wadcfgx) example

<?xml version="1.0" encoding="utf-8"?>
<DiagnosticsConfiguration xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
  <PublicConfig xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
    <WadCfg>
      <DiagnosticMonitorConfiguration overallQuotaInMB="4096" sinks="applicationInsights.errors">
        <DiagnosticInfrastructureLogs scheduledTransferLogLevelFilter="Error" />
        <Directories scheduledTransferPeriod="PT1M">
          <IISLogs containerName="wad-iis-logfiles" />
          <FailedRequestLogs containerName="wad-failedrequestlogs" />
        </Directories>
        <PerformanceCounters scheduledTransferPeriod="PT1M" sinks="HotPath">
          <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" />
        </PerformanceCounters>
        <WindowsEventLog scheduledTransferPeriod="PT1M">
          <DataSource name="Application!*" />
        </WindowsEventLog>
        <CrashDumps>
          <CrashDumpConfiguration processName="WaIISHost.exe" />
          <CrashDumpConfiguration processName="WaWorkerHost.exe" />
          <CrashDumpConfiguration processName="w3wp.exe" />
        </CrashDumps>
        <Logs scheduledTransferPeriod="PT1M" sinks="HotPath" scheduledTransferLogLevelFilter="Error" />
      </DiagnosticMonitorConfiguration>
      <SinksConfig>
        <Sink name="HotPath">
          <EventHub Url="https://diageventhub-py-ns.servicebus.windows.net/diageventhub-py" SharedAccessKeyName="SendRule" />
        </Sink>
        <Sink name="applicationInsights">
          <ApplicationInsights />
          <Channels>
            <Channel logLevel="Error" name="errors" />
          </Channels>
        </Sink>
      </SinksConfig>
    </WadCfg>
    <StorageAccount>ACCOUNT_NAME</StorageAccount>
  </PublicConfig>
  <PrivateConfig xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
    <StorageAccount name="{account name}" key="{account key}" endpoint="{storage endpoint}" />
    <EventHub Url="https://diageventhub-py-ns.servicebus.windows.net/diageventhub-py" SharedAccessKeyName="SendRule" SharedAccessKey="YOUR_KEY_HERE" />
  </PrivateConfig>
  <IsEnabled>true</IsEnabled>
</DiagnosticsConfiguration>

Il file ServiceConfiguration.Cloud.cscfg complementare per questo esempio si presenta come segue.The complementary ServiceConfiguration.Cloud.cscfg for this example looks like the following.

<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="MyFixItCloudService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="3" osVersion="*" schemaVersion="2015-04.2.6">
  <Role name="MyFixIt.WorkerRole">
    <Instances count="1" />
    <ConfigurationSettings>
      <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="YOUR_CONNECTION_STRING" />
    </ConfigurationSettings>
  </Role>
</ServiceConfiguration>

Le impostazioni basate su Json equivalenti per le macchine virtuali sono le seguenti:Equivalent Json based settings for virtual machines is as follows:

"settings": {
    "WadCfg": {
        "DiagnosticMonitorConfiguration": {
            "overallQuotaInMB": 4096,
            "sinks": "applicationInsights.errors",
            "DiagnosticInfrastructureLogs": {
                "scheduledTransferLogLevelFilter": "Error"
            },
            "Directories": {
                "scheduledTransferPeriod": "PT1M",
                "IISLogs": {
                    "containerName": "wad-iis-logfiles"
                },
                "FailedRequestLogs": {
                    "containerName": "wad-failedrequestlogs"
                }
            },
            "PerformanceCounters": {
                "scheduledTransferPeriod": "PT1M",
                "sinks": "HotPath",
                "PerformanceCounterConfiguration": [
                    {
                        "counterSpecifier": "\\Memory\\Available MBytes",
                        "sampleRate": "PT3M"
                    },
                    {
                        "counterSpecifier": "\\Web Service(_Total)\\ISAPI Extension Requests/sec",
                        "sampleRate": "PT3M"
                    },
                    {
                        "counterSpecifier": "\\Web Service(_Total)\\Bytes Total/Sec",
                        "sampleRate": "PT3M"
                    },
                    {
                        "counterSpecifier": "\\ASP.NET Applications(__Total__)\\Requests/Sec",
                        "sampleRate": "PT3M"
                    },
                    {
                        "counterSpecifier": "\\ASP.NET Applications(__Total__)\\Errors Total/Sec",
                        "sampleRate": "PT3M"
                    },
                    {
                        "counterSpecifier": "\\ASP.NET\\Requests Queued",
                        "sampleRate": "PT3M"
                    },
                    {
                        "counterSpecifier": "\\ASP.NET\\Requests Rejected",
                        "sampleRate": "PT3M"
                    },
                    {
                        "counterSpecifier": "\\Processor(_Total)\\% Processor Time",
                        "sampleRate": "PT3M"
                    }
                ]
            },
            "WindowsEventLog": {
                "scheduledTransferPeriod": "PT1M",
                "DataSource": [
                    {
                        "name": "Application!*"
                    }
                ]
            },
            "Logs": {
                "scheduledTransferPeriod": "PT1M",
                "scheduledTransferLogLevelFilter": "Error",
                "sinks": "HotPath"
            }
        },
        "SinksConfig": {
            "Sink": [
                {
                    "name": "HotPath",
                    "EventHub": {
                        "Url": "https://diageventhub-py-ns.servicebus.windows.net/diageventhub-py",
                        "SharedAccessKeyName": "SendRule"
                    }
                },
                {
                    "name": "applicationInsights",
                    "ApplicationInsights": "",
                    "Channels": {
                        "Channel": [
                            {
                                "logLevel": "Error",
                                "name": "errors"
                            }
                        ]
                    }
                }
            ]
        }
    },
    "StorageAccount": "{account name}"
}


"protectedSettings": {
    "storageAccountName": "{account name}",
    "storageAccountKey": "{account key}",
    "storageAccountEndPoint": "{storage endpoint}",
    "EventHub": {
        "Url": "https://diageventhub-py-ns.servicebus.windows.net/diageventhub-py",
        "SharedAccessKeyName": "SendRule",
        "SharedAccessKey": "YOUR_KEY_HERE"
    }
}

Passaggi successiviNext steps

Per ulteriori informazioni su Hub eventi visitare i collegamenti seguenti:You can learn more about Event Hubs by visiting the following links: