Aggregazione e raccolta di eventi con Diagnostica di Microsoft AzureEvent aggregation and collection using Windows Azure Diagnostics

Quando si esegue un cluster Azure Service Fabric, è consigliabile raccogliere i log da tutti i nodi in una posizione centrale.When you're running an Azure Service Fabric cluster, it's a good idea to collect the logs from all the nodes in a central location. Il salvataggio dei log in una posizione centrale semplifica l'analisi e la risoluzione di eventuali problemi nel cluster o nelle applicazioni e nei servizi in esecuzione nel cluster.Having the logs in a central location helps you analyze and troubleshoot issues in your cluster, or issues in the applications and services running in that cluster.

Un modo per caricare e raccogliere i log consiste nell'usare l'estensione Diagnostica di Microsoft Azure, che carica i log in Archiviazione di Azure e offre anche la possibilità di inviarli ad Azure Application Insights o Hub eventi.One way to upload and collect logs is to use the Windows Azure Diagnostics (WAD) extension, which uploads logs to Azure Storage, and also has the option to send logs to Azure Application Insights or Event Hubs. È anche possibile usare un processo esterno per leggere gli eventi dalla risorsa di archiviazione e inserirli in una piattaforma di analisi come OMS Log Analytics o un'altra soluzione di analisi di log.You can also use an external process to read the events from storage and place them in an analysis platform product, such as OMS Log Analytics or another log-parsing solution.

PrerequisitiPrerequisites

Per eseguire alcune delle operazioni descritte in questo documento vengono usati gli strumenti seguenti:These tools are used to perform some of the operations in this document:

Origini di log ed eventiLog and event sources

Eventi della piattaforma Service FabricService Fabric platform events

Come illustrato in questo articolo, Service Fabric offre alcuni canali di registrazione predefiniti. Tra questi, i canali seguenti sono facilmente configurabili con Diagnostica di Microsoft Azure per inviare i dati di monitoraggio e diagnostica a una tabella di archiviazione o un'altra posizione.As discussed in this article, Service Fabric sets you up with a few out-of-the-box logging channels, of which the following channels are easily configured with WAD to send monitoring and diagnostics data to a storage table or elsewhere:

Eventi dell'applicazioneApplication events

Eventi generati dal codice delle applicazioni e dei servizi e scritti con la classe helper EventSource disponibile nei modelli di Visual Studio.Events emitted from your applications' and services' code and written out by using the EventSource helper class provided in the Visual Studio templates. Per altre informazioni su come scrivere log EventSource dall'applicazione, vedere Monitorare e diagnosticare servizi in una configurazione di sviluppo con computer locale.For more information on how to write EventSource logs from your application, see Monitor and diagnose services in a local machine development setup.

Distribuire l'estensione DiagnosticaDeploy the Diagnostics extension

Il primo passaggio per la raccolta dei log consiste nel distribuire l'estensione Diagnostica in ogni VM del cluster Service Fabric.The first step in collecting logs is to deploy the Diagnostics extension on each of the VMs in the Service Fabric cluster. Questa estensione raccoglie i log in ogni VM e li carica nell'account di archiviazione specificato.The Diagnostics extension collects logs on each VM and uploads them to the storage account that you specify. La procedura varia a seconda che si usi il portale di Azure oppure Azure Resource Manager.The steps vary a little based on whether you use the Azure portal or Azure Resource Manager. Anche i passaggi variano se la distribuzione fa parte della creazione del cluster o è relativa a un cluster già esistente.The steps also vary based on whether the deployment is part of cluster creation or is for a cluster that already exists. Ecco la procedura per ogni scenario.Let's look at the steps for each scenario.

Distribuire l'estensione Diagnostica nell'ambito della creazione del cluster tramite il portale di AzureDeploy the Diagnostics extension as part of cluster creation through Azure portal

Per distribuire l'estensione Diagnostica nelle VM del cluster nell'ambito della creazione del cluster, si usa il pannello delle impostazioni di diagnostica illustrato nell'immagine seguente. Verificare che l'opzione Diagnostica sia impostata su (impostazione predefinita).To deploy the Diagnostics extension to the VMs in the cluster as part of cluster creation, you use the Diagnostics settings panel shown in the following image - ensure that Diagnostics is set to On (the default setting). Dopo aver creato il cluster, non è possibile modificare questa impostazione tramite il portale.After you create the cluster, you can't change these settings by using the portal.

Impostazioni di diagnostica di Azure nel portale per la creazione del cluster

Quando si crea un cluster con il portale, è consigliabile scaricare il modello prima di fare clic su OK per creare il cluster.When you're creating a cluster by using the portal, we highly recommend that you download the template before you click OK to create the cluster. Per informazioni dettagliate, vedere Configurare un cluster di Service Fabric usando un modello di Azure Resource Manager.For details, refer to Set up a Service Fabric cluster by using an Azure Resource Manager template. Il modello è necessario per apportare modifiche in un secondo momento perché non è possibile apportare alcune modifiche tramite il portale.You'll need the template to make changes later, because you can't make some changes by using the portal.

Distribuire l’estensione Diagnostica come parte della creazione di cluster tramite Gestione risorse di AzureDeploy the Diagnostics extension as part of cluster creation by using Azure Resource Manager

Per creare un cluster tramite Resource Manager, è necessario aggiungere il file JSON di configurazione di Diagnostica al modello di Resource Manager di tipo cluster completo prima di creare il cluster.To create a cluster by using Resource Manager, you need to add the Diagnostics configuration JSON to the full cluster Resource Manager template before you create the cluster. Gli esempi relativi ai modelli di Gestione risorse includono un modello di cluster con 5 VM con aggiunta della configurazione di Diagnostica,We provide a sample five-VM cluster Resource Manager template with Diagnostics configuration added to it as part of our Resource Manager template samples. disponibile nella raccolta di esempi di Azure nella pagina relativa all'esempio di modello di Resource Manager di cluster con cinque nodi con Diagnostica.You can see it at this location in the Azure Samples gallery: Five-node cluster with Diagnostics Resource Manager template sample.

Per visualizzare l'impostazione di Diagnostica nel modello di Resource Manager, aprire il file azuredeploy.json e cercare IaaSDiagnostics.To see the Diagnostics setting in the Resource Manager template, open the azuredeploy.json file and search for IaaSDiagnostics. Per creare un cluster con questo modello, è sufficiente selezionare il pulsante di distribuzione in Azure disponibile nel collegamento precedente.To create a cluster by using this template, select the Deploy to Azure button available at the previous link.

In alternativa, è possibile scaricare l'esempio di Resource Manager, modificarlo e creare un cluster con il modello modificato mediante il comando New-AzureRmResourceGroupDeployment in una finestra di Azure PowerShell.Alternatively, you can download the Resource Manager sample, make changes to it, and create a cluster with the modified template by using the New-AzureRmResourceGroupDeployment command in an Azure PowerShell window. Per i parametri passati al comando, vedere il codice seguente.See the following code for the parameters that you pass in to the command. Per informazioni dettagliate sulla distribuzione di un gruppo di risorse con PowerShell, vedere l'articolo su come distribuire un gruppo di risorse con un modello di Azure Resource Manager.For detailed information on how to deploy a resource group by using PowerShell, see the article Deploy a resource group with the Azure Resource Manager template.

Distribuire l'estensione Diagnostica in un cluster esistenteDeploy the Diagnostics extension to an existing cluster

Se in un cluster esistente non è stata distribuita l'estensione Diagnostica o se si vuole modificare una configurazione esistente, è possibile aggiungerla o aggiornarla.If you have an existing cluster that doesn't have Diagnostics deployed, or if you want to modify an existing configuration, you can add or update it. Modificare il modello di Resource Manager usato per creare il cluster esistente o scaricare il modello dal portale come descritto in precedenza.Modify the Resource Manager template that's used to create the existing cluster or download the template from the portal as described earlier. Modificare il file template.json eseguendo le attività seguenti.Modify the template.json file by performing the following tasks.

Aggiungere una nuova risorsa di archiviazione al modello nella sezione risorse.Add a new storage resource to the template by adding to the resources section.

{
  "apiVersion": "2015-05-01-preview",
  "type": "Microsoft.Storage/storageAccounts",
  "name": "[parameters('applicationDiagnosticsStorageAccountName')]",
  "location": "[parameters('computeLocation')]",
  "properties": {
    "accountType": "[parameters('applicationDiagnosticsStorageAccountType')]"
  },
  "tags": {
    "resourceType": "Service Fabric",
    "clusterName": "[parameters('clusterName')]"
  }
},

Aggiungere quindi alla sezione parametri subito dopo le definizioni dell'account di archiviazione, tra supportLogStorageAccountName e vmNodeType0Name.Next, add to the parameters section just after the storage account definitions, between supportLogStorageAccountName and vmNodeType0Name. Sostituire il testo segnaposto storage account name goes here con il nome dell'account di archiviazione.Replace the placeholder text storage account name goes here with the name of the storage account.

    "applicationDiagnosticsStorageAccountType": {
      "type": "string",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS"
      ],
      "defaultValue": "Standard_LRS",
      "metadata": {
        "description": "Replication option for the application diagnostics storage account"
      }
    },
    "applicationDiagnosticsStorageAccountName": {
      "type": "string",
      "defaultValue": "storage account name goes here",
      "metadata": {
        "description": "Name for the storage account that contains application diagnostics data from the cluster"
      }
    },

Aggiornare quindi la sezione VirtualMachineProfile del file template.json aggiungendo quanto segue all'interno della matrice delle estensioni.Then, update the VirtualMachineProfile section of the template.json file by adding the following code within the extensions array. Assicurarsi di aggiungere una virgola all'inizio o alla fine, a seconda del punto di inserimento.Be sure to add a comma at the beginning or the end, depending on where it's inserted.

{
    "name": "[concat(parameters('vmNodeType0Name'),'_Microsoft.Insights.VMDiagnosticsSettings')]",
    "properties": {
        "type": "IaaSDiagnostics",
        "autoUpgradeMinorVersion": true,
        "protectedSettings": {
        "storageAccountName": "[parameters('applicationDiagnosticsStorageAccountName')]",
        "storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('applicationDiagnosticsStorageAccountName')),'2015-05-01-preview').key1]",
        "storageAccountEndPoint": "https://core.windows.net/"
        },
        "publisher": "Microsoft.Azure.Diagnostics",
        "settings": {
        "WadCfg": {
            "DiagnosticMonitorConfiguration": {
            "overallQuotaInMB": "50000",
            "EtwProviders": {
                "EtwEventSourceProviderConfiguration": [
                {
                    "provider": "Microsoft-ServiceFabric-Actors",
                    "scheduledTransferKeywordFilter": "1",
                    "scheduledTransferPeriod": "PT5M",
                    "DefaultEvents": {
                    "eventDestination": "ServiceFabricReliableActorEventTable"
                    }
                },
                {
                    "provider": "Microsoft-ServiceFabric-Services",
                    "scheduledTransferPeriod": "PT5M",
                    "DefaultEvents": {
                    "eventDestination": "ServiceFabricReliableServiceEventTable"
                    }
                }
                ],
                "EtwManifestProviderConfiguration": [
                {
                    "provider": "cbd93bc2-71e5-4566-b3a7-595d8eeca6e8",
                    "scheduledTransferLogLevelFilter": "Information",
                    "scheduledTransferKeywordFilter": "4611686018427387904",
                    "scheduledTransferPeriod": "PT5M",
                    "DefaultEvents": {
                    "eventDestination": "ServiceFabricSystemEventTable"
                    }
                }
                ]
            }
            }
        },
        "StorageAccount": "[parameters('applicationDiagnosticsStorageAccountName')]"
        },
        "typeHandlerVersion": "1.5"
    }
}

Dopo aver modificato il file template.json come descritto, pubblicare nuovamente il modello di Resource Manager.After you modify the template.json file as described, republish the Resource Manager template. Se il modello è stato esportato, eseguire il file deploy.ps1 per pubblicarlo di nuovo.If the template was exported, running the deploy.ps1 file republishes the template. Dopo la distribuzione, assicurarsi che il valore di ProvisioningState sia Succeeded.After you deploy, ensure that ProvisioningState is Succeeded.

Raccogliere gli eventi di integrità e di caricamentoCollect health and load events

A partire dalla versione 5.4 di Service Fabric è possibile raccogliere gli eventi di metrica di integrità e caricamento.Starting with the 5.4 release of Service Fabric, health and load metric events are available for collection. Questi riflettono gli eventi generati dal sistema o dal codice usando le API di creazione di report di integrità o caricamento, ad esempio ReportPartitionHealth o ReportLoad.These events reflect events generated by the system or your code by using the health or load reporting APIs such as ReportPartitionHealth or ReportLoad. Ciò consente l'aggregazione e la visualizzazione dell'integrità del sistema nel tempo, nonché la generazione di avvisi in base a eventi di integrità o di caricamento.This allows for aggregating and viewing system health over time and for alerting based on health or load events. Per visualizzare tali eventi nel visualizzatore eventi di diagnostica di Visual Studio, aggiungere "Microsoft-ServiceFabric:4:0x4000000000000008" all'elenco di provider ETW.To view these events in Visual Studio's Diagnostic Event Viewer add "Microsoft-ServiceFabric:4:0x4000000000000008" to the list of ETW providers.

Per raccogliere gli eventi del cluster, modificare scheduledTransferKeywordFilter in WadCfg del modello di Resource Manager in 4611686018427387912.To collect the events in your cluster, modify the scheduledTransferKeywordFilter in the WadCfg of your Resource Manager template to 4611686018427387912.

  "EtwManifestProviderConfiguration": [
    {
      "provider": "cbd93bc2-71e5-4566-b3a7-595d8eeca6e8",
      "scheduledTransferLogLevelFilter": "Information",
      "scheduledTransferKeywordFilter": "4611686018427387912",
      "scheduledTransferPeriod": "PT5M",
      "DefaultEvents": {
        "eventDestination": "ServiceFabricSystemEventTable"
      }
    }

Raccogliere eventi del proxy inversoCollect reverse proxy events

A partire da Service Fabric versione 5.7 è possibile raccogliere gli eventi del proxy inverso tramite i canali dati e messaggistica.Starting with the 5.7 release of Service Fabric, reverse proxy events are available for collection through the Data & Messaging channels.

Il proxy inverso esegue il push solo degli eventi di errore mediante il canale dati e messaggistica principale in base agli errori di elaborazione e agli errori critici della richiesta.The reverse proxy pushes only error events through the main Data & Messaging channel - reflecting request processing failures and critical issues. Il canale dettagliato contiene gli eventi dettagliati relativi a tutte le richieste elaborate dal proxy inverso.The detailed channel contains verbose events about all the requests processed by the reverse proxy.

Per visualizzare gli eventi di errore nel visualizzatore eventi di diagnostica di Visual Studio, aggiungere "Microsoft-ServiceFabric:4:0x4000000000000010" all'elenco di provider ETW.To view the error events in Visual Studio's Diagnostic Event Viewer add "Microsoft-ServiceFabric:4:0x4000000000000010" to the list of ETW providers. Per tutti i dati di telemetria della richiesta aggiornare la voce Microsoft-ServiceFabric nell'elenco di provider ETW modificandola in "Microsoft-ServiceFabric:4:0x4000000000000020".For all the request telemetry, update the Microsoft-ServiceFabric entry in the ETW provider list to "Microsoft-ServiceFabric:4:0x4000000000000020".

Per i cluster in esecuzione in Azure:For clusters running in Azure:

Per acquisire le tracce del canale dati e messaggistica principale, modificare il valore di scheduledTransferKeywordFilter in WadCfg del modello di Resource Manager impostandolo su 4611686018427387920.To pick up the traces in the main Data & Messaging channel, modify the scheduledTransferKeywordFilter value in the WadCfg of your Resource Manager template to 4611686018427387920.

  "EtwManifestProviderConfiguration": [
    {
      "provider": "cbd93bc2-71e5-4566-b3a7-595d8eeca6e8",
      "scheduledTransferLogLevelFilter": "Information",
      "scheduledTransferKeywordFilter": "4611686018427387920",
      "scheduledTransferPeriod": "PT5M",
      "DefaultEvents": {
        "eventDestination": "ServiceFabricSystemEventTable"
      }
    }

Per raccogliere tutti gli eventi di elaborazione della richiesta, attivare il canale dati e messaggistica dettagliato canale modificando il valore di scheduledTransferKeywordFilter in WadCfg del modello di Resource Manager impostandolo su 4611686018427387936.To collect all request processing events, turn on the Data & Messaging - detailed channel by changing the scheduledTransferKeywordFilter value in the WadCfg of your Resource Manager template to 4611686018427387936.

  "EtwManifestProviderConfiguration": [
    {
      "provider": "cbd93bc2-71e5-4566-b3a7-595d8eeca6e8",
      "scheduledTransferLogLevelFilter": "Information",
      "scheduledTransferKeywordFilter": "4611686018427387936",
      "scheduledTransferPeriod": "PT5M",
      "DefaultEvents": {
        "eventDestination": "ServiceFabricSystemEventTable"
      }
    }

L'abilitazione della raccolta di eventi da questo canale dettagliato genera numerose tracce e pertanto può comportare un maggiore uso della capacità di archiviazione.Enabling collecting events from this detailed channel results in a lot of traces being generated quickly, and can consume storage capacity. Attivare questa funzionalità solo quando è strettamente necessario.Only turn this on when absolutely necessary. Per informazioni dettagliate sulla risoluzione dei problemi relativi agli eventi del proxy inverso, vedere la guida alla diagnostica dei problemi relativi al proxy inverso.For detailed troubleshooting of the reverse proxy events, refer the reverse proxy diagnostics guide.

Eseguire la raccolta dai nuovi canali EventSourceCollect from new EventSource channels

Per aggiornare Diagnostica in modo da raccogliere log da nuovi canali EventSource che rappresentano una nuova applicazione da distribuire, eseguire gli stessi passaggi descritti in precedenza per la configurazione di Diagnostica per un cluster esistente.To update Diagnostics to collect logs from new EventSource channels that represent a new application that you're about to deploy, perform the same steps as previously described for the setup of Diagnostics for an existing cluster.

Aggiornare la sezione EtwEventSourceProviderConfiguration nel file template.json per aggiungere voci per i nuovi canali EventSource prima di applicare l'aggiornamento della configurazione tramite il comando New-AzureRmResourceGroupDeployment di PowerShell.Update the EtwEventSourceProviderConfiguration section in the template.json file to add entries for the new EventSource channels before you apply the configuration update by using the New-AzureRmResourceGroupDeployment PowerShell command. Il nome dell'origine evento è definito come parte del codice del file ServiceEventSource.cs generato da Visual Studio.The name of the event source is defined as part of your code in the Visual Studio-generated ServiceEventSource.cs file.

Ad esempio, se l'origine evento è denominato My Eventsource, aggiungere il codice seguente per inserire gli eventi da My Eventsource in una tabella denominata MyDestinationTableName.For example, if your event source is named My-Eventsource, add the following code to place the events from My-Eventsource into a table named MyDestinationTableName.

        {
            "provider": "My-Eventsource",
            "scheduledTransferPeriod": "PT5M",
            "DefaultEvents": {
            "eventDestination": "MyDestinationTableName"
            }
        }

Per raccogliere i contatori delle prestazioni o i log eventi, modificare il modello di Resource Manager tramite gli esempi forniti in Creare una macchina virtuale Windows con monitoraggio e diagnostica mediante i modelli di Azure Resource Manager.To collect performance counters or event logs, modify the Resource Manager template by using the examples provided in Create a Windows virtual machine with monitoring and diagnostics by using an Azure Resource Manager template. Pubblicare di nuovo il modello di Resource Manager.Then, republish the Resource Manager template.

Raccogliere i contatori delle prestazioniCollect Performance Counters

Per raccogliere metriche delle prestazioni dal cluster, aggiungere i contatori delle prestazioni a "WadCfg > DiagnosticMonitorConfiguration" nel modello di Resource Manager per il cluster.To collect performance metrics from your cluster, add the performance counters to your "WadCfg > DiagnosticMonitorConfiguration" in the Resource Manager template for your cluster. Vedere Monitoraggio delle prestazioni con Diagnostica di Microsoft Azure per le istruzioni su come modificare WadCfg per raccogliere contatori delle prestazioni specifici.See Performance monitoring with WAD for steps on modifying your WadCfg to collect specific performance counters. Per l'elenco dei contatori delle prestazioni che è consigliabile raccogliere, vedere l'articolo relativo ai contatori delle prestazioni in Service Fabric.Reference Service Fabric Performance Counters for a list of performance counters that we recommend collecting.

Se si usa un sink di Application Insights, come descritto nella sezione di seguito, e si vuole che queste metriche vengano visualizzate in Application Insights, aggiungere il nome del sink nella sezione "sinks" illustrata sopra.If you are using an Application Insights sink, as described in the section below, and want these metrics to show up in Application Insights, then make sure to add the sink name in the "sinks" section as shown above. I contatori delle prestazioni configurati singolarmente verranno inviati automaticamente alla risorsa di Application Insights.This will automatically send the performance counters that are individually configured to your Application Insights resource.

Inviare i log ad Application InsightsSend logs to Application Insights

L'invio dei dati di monitoraggio e diagnostica ad Application Insights può essere eseguito nell'ambito della configurazione di Diagnostica di Microsoft Azure.Sending monitoring and diagnostics data to Application Insights (AI) can be done as part of the WAD configuration. Se si decide di usare Application Insights per l'analisi e la visualizzazione degli eventi, vedere Event Analysis and Visualization with Application Insights (Analisi e visualizzazione di eventi con Application Insights) per configurare un sink di Application Insights in "WadCfg".If you decide to use AI for event analysis and visualization, read Event Analysis and Visualization with Application Insights to set up an AI Sink as part of your "WadCfg".

Passaggi successiviNext steps

Dopo aver configurato correttamente Diagnostica di Azure, sarà possibile visualizzare i dati nelle tabelle di archiviazione dai log EventSource ed ETW.Once you have correctly configured Azure diagnostics, you will see data in your Storage tables from the ETW and EventSource logs. Se si sceglie di usare OMS, Kibana o qualsiasi altra piattaforma di analisi e visualizzazione dati non configurata direttamente nel modello di Resource Manager, assicurarsi di configurare la piattaforma scelta per la lettura dei dati da queste tabelle di archiviazione.If you choose to use OMS, Kibana, or any other data analytics and visualization platform that is not directly configured in the Resource Manager template, make sure to set up the platform of your choice to read in the data from these storage tables. Questa operazione in OMS è relativamente semplice ed è illustrata nell'articolo relativo all'analisi di eventi e log tramite OMS.Doing this for OMS is relatively trivial, and is explained in Event and log analysis through OMS. Application Insights è un caso particolare sotto questo aspetto, perché può essere configurato nell'ambito della configurazione dell'estensione Diagnostica. Se si sceglie di usare Application Insights, vedere l'articolo appropriato.Application Insights is a bit of a special case in this sense, since it can be configured as part of the Diagnostics extension configuration, so refer to the appropriate article if you choose to use AI.

Nota

Attualmente non è possibile filtrare o eliminare gli eventi inviati alla tabella.There is currently no way to filter or groom the events that are sent to the table. Se non si implementa un processo per rimuovere gli eventi dalla tabella, le dimensioni della tabella continueranno ad aumentare.If you don't implement a process to remove events from the table, the table will continue to grow. È attualmente disponibile un esempio di servizio di eliminazione dati in esecuzione nel watchdog di esempio. È consigliabile scriverne uno personalizzato, a meno che non esista un motivo valido per archiviare i log per un intervallo di tempo superiore a 30 o 90 giorni.Currently, there is an example of a data grooming service running in the Watchdog sample, and it is recommended that you write one for yourself as well, unless there is a good reason for you to store logs beyond a 30 or 90 day timeframe.