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
":
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.EventSource
csomag 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).