Aggregazione e raccolta di eventi con EventFlowEvent aggregation and collection using EventFlow

Microsoft Diagnostics EventFlow può indirizzare gli eventi da un nodo a una o più destinazioni di monitoraggio.Microsoft Diagnostics EventFlow can route events from a node to one or more monitoring destinations. Poiché è incluso come pacchetto NuGet nel progetto del servizio, il codice e la configurazione di EventFlow vanno di pari passo con il servizio, eliminando i problemi di configurazione specifici di ogni nodo indicati in precedenza e relativi a Diagnostica di Azure.Because it is included as a NuGet package in your service project, EventFlow code and configuration travel with the service, eliminating the per-node configuration issue mentioned earlier about Azure Diagnostics. EventFlow viene eseguito nel processo del servizio e si connette direttamente agli output configurati.EventFlow runs within your service process, and connects directly to the configured outputs. A causa della connessione diretta, EventFlow funziona con le distribuzioni dei servizi in Azure, nei contenitori e in locale.Because of the direct connection, EventFlow works for Azure, container, and on-premises service deployments. Se si esegue EventFlow in scenari a densità elevata, ad esempio in un contenitore, è necessario prestare attenzione perché ogni pipeline di EventFlow stabilisce una connessione esterna.Be careful if you run EventFlow in high-density scenarios, such as in a container, because each EventFlow pipeline makes an external connection. Pertanto, se si ospitano molti processi, si ottengono molte connessioni in uscita.So, if you host several processes, you get several outbound connections! Questo non costituisce un problema per le applicazioni di Service Fabric, perché tutte le repliche di ServiceType sono eseguite nello stesso processo e ciò limita il numero di connessioni in uscita.This isn't as much a concern for Service Fabric applications, because all replicas of a ServiceType run in the same process, and this limits the number of outbound connections. EventFlow offre anche i filtri per gli eventi, in modo che vengano inviati solo gli eventi corrispondenti al filtro specificato.EventFlow also offers event filtering, so that only the events that match the specified filter are sent.

Configurare EventFlowSet up EventFlow

I file binari di EventFlow sono disponibili come set di pacchetti NuGet.EventFlow binaries are available as a set of NuGet packages. Per aggiungere EventFlow a un progetto di servizio di Service Fabric, fare clic sul progetto in Esplora soluzioni e scegliere "Gestisci pacchetti NuGet".To add EventFlow to a Service Fabric service project, right-click the project in the Solution Explorer and choose "Manage NuGet packages." Passare alla scheda "Sfoglia" e cercare "Diagnostics.EventFlow":Switch to the "Browse" tab and search for "Diagnostics.EventFlow":

Pacchetti NuGet di EventFlow nell'interfaccia utente di gestione pacchetti NuGet di Visual Studio

Verrà visualizzato un elenco dei vari pacchetti evidenziati, con etichetta "Input" e "Output".You will see a list of various packages show up, labeled with "Inputs" and "Outputs". EventFlow supporta diversi provider di accesso e analizzatori.EventFlow supports various different logging providers and analyzers. Il servizio che ospita EventFlow deve includere pacchetti appropriati a seconda dell'origine e della destinazione dei log applicazioni.The service hosting EventFlow should include appropriate packages depending on the source and destination for the application logs. Oltre al pacchetto di base ServiceFabric, è anche necessario aver configurato almeno un Input e un Output.In addition to the core ServiceFabric package, you also need at least one Input and Output configured. È ad esempio possibile aggiungere i pacchetti seguenti per inviare eventi EventSource ad Application Insights:For example, you can add the following packages to send EventSource events to Application Insights:

  • Microsoft.Diagnostics.EventFlow.Inputs.EventSource per acquisire dati dalla classe EventSource del servizio e da oggetti EventSource standard, ad esempio Microsoft-ServiceFabric-Services e Microsoft-ServiceFabric-ActorsMicrosoft.Diagnostics.EventFlow.Inputs.EventSource to capture data from the service's EventSource class, and from standard EventSources such as Microsoft-ServiceFabric-Services and Microsoft-ServiceFabric-Actors)
  • Microsoft.Diagnostics.EventFlow.Outputs.ApplicationInsights, i log verranno inviati a una risorsa di Azure Application InsightsMicrosoft.Diagnostics.EventFlow.Outputs.ApplicationInsights (we are going to send the logs to an Azure Application Insights resource)
  • Microsoft.Diagnostics.EventFlow.ServiceFabric, consente l'inizializzazione della pipeline EventFlow dalla configurazione del servizio di Service Fabric e segnala eventuali problemi tramite l'invio di dati di diagnostica in forma di report sull'integrità di Service FabricMicrosoft.Diagnostics.EventFlow.ServiceFabric(enables initialization of the EventFlow pipeline from Service Fabric service configuration and reports any problems with sending diagnostic data as Service Fabric health reports)

Nota

Per il pacchetto Microsoft.Diagnostics.EventFlow.Inputs.EventSource il progetto di servizio deve puntare a .NET Framework 4.6 o versione successiva.Microsoft.Diagnostics.EventFlow.Inputs.EventSource package requires the service project to target .NET Framework 4.6 or newer. Assicurarsi di impostare il framework di destinazione corretto nelle proprietà del progetto prima di installare questo pacchetto.Make sure you set the appropriate target framework in project properties before installing this package.

Dopo aver installato tutti i pacchetti, è necessario configurare e abilitare EventFlow nel servizio.After all the packages are installed, the next step is to configure and enable EventFlow in the service.

Configurare e abilitare la raccolta di logConfigure and enable log collection

La pipeline EventFlow, responsabile dell'invio dei log, viene creata da una specifica archiviata in un file di configurazione.The EventFlow pipeline responsible for sending the logs is created from a specification stored in a configuration file. Il pacchetto Microsoft.Diagnostics.EventFlow.ServiceFabric installa un file di configurazione EventFlow iniziale nella cartella PackageRoot\Config della soluzione denominata eventFlowConfig.json.The Microsoft.Diagnostics.EventFlow.ServiceFabric package installs a starting EventFlow configuration file under PackageRoot\Config solution folder, named eventFlowConfig.json. Questo file di configurazione deve essere modificato per l'acquisizione di dati dalla classe EventSource del servizio predefinito, oltre a qualsiasi altro input che si desidera configurare, e per l'invio di dati alla destinazione appropriata.This configuration file needs to be modified to capture data from the default service EventSource class, and any other inputs you want to configure, and send data to the appropriate place.

Nota

Se il file di progetto è nel formato di Visual Studio 2017, il file eventFlowConfig.json non verrà aggiunto automaticamente.If your project file has VisualStudio 2017 format the eventFlowConfig.json file will not be automatically added. Per correggere questo problema, creare il file nella cartella Config e impostare l'azione di compilazione su Copy if newer.To fix this create the file in the Config folder and set the build action to Copy if newer.

Ecco un esempio di eventFlowConfig.json basato sui pacchetti NuGet indicati in precedenza:Here is a sample eventFlowConfig.json based on the NuGet packages mentioned above:

{
  "inputs": [
    {
      "type": "EventSource",
      "sources": [
        { "providerName": "Microsoft-ServiceFabric-Services" },
        { "providerName": "Microsoft-ServiceFabric-Actors" },
        // (replace the following value with your service's ServiceEventSource name)
        { "providerName": "your-service-EventSource-name" }
      ]
    }
  ],
  "filters": [
    {
      "type": "drop",
      "include": "Level == Verbose"
    }
  ],
  "outputs": [
    {
      "type": "ApplicationInsights",
      // (replace the following value with your AI resource's instrumentation key)
      "instrumentationKey": "00000000-0000-0000-0000-000000000000"
    }
  ],
  "schemaVersion": "2016-08-11"
}

Il nome dell'oggetto ServiceEventSource del servizio è il valore della proprietà Name dell'oggetto EventSourceAttribute applicato alla classe ServiceEventSource.The name of service's ServiceEventSource is the value of the Name property of the EventSourceAttribute applied to the ServiceEventSource class. Tutto questo è specificato nel file ServiceEventSource.cs, che fa parte del codice del servizio.It is all specified in the ServiceEventSource.cs file, which is part of the service code. Ad esempio, nel frammento di codice seguente il nome dell'oggetto ServiceEventSource è MyCompany-Application1-Stateless1:For example, in the following code snippet the name of the ServiceEventSource is MyCompany-Application1-Stateless1:

[EventSource(Name = "MyCompany-Application1-Stateless1")]
internal sealed class ServiceEventSource : EventSource
{
    // (rest of ServiceEventSource implementation)
}

Si noti che il file eventFlowConfig.json fa parte del pacchetto di configurazione del servizio.Note that eventFlowConfig.json file is part of service configuration package. Le modifiche apportate a questo file possono essere incluse in aggiornamenti del servizio completi o della sola configurazione, in base ai controlli di integrità dell'aggiornamento di Service Fabric e al ripristino dello stato precedente automatico in caso di errore di aggiornamento.Changes to this file can be included in full- or configuration-only upgrades of the service, subject to Service Fabric upgrade health checks and automatic rollback if there is upgrade failure. Per altre informazioni, vedere Aggiornamento delle applicazioni di Service Fabric.For more information, see Service Fabric application upgrade.

La sezione dei filtri della configurazione consente di personalizzare ulteriormente le informazioni che si intende far passare attraverso la pipeline EventFlow fino agli output, consentendo di eliminare o includere determinate informazioni o di modificare la struttura dei dati dell'evento.The filters section of the config allows you to further customize the information that is going to go through the EventFlow pipeline to the outputs, allowing you to drop or include certain information, or change the structure of the event data. Per altre informazioni sui filtri, controllare i filtri EventFlow.For more information on filtering, see EventFlow filters.

Il passaggio finale consiste nel creare un'istanza della pipeline EventFlow nel codice di avvio del servizio, situato nel file Program.cs:The final step is to instantiate EventFlow pipeline in your service's startup code, located in Program.cs file:

using System;
using System.Diagnostics;
using System.Threading;
using Microsoft.ServiceFabric;
using Microsoft.ServiceFabric.Services.Runtime;

// **** EventFlow namespace
using Microsoft.Diagnostics.EventFlow.ServiceFabric;

namespace Stateless1
{
    internal static class Program
    {
        /// <summary>
        /// This is the entry point of the service host process.
        /// </summary>
        private static void Main()
        {
            try
            {
                // **** Instantiate log collection via EventFlow
                using (var diagnosticsPipeline = ServiceFabricDiagnosticPipelineFactory.CreatePipeline("MyApplication-MyService-DiagnosticsPipeline"))
                {

                    ServiceRuntime.RegisterServiceAsync("Stateless1Type",
                    context => new Stateless1(context)).GetAwaiter().GetResult();

                    ServiceEventSource.Current.ServiceTypeRegistered(Process.GetCurrentProcess().Id, typeof(Stateless1).Name);

                    Thread.Sleep(Timeout.Infinite);
                }
            }
            catch (Exception e)
            {
                ServiceEventSource.Current.ServiceHostInitializationFailed(e.ToString());
                throw;
            }
        }
    }
}

Il nome passato come parametro del metodo CreatePipeline di ServiceFabricDiagnosticsPipelineFactory è il nome dell'entità di integrità che rappresenta la pipeline di raccolta di log EventFlow.The name passed as the parameter of the CreatePipeline method of the ServiceFabricDiagnosticsPipelineFactory is the name of the health entity representing the EventFlow log collection pipeline. Questo nome viene usato se EventFlow rileva un errore e lo segnala tramite il sottosistema di integrità di Service Fabric.This name is used if EventFlow encounters and error and reports it through the Service Fabric health subsystem.

Usare le impostazioni di Service Fabric e i parametri dell'applicazione in eventFlowConfigUse Service Fabric settings and application parameters in eventFlowConfig

EventFlow supporta l'uso delle impostazioni di Service Fabric e dei parametri dell'applicazione per configurare le impostazioni di EventFlow.EventFlow supports using Service Fabric settings and application paremeters to configure EventFlow settings. È possibile fare riferimento ai parametri delle impostazioni di Service Fabric usando questa sintassi speciale per i valori:You can refer to Service Fabric settings parameters using this special syntax for values:

servicefabric:/<section-name>/<setting-name>

<section-name> è il nome della sezione di configurazione di Service Fabric e <setting-name> è l'impostazione di configurazione che indica il valore che verrà usato per configurare un'impostazione EventFlow.<section-name> is the name of the Service Fabric configuration section, and <setting-name> is the configuration setting providing the value that will be used to configure an EventFlow setting. Per altre informazioni su come effettuare questa operazione, passare a Support for Service Fabric settings and application parameters (Supporto per le impostazioni e i parametri dell'applicazione Service Fabric).To read more about how to do this, go to Support for Service Fabric settings and application parameters.

VerificaVerification

Avviare il servizio e osservare la finestra dell'output di debug di Visual Studio.Start your service and observe the Debug output window in Visual Studio. Dopo l'avvio del servizio, dovrebbero essere visibili le prove dell'invio di record del servizio all'output configurato.After the service is started, you should start seeing evidence that your service is sending records to the output that you have configured. Passare alla piattaforma di analisi e visualizzazione di eventi e confermare che i registri vengono visualizzati. Questa operazione potrebbe richiedere alcuni minuti.Navigate to your event analysis and visualization platform and confirm that logs have started to show up (could take a few minutes).

Passaggi successiviNext steps