Udostępnij za pośrednictwem


Agregacja i zbieranie zdarzeń z użyciem EventFlow

Microsoft Diagnostics EventFlow może kierować zdarzenia z węzła do jednego lub więcej miejsc docelowych monitorowania. Ponieważ jest on dołączany jako pakiet NuGet w projekcie usługi, kod EventFlow i konfiguracja są przesyłane z usługą, eliminując problem z konfiguracją poszczególnych węzłów wymieniony wcześniej w usłudze Azure Diagnostics. EventFlow działa w procesie usługi i łączy się bezpośrednio do skonfigurowanych wyjść. Ze względu na bezpośrednie połączenie usługa EventFlow działa w przypadku wdrożeń platformy Azure, kontenera i lokalnej usługi. Należy zachować ostrożność, jeśli uruchamiasz EventFlow w scenariuszach o wysokiej gęstości, takich jak kontener, ponieważ każdy potok EventFlow nawiązuje połączenie zewnętrzne. Tak więc, jeśli hostujesz kilka procesów, otrzymujesz kilka połączeń wychodzących! Nie jest to tak duże zmartwienie dla aplikacji Service Fabric, ponieważ wszystkie repliki ServiceType są uruchamiane w tym samym procesie, co ogranicza liczbę połączeń wychodzących. Funkcja EventFlow oferuje również filtrowanie zdarzeń, dzięki czemu wysyłane są tylko zdarzenia zgodne z określonym filtrem.

Skonfiguruj EventFlow

Pliki binarne EventFlow są dostępne jako zestaw pakietów NuGet. Aby dodać przepływ zdarzeń do projektu usługi Service Fabric, kliknij prawym przyciskiem myszy projekt w Eksploratorze rozwiązań i wybierz pozycję "Zarządzaj pakietami NuGet". Przejdź do karty "Przeglądaj" i wyszukaj ciąg "Diagnostics.EventFlow":

Pakiety NuGet EventFlow w interfejsie użytkownika menedżera pakietów NuGet programu Visual Studio

Zobaczysz listę różnych pakietów oznaczonych etykietami „Wejścia” i „Wyjścia”. Usługa EventFlow obsługuje różnych dostawców rejestrowania i analizatorów. Usługa hostująca przepływ zdarzeń powinna zawierać odpowiednie pakiety w zależności od źródła i miejsca docelowego dzienników aplikacji. Oprócz podstawowego pakietu ServiceFabric, potrzebne są również co najmniej jedno wejście i jedno wyjście skonfigurowane. Możesz na przykład dodać następujące pakiety, aby wysyłać zdarzenia EventSource do usługi Application Insights:

  • Microsoft.Diagnostics.EventFlow.Inputs.EventSource służy do przechwytywania danych z klasy EventSource odpowiadającej usłudze oraz ze standardowych źródeł zdarzeń, takich jak Microsoft-ServiceFabric-Services i Microsoft-ServiceFabric-Actors)
  • Microsoft.Diagnostics.EventFlow.Outputs.ApplicationInsights (wyślemy dzienniki do zasobu usługi Azure Application Insights)
  • Microsoft.Diagnostics.EventFlow.ServiceFabric(umożliwia inicjowanie potoku EventFlow z poziomu konfiguracji usługi Service Fabric i zgłasza wszelkie problemy z wysyłaniem danych diagnostycznych jako raportów kondycji usługi Service Fabric)

Uwaga

Microsoft.Diagnostics.EventFlow.Inputs.EventSource Pakiet wymaga, aby projekt usługi był przeznaczony dla platformy .NET Framework 4.6 lub nowszej. Przed zainstalowaniem tego pakietu upewnij się, że ustawiono odpowiednią platformę docelową we właściwościach projektu.

Po zainstalowaniu wszystkich pakietów następnym krokiem jest skonfigurowanie i włączenie przepływu zdarzeń w usłudze.

Konfigurowanie i włączanie zbierania dzienników

Potok EventFlow odpowiedzialny za wysyłanie dzienników jest tworzony na podstawie specyfikacji przechowywanej w pliku konfiguracji. Pakiet Microsoft.Diagnostics.EventFlow.ServiceFabric instaluje początkowy plik konfiguracji EventFlow w PackageRoot\Config folderze rozwiązania o nazwie eventFlowConfig.json. Ten plik konfiguracji należy zmodyfikować w celu przechwycenia danych z domyślnej klasy usługi EventSource oraz wszelkich innych danych wejściowych, które chcesz skonfigurować, i wysłać dane do odpowiedniego miejsca.

Uwaga

Jeśli plik projektu ma format VisualStudio 2017, eventFlowConfig.json plik nie zostanie automatycznie dodany. Aby rozwiązać ten problem, utwórz plik w folderze Config i ustaw akcję kompilacji na Copy if newer.

Oto przykładowe eventFlowConfig.json oparte na pakietach NuGet wymienionych powyżej:

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

Nazwa usługi ServiceEventSource jest wartością właściwości EventSourceAttribute Name zastosowanej do klasy ServiceEventSource. Wszystkie są określone w ServiceEventSource.cs pliku, który jest częścią kodu usługi. Na przykład w poniższym fragmencie kodu nazwa ServiceEventSource jest MyCompany-Application1-Stateless1:

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

Należy pamiętać, że eventFlowConfig.json plik jest częścią pakietu konfiguracji usługi. Zmiany w tym pliku można uwzględnić w pełnych aktualizacjach usługi lub tylko aktualizacjach konfiguracji, pod warunkiem kontroli kondycji aktualizacji przez Service Fabric oraz automatycznego wycofania w przypadku niepowodzenia aktualizacji. Aby uzyskać więcej informacji, zobacz Uaktualnianie aplikacji usługi Service Fabric.

Sekcja filtrów konfiguracji umożliwia dalsze dostosowywanie informacji przechodzących przez potok EventFlow do danych wyjściowych, co umożliwia usunięcie lub dołączenie pewnych informacji lub zmianę struktury danych zdarzenia. Aby uzyskać więcej informacji na temat filtrowania, zobacz Filtry przepływu zdarzeń.

Ostatnim krokiem jest utworzenie egzemplarza potoku EventFlow w pliku Program.cs znajdującym się w kodzie uruchamiania usługi.

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

Nazwa przekazana jako parametr CreatePipeline metody ServiceFabricDiagnosticsPipelineFactory to nazwa jednostki kondycji reprezentującej potok zbierania dzienników EventFlow. Ta nazwa jest używana, jeśli usługa EventFlow napotka błąd i zgłosi ją za pośrednictwem podsystemu kondycji usługi Service Fabric.

Użyj ustawień Service Fabric i parametrów aplikacji w eventFlowConfig

EventFlow obsługuje używanie ustawień Service Fabric i parametrów aplikacji do konfigurowania ustawień EventFlow. Możesz zapoznać się z parametrami ustawień usługi Service Fabric przy użyciu tej specjalnej składni dla wartości:

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

<section-name> to nazwa sekcji konfiguracji usługi Service Fabric i <setting-name> to ustawienie konfiguracji zawierające wartość, która zostanie użyta do skonfigurowania ustawienia EventFlow. Aby dowiedzieć się więcej o tym, jak to zrobić, przejdź do tematu Obsługa ustawień usługi Service Fabric i parametrów aplikacji.

Weryfikacja

Uruchom usługę i obserwuj okno wyjściowe debugowania w programie Visual Studio. Po uruchomieniu usługi należy zacząć widzieć dowody, że usługa wysyła rekordy do skonfigurowanych danych wyjściowych. Przejdź do platformy analizy zdarzeń i wizualizacji i upewnij się, że dzienniki zaczęły się pojawiać (może upłynąć kilka minut).

Następne kroki