Eseményösszesítés és -gyűjtemény az EventFlow használatával

A Microsoft Diagnostics EventFlow képes az eseményeket egy csomópontról egy vagy több figyelési célhelyre irányítani. Mivel NuGet-csomagként szerepel a szolgáltatásprojektben, az EventFlow-kód és a konfiguráció a szolgáltatással való utazás során, kiküszöbölve a csomópontonkénti konfigurációs problémát, amelyet korábban említettünk a Azure Diagnostics kapcsolatban. Az EventFlow a szolgáltatási folyamaton belül fut, és közvetlenül csatlakozik a konfigurált kimenetekhez. A közvetlen kapcsolat miatt az EventFlow az Azure, a tároló és a helyszíni szolgáltatás üzemelő példányai esetében működik. Legyen óvatos, ha nagy sűrűségű forgatókönyvekben( például tárolókban) futtatja az EventFlow-t, mert minden EventFlow-folyamat külső kapcsolatot hoz létre. Így ha több folyamatot üzemeltet, több kimenő kapcsolatot is kap! Ez nem annyira aggodalomra ad okot a Service Fabric-alkalmazások esetében, mert egy ServiceType futtatás összes replikája ugyanabban a folyamatban van, és ez korlátozza a kimenő kapcsolatok számát. Az EventFlow eseményszűrést is kínál, így csak a megadott szűrőnek megfelelő események lesznek elküldve.

EventFlow beállítása

Az EventFlow bináris fájljai NuGet-csomagok készleteként érhetők el. Az EventFlow Service Fabric-szolgáltatásprojekthez való hozzáadásához kattintson a jobb gombbal a projektre a Megoldáskezelő, és válassza a "NuGet-csomagok kezelése" lehetőséget. Váltson a "Tallózás" lapra, és keressen rá a "Diagnostics.EventFlow":

EventFlow NuGet-csomagok a Visual Studio NuGet csomagkezelő felhasználói felületén

Megjelenik a különböző csomagok listája, "Bemenetek" és "Kimenetek" címkével. Az EventFlow különböző naplózási szolgáltatókat és elemzőket támogat. Az EventFlow szolgáltatást üzemeltető szolgáltatásnak tartalmaznia kell a megfelelő csomagokat az alkalmazásnaplók forrásától és céljától függően. Az alapvető ServiceFabric-csomagon kívül legalább egy bemenetre és kimenetre is konfigurálva kell. Hozzáadhatja például az alábbi csomagokat, hogy EventSource-eseményeket küldjön az Application Insightsnak:

  • Microsoft.Diagnostics.EventFlow.Inputs.EventSource adatok rögzítéséhez a szolgáltatás EventSource osztályából és a standard EventSource-okból, például a Microsoft-ServiceFabric-Servicesből és a Microsoft-ServiceFabric-Actorsből)
  • Microsoft.Diagnostics.EventFlow.Outputs.ApplicationInsights(a naplókat egy Azure-alkalmazás Insights-erőforrásba küldjük)
  • Microsoft.Diagnostics.EventFlow.ServiceFabric(lehetővé teszi az EventFlow-folyamat inicializálását a Service Fabric szolgáltatás konfigurációjából, és jelentést készít a diagnosztikai adatok Service Fabric-állapotjelentésekként való küldésével kapcsolatos problémákról)

Megjegyzés

Microsoft.Diagnostics.EventFlow.Inputs.EventSourcecsomag esetén a szolgáltatásprojektnek a 4.6-os vagy újabb .NET-keretrendszer kell céloznia. A csomag telepítése előtt győződjön meg arról, hogy a megfelelő cél-keretrendszert állítja be a projekttulajdonságokban.

Az összes csomag telepítése után a következő lépés az EventFlow konfigurálása és engedélyezése a szolgáltatásban.

Naplógyűjtés konfigurálása és engedélyezése

A naplók küldéséért felelős EventFlow-folyamat egy konfigurációs fájlban tárolt specifikációból jön létre. A Microsoft.Diagnostics.EventFlow.ServiceFabric csomag egy kezdő EventFlow-konfigurációs fájlt telepít a megoldásmappában PackageRoot\Config , nevű néven eventFlowConfig.json. Ezt a konfigurációs fájlt módosítani kell az alapértelmezett szolgáltatásosztály EventSource adatainak és a konfigurálni kívánt egyéb bemenetek rögzítéséhez, és az adatokat a megfelelő helyre kell küldeni.

Megjegyzés

Ha a projektfájl VisualStudio 2017 formátumú, a eventFlowConfig.json fájl nem lesz automatikusan hozzáadva. A probléma megoldásához hozza létre a fájlt a Config mappában, és állítsa a buildelési műveletet a következőre: Copy if newer.

Íme egy példa eventFlowConfig.jsonra a fent említett NuGet-csomagok alapján:

{
  "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"
}

A szolgáltatás ServiceEventSource neve a ServiceEventSource osztályra alkalmazott Name tulajdonság EventSourceAttribute értéke. Az összes meg van adva a ServiceEventSource.cs fájlban, amely a szolgáltatáskód része. Az alábbi kódrészletben például a ServiceEventSource neve MyCompany-Application1-Stateless1:

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

Vegye figyelembe, hogy eventFlowConfig.json a fájl a szolgáltatáskonfigurációs csomag része. A fájl módosításai belefoglalhatók a szolgáltatás teljes vagy csak konfigurációs frissítésébe, a Service Fabric frissítési állapotának ellenőrzése és az automatikus visszaállítás függvényében, ha frissítési hiba történik. További információ: Service Fabric-alkalmazásfrissítés.

A konfiguráció szűrők szakaszával tovább testre szabhatja az EventFlow-folyamaton keresztül a kimenetekre átvezetett információkat, lehetővé téve bizonyos információk elvetésének vagy hozzáadásának, illetve az eseményadatok szerkezetének módosítását. A szűréssel kapcsolatos további információkért lásd: EventFlow-szűrők.

Az utolsó lépés az EventFlow-folyamat példányosítása a szolgáltatás indítási kódjában, amely a fájlban Program.cs található:

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;
            }
        }
    }
}

A metódus ServiceFabricDiagnosticsPipelineFactory paramétereként CreatePipeline átadott név az EventFlow naplógyűjtési folyamatot képviselő állapotentitás neve. Ezt a nevet akkor használja a rendszer, ha az EventFlow hibát észlel, és a Service Fabric állapot-alrendszerén keresztül jelenti.

Service Fabric-beállítások és alkalmazásparaméterek használata az eventFlowConfigban

Az EventFlow támogatja a Service Fabric-beállítások és alkalmazásparaméterek használatát az EventFlow-beállítások konfigurálásához. A Service Fabric-beállítások paramétereit a következő speciális szintaxissal érheti el az értékekhez:

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

<section-name> a Service Fabric konfigurációs szakaszának neve, és <setting-name> az a konfigurációs beállítás, amely megadja az EventFlow-beállítás konfigurálásához használni kívánt értéket. Ennek módjáról a Service Fabric beállításainak és alkalmazásparamétereinek támogatása című témakörben olvashat bővebben.

Ellenőrzés

Indítsa el a szolgáltatást, és figyelje meg a Hibakeresés kimeneti ablakát a Visual Studióban. A szolgáltatás elindítása után látnia kell annak bizonyítékát, hogy a szolgáltatás rekordokat küld a konfigurált kimenetre. Lépjen az eseményelemzési és vizualizációs platformra, és győződjön meg arról, hogy a naplók megjelennek (eltarthat néhány percig).

Következő lépések