Gebeurtenisaggregatie en verzameling met EventFlow
Microsoft Diagnostics EventFlow kan gebeurtenissen van een knooppunt naar een of meer bewakingsbestemmingen routeren. Omdat het is opgenomen als een NuGet-pakket in uw serviceproject, worden EventFlow-code en -configuratie met de service verzonden, waardoor het configuratieprobleem per knooppunt dat eerder over Azure Diagnostics wordt genoemd, wordt geëlimineerd. EventFlow wordt uitgevoerd binnen uw serviceproces en maakt rechtstreeks verbinding met de geconfigureerde uitvoer. Vanwege de directe verbinding werkt EventFlow voor Azure-, container- en on-premises service-implementaties. Wees voorzichtig als u EventFlow uitvoert in high-densityscenario's, zoals in een container, omdat elke EventFlow-pijplijn een externe verbinding maakt. Dus als u meerdere processen host, krijgt u verschillende uitgaande verbindingen! Dit is niet zo belangrijk voor Service Fabric-toepassingen, omdat alle replica's van een ServiceType
uitvoering in hetzelfde proces worden beperkt. Dit beperkt het aantal uitgaande verbindingen. EventFlow biedt ook gebeurtenisfiltering, zodat alleen de gebeurtenissen die overeenkomen met het opgegeven filter worden verzonden.
EventFlow instellen
Binaire EventFlow-bestanden zijn beschikbaar als een set NuGet-pakketten. Als u EventFlow wilt toevoegen aan een Service Fabric-serviceproject, klikt u met de rechtermuisknop op het project in Solution Explorer en kiest u NuGet-pakketten beheren. Ga naar het tabblad Bladeren en zoek naar 'Diagnostics.EventFlow
':
U ziet een lijst met verschillende pakketten die worden weergegeven met het label Invoer en Uitvoer. EventFlow ondersteunt verschillende logboekregistratieproviders en -analyses. De service die eventflow host, moet de juiste pakketten bevatten, afhankelijk van de bron en het doel voor de toepassingslogboeken. Naast het core ServiceFabric-pakket hebt u ook ten minste één invoer- en uitvoer geconfigureerd. U kunt bijvoorbeeld de volgende pakketten toevoegen om EventSource-gebeurtenissen naar Application Insights te verzenden:
Microsoft.Diagnostics.EventFlow.Inputs.EventSource
voor het vastleggen van gegevens uit de EventSource-klasse van de service en van standaard EventSources, zoals Microsoft-ServiceFabric-Services en Microsoft-ServiceFabric-Actors)Microsoft.Diagnostics.EventFlow.Outputs.ApplicationInsights
(we gaan de logboeken verzenden naar een Azure-toepassing Insights-resource)Microsoft.Diagnostics.EventFlow.ServiceFabric
(maakt initialisatie van de EventFlow-pijplijn vanuit de Service Fabric-serviceconfiguratie mogelijk en rapporteert eventuele problemen met het verzenden van diagnostische gegevens als Service Fabric-statusrapporten)
Notitie
Microsoft.Diagnostics.EventFlow.Inputs.EventSource
voor het pakket is het serviceproject vereist voor het doel .NET Framework 4.6 of hoger. Zorg ervoor dat u het juiste doelframework instelt in projecteigenschappen voordat u dit pakket installeert.
Nadat alle pakketten zijn geïnstalleerd, is de volgende stap het configureren en inschakelen van EventFlow in de service.
Logboekverzameling configureren en inschakelen
De EventFlow-pijplijn die verantwoordelijk is voor het verzenden van de logboeken, wordt gemaakt op basis van een specificatie die is opgeslagen in een configuratiebestand. Het Microsoft.Diagnostics.EventFlow.ServiceFabric
pakket installeert een startend EventFlow-configuratiebestand onder PackageRoot\Config
de oplossingsmap met de naam eventFlowConfig.json
. Dit configuratiebestand moet worden gewijzigd om gegevens van de standaardserviceklasse EventSource
vast te leggen en andere invoergegevens die u wilt configureren en gegevens naar de juiste plaats te verzenden.
Notitie
Als uw projectbestand de VisualStudio 2017-indeling heeft, wordt het eventFlowConfig.json
bestand niet automatisch toegevoegd. U kunt dit probleem oplossen door het bestand in de Config
map te maken en de buildactie in te stellen op Copy if newer
.
Hier volgt een voorbeeld eventFlowConfig.json op basis van de Hierboven genoemde NuGet-pakketten:
{
"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"
}
De naam van de ServiceEventSource van de service is de waarde van de eigenschap Name van de EventSourceAttribute
service die wordt toegepast op de klasse ServiceEventSource. Het is allemaal opgegeven in het ServiceEventSource.cs
bestand, dat deel uitmaakt van de servicecode. In het volgende codefragment is bijvoorbeeld de naam van de ServiceEventSource MyCompany-Application1-Stateless1:
[EventSource(Name = "MyCompany-Application1-Stateless1")]
internal sealed class ServiceEventSource : EventSource
{
// (rest of ServiceEventSource implementation)
}
eventFlowConfig.json
Het bestand maakt deel uit van het serviceconfiguratiepakket. Wijzigingen in dit bestand kunnen worden opgenomen in volledige of alleen configuratie-upgrades van de service, afhankelijk van de statuscontroles van de Service Fabric-upgrade en automatische terugdraaibewerking als er een upgradefout optreedt. Zie Service Fabric-toepassingsupgrade voor meer informatie.
Met de sectie Filters van de configuratie kunt u de informatie die door de EventFlow-pijplijn gaat, verder aanpassen aan de uitvoer, zodat u bepaalde gegevens kunt verwijderen of opnemen, of de structuur van de gebeurtenisgegevens kunt wijzigen. Zie EventFlow-filters voor meer informatie over filteren.
De laatste stap is het instantiëren van een EventFlow-pijplijn in de opstartcode van uw service, die zich in Program.cs
het bestand bevindt:
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;
}
}
}
}
De naam die wordt doorgegeven als de parameter van de methode van de CreatePipeline
ServiceFabricDiagnosticsPipelineFactory
methode is de naam van de statusentiteit die de eventflow-logboekverzamelingspijplijn vertegenwoordigt. Deze naam wordt gebruikt als EventFlow een fout tegenkomt en rapporteert deze via het Service Fabric-statussubsysteem.
Service Fabric-instellingen en toepassingsparameters gebruiken in eventFlowConfig
EventFlow ondersteunt het gebruik van Service Fabric-instellingen en toepassingsparameters voor het configureren van EventFlow-instellingen. U kunt verwijzen naar service Fabric-instellingenparameters met behulp van deze speciale syntaxis voor waarden:
servicefabric:/<section-name>/<setting-name>
<section-name>
is de naam van de service fabric-configuratiesectie en <setting-name>
is de configuratie-instelling die de waarde levert die wordt gebruikt voor het configureren van een EventFlow-instelling. Ga naar Ondersteuning voor Service Fabric-instellingen en toepassingsparameters voor meer informatie over hoe u dit doet.
Verificatie
Start uw service en bekijk het uitvoervenster Voor foutopsporing in Visual Studio. Nadat de service is gestart, ziet u bewijs dat uw service records verzendt naar de uitvoer die u hebt geconfigureerd. Navigeer naar uw gebeurtenisanalyse- en visualisatieplatform en controleer of logboeken zijn gestart (dit kan enkele minuten duren).