Sdílet prostřednictvím


Agregace a shromažďování událostí pomocí EventFlow

Microsoft Diagnostics EventFlow může směrovat události z uzlu do jednoho nebo více cílů monitorování. Vzhledem k tomu, že je součástí vašeho projektu služby balíček NuGet, kód EventFlow a cesta konfigurace se službou, eliminuje se problém s konfigurací jednotlivých uzlů, který se zmínil o službě Azure Diagnostics. EventFlow běží v rámci procesu služby a připojuje se přímo ke nakonfigurovaným výstupům. Kvůli přímému připojení funguje EventFlow pro nasazení Azure, kontejneru a místních služeb. Při spouštění EventFlow ve scénářích s vysokou hustotou, například v kontejneru, buďte opatrní, protože každý kanál EventFlow vytváří externí připojení. Takže pokud hostujete několik procesů, získáte několik odchozích připojení! To není tak důležité pro aplikace Service Fabric, protože všechny repliky ServiceType spuštění ve stejném procesu a tím se omezuje počet odchozích připojení. EventFlow také nabízí filtrování událostí, aby se odesílaly jenom události, které odpovídají zadanému filtru.

Nastavení toku událostí

Binární soubory EventFlow jsou k dispozici jako sada balíčků NuGet. Pokud chcete přidat EventFlow do projektu služby Service Fabric, klikněte pravým tlačítkem myši na projekt v Průzkumník řešení a zvolte Spravovat balíčky NuGet. Přepněte na kartu Procházet a vyhledejte "Diagnostics.EventFlow":

Balíčky NuGet EventFlow v uživatelském rozhraní správce balíčků Visual Studio NuGet

Zobrazí se seznam různých balíčků označených jako Vstupy a Výstupy. EventFlow podporuje různé poskytovatele protokolování a analyzátory. Služba hostující EventFlow by měla obsahovat odpovídající balíčky v závislosti na zdroji a cíli protokolů aplikace. Kromě základního balíčku ServiceFabric potřebujete také nakonfigurovaný alespoň jeden vstup a výstup. Můžete například přidat následující balíčky pro odesílání událostí EventSource do Application Insights:

  • Microsoft.Diagnostics.EventFlow.Inputs.EventSource zachytávání dat z třídy EventSource služby a ze standardních zdrojů událostí, jako jsou Microsoft-ServiceFabric-Services a Microsoft-ServiceFabric-Actors)
  • Microsoft.Diagnostics.EventFlow.Outputs.ApplicationInsights(protokoly odešleme do prostředku Aplikace Azure lication Insights.
  • Microsoft.Diagnostics.EventFlow.ServiceFabric(umožňuje inicializaci kanálu EventFlow z konfigurace služby Service Fabric a hlásí všechny problémy s odesíláním diagnostických dat jako sestav stavu Service Fabric).

Poznámka:

Microsoft.Diagnostics.EventFlow.Inputs.EventSource Balíček vyžaduje, aby projekt služby cílil na rozhraní .NET Framework 4.6 nebo novější. Před instalací tohoto balíčku se ujistěte, že jste ve vlastnostech projektu nastavili odpovídající cílovou architekturu.

Po instalaci všech balíčků je dalším krokem konfigurace a povolení EventFlow ve službě.

Konfigurace a povolení shromažďování protokolů

Kanál EventFlow zodpovědný za odesílání protokolů se vytvoří ze specifikace uložené v konfiguračním souboru. Balíček Microsoft.Diagnostics.EventFlow.ServiceFabric nainstaluje spouštěcí konfigurační soubor EventFlow ve PackageRoot\Config složce řešení s názvem eventFlowConfig.json. Tento konfigurační soubor je potřeba upravit tak, aby zaznamenával data z výchozí třídy služby EventSource a všechny další vstupy, které chcete konfigurovat, a odesílat data na příslušné místo.

Poznámka:

Pokud má soubor projektu formát VisualStudio 2017, eventFlowConfig.json soubor se automaticky nepřidá. Pokud chcete tento problém vyřešit, vytvořte soubor ve Config složce a nastavte akci sestavení na Copy if newer.

Tady je ukázka eventFlowConfig.json na základě výše uvedených balíčků NuGet:

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

Název ServiceEventSource služby je hodnota Name vlastnost EventSourceAttribute použité na ServiceEventSource třídy. Vše je zadané v ServiceEventSource.cs souboru, který je součástí kódu služby. Například v následujícím fragmentu kódu název ServiceEventSource je MyCompany-Application1-Stateless1:

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

Všimněte si, že eventFlowConfig.json soubor je součástí konfiguračního balíčku služby. Změny tohoto souboru je možné zahrnout do úplných nebo konfiguračních upgradů služby, které podléhají kontrolám stavu upgradu Service Fabric a automatickému vrácení zpět, pokud dojde k selhání upgradu. Další informace najdete v tématu Upgrade aplikace Service Fabric.

Oddíl filtrů konfigurace umožňuje dále přizpůsobit informace, které procházejí kanálem EventFlow, na výstupy, takže můžete vynechat nebo zahrnout určité informace nebo změnit strukturu dat události. Další informace o filtrování najdete v tématu Filtry toku událostí.

Posledním krokem je vytvoření instance kanálu EventFlow ve spouštěcím kódu vaší služby umístěném v Program.cs souboru:

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

Název předaný jako parametr CreatePipeline metody je ServiceFabricDiagnosticsPipelineFactory název entity stavu představující kanál shromažďování protokolů EventFlow. Tento název se používá v případě, že eventFlow narazí na chybu a nahlásí ho prostřednictvím subsystému stavu Service Fabric.

Použití nastavení Service Fabric a parametrů aplikace v eventFlowConfig

EventFlow podporuje konfiguraci nastavení EventFlow pomocí nastavení Service Fabric a parametrů aplikace. Na parametry nastavení Service Fabric můžete odkazovat pomocí této speciální syntaxe pro hodnoty:

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

<section-name> je název oddílu konfigurace Service Fabric a <setting-name> jedná se o nastavení konfigurace s hodnotou, která se použije ke konfiguraci nastavení Toku událostí. Další informace o tom, jak to udělat, najdete v tématu Podpora nastavení a parametrů aplikace Service Fabric.

Ověření

Spusťte službu a sledujte okno výstupu ladění v sadě Visual Studio. Po spuštění služby byste měli začít zobrazovat důkazy, že vaše služba odesílá záznamy do výstupu, který jste nakonfigurovali. Přejděte na platformu pro analýzu událostí a vizualizaci a ověřte, že se protokoly začaly zobrazovat (může to trvat několik minut).

Další kroky