Agregacja i zbieranie zdarzeń przy użyciu użyciu struktury eventflowEvent aggregation and collection using EventFlow

Użyciu struktury eventflow diagnostyki firmy Microsoft może kierować zdarzenia z węzła do co najmniej jednego miejsca docelowego monitorowania.Microsoft Diagnostics EventFlow can route events from a node to one or more monitoring destinations. Ponieważ jest on uwzględniony jako pakiet NuGet w projekcie usługi, użyciu struktury eventflow kod i konfigurację są przesyłane z usługą, eliminując wymieniony wcześniej problem z konfiguracją dla każdego węzła na Diagnostyka Azure.Because it is included as a NuGet package in your service project, EventFlow code and configuration travel with the service, eliminating the per-node configuration issue mentioned earlier about Azure Diagnostics. Użyciu struktury eventflow działa w ramach procesu usługi i łączy się bezpośrednio ze skonfigurowanymi wynikami.EventFlow runs within your service process, and connects directly to the configured outputs. Ze względu na połączenie bezpośrednie użyciu struktury eventflow działa dla wdrożeń platformy Azure, kontenerów i usług lokalnych.Because of the direct connection, EventFlow works for Azure, container, and on-premises service deployments. Należy zachować ostrożność w przypadku uruchamiania użyciu struktury eventflow w scenariuszach o wysokiej gęstości, takich jak w przypadku kontenera, ponieważ każdy potok użyciu struktury eventflow wykonuje połączenie zewnętrzne.Be careful if you run EventFlow in high-density scenarios, such as in a container, because each EventFlow pipeline makes an external connection. Dlatego w przypadku hostowania kilku procesów uzyskasz kilka połączeń wychodzących.So, if you host several processes, you get several outbound connections! Nie ma to znaczenia dla aplikacji Service Fabric, ponieważ wszystkie repliki ServiceType przebiegu w tym samym procesie i ograniczają liczbę połączeń wychodzących.This isn't as much a concern for Service Fabric applications, because all replicas of a ServiceType run in the same process, and this limits the number of outbound connections. Użyciu struktury eventflow oferuje także filtrowanie zdarzeń, dzięki czemu wysyłane są tylko zdarzenia zgodne z określonym filtrem.EventFlow also offers event filtering, so that only the events that match the specified filter are sent.

Konfigurowanie użyciu struktury eventflowSet up EventFlow

Pliki binarne użyciu struktury eventflow są dostępne jako zbiór pakietów NuGet.EventFlow binaries are available as a set of NuGet packages. Aby dodać użyciu struktury eventflow do projektu usługi Service Fabric, kliknij prawym przyciskiem myszy projekt w Eksplorator rozwiązań i wybierz polecenie "Zarządzaj pakietami NuGet".To add EventFlow to a Service Fabric service project, right-click the project in the Solution Explorer and choose "Manage NuGet packages." Przejdź do karty "Przeglądaj" i wyszukaj ciąg " Diagnostics.EventFlow ":Switch to the "Browse" tab and search for "Diagnostics.EventFlow":

Użyciu struktury eventflow pakiety NuGet w interfejsie użytkownika Menedżera pakietów NuGet programu Visual Studio

Zostanie wyświetlona lista różnych pakietów, które są wyświetlane z etykietą "dane wejściowe" i "wyjścia".You will see a list of various packages show up, labeled with "Inputs" and "Outputs". Użyciu struktury eventflow obsługuje różnych różnych dostawców rejestrowania i analizatorów.EventFlow supports various different logging providers and analyzers. Użyciu struktury eventflow hostingu usługi powinna zawierać odpowiednie pakiety w zależności od źródła i miejsca docelowego dzienników aplikacji.The service hosting EventFlow should include appropriate packages depending on the source and destination for the application logs. Oprócz podstawowego pakietu servicefabric potrzebne są również co najmniej jedno skonfigurowane dane wejściowe i wyjściowe.In addition to the core ServiceFabric package, you also need at least one Input and Output configured. Na przykład można dodać następujące pakiety, aby wysłać zdarzenia EventSource do Application Insights:For example, you can add the following packages to send EventSource events to Application Insights:

  • Microsoft.Diagnostics.EventFlow.Inputs.EventSource Aby przechwytywać dane z klasy EventSource usługi i ze standardowych zdarzeń EventSource, takich jak Microsoft-servicefabric-Services i Microsoft-Servicefabric-aktors)Microsoft.Diagnostics.EventFlow.Inputs.EventSource to capture data from the service's EventSource class, and from standard EventSources such as Microsoft-ServiceFabric-Services and Microsoft-ServiceFabric-Actors)
  • Microsoft.Diagnostics.EventFlow.Outputs.ApplicationInsights (będziemy wysyłać dzienniki do zasobu usługi Azure Application Insights)Microsoft.Diagnostics.EventFlow.Outputs.ApplicationInsights (we are going to send the logs to an Azure Application Insights resource)
  • Microsoft.Diagnostics.EventFlow.ServiceFabric(umożliwia inicjowanie potoku użyciu struktury eventflow z konfiguracji usługi Service Fabric i zgłasza wszelkie problemy z wysyłaniem danych diagnostycznych jako raportów kondycji Service Fabric)Microsoft.Diagnostics.EventFlow.ServiceFabric(enables initialization of the EventFlow pipeline from Service Fabric service configuration and reports any problems with sending diagnostic data as Service Fabric health reports)

Uwaga

Microsoft.Diagnostics.EventFlow.Inputs.EventSource Pakiet wymaga, aby projekt usługi miał wartość docelową .NET Framework 4,6 lub nowszą.Microsoft.Diagnostics.EventFlow.Inputs.EventSource package requires the service project to target .NET Framework 4.6 or newer. Przed zainstalowaniem tego pakietu upewnij się, że we właściwościach projektu została ustawiona odpowiednia struktura docelowa.Make sure you set the appropriate target framework in project properties before installing this package.

Po zainstalowaniu wszystkich pakietów następnym krokiem jest skonfigurowanie i włączenie użyciu struktury eventflow w usłudze.After all the packages are installed, the next step is to configure and enable EventFlow in the service.

Konfigurowanie i Włączanie zbierania dziennikówConfigure and enable log collection

Potok użyciu struktury eventflow odpowiedzialny za wysyłanie dzienników jest tworzony na podstawie specyfikacji przechowywanej w pliku konfiguracji.The EventFlow pipeline responsible for sending the logs is created from a specification stored in a configuration file. Microsoft.Diagnostics.EventFlow.ServiceFabricPakiet instaluje początkowy plik konfiguracji użyciu struktury eventflow w PackageRoot\Config folderze rozwiązania o nazwie eventFlowConfig.json .The Microsoft.Diagnostics.EventFlow.ServiceFabric package installs a starting EventFlow configuration file under PackageRoot\Config solution folder, named eventFlowConfig.json. Ten plik konfiguracyjny należy zmodyfikować, aby przechwytywać dane z domyślnej EventSource klasy usług oraz wszelkich innych danych wejściowych, które mają zostać skonfigurowane, i wysyłać dane do odpowiedniego miejsca.This configuration file needs to be modified to capture data from the default service EventSource class, and any other inputs you want to configure, and send data to the appropriate place.

Uwaga

Jeśli plik projektu ma format VisualStudio 2017, eventFlowConfig.json plik nie zostanie automatycznie dodany.If your project file has VisualStudio 2017 format the eventFlowConfig.json file will not be automatically added. Aby rozwiązać ten problem, Utwórz plik w Config folderze i ustaw akcję kompilacji na Copy if newer .To fix this create the file in the Config folder and set the build action to Copy if newer.

Poniżej znajduje się przykład eventFlowConfig.jsw oparciu o wymienione powyżej pakiety NuGet:Here is a sample eventFlowConfig.json based on the NuGet packages mentioned above:

{
  "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 elementu serviceeventsource usługi jest wartością właściwości Nazwa EventSourceAttribute zastosowanej do klasy serviceeventsource.The name of service's ServiceEventSource is the value of the Name property of the EventSourceAttribute applied to the ServiceEventSource class. To wszystko jest określone w ServiceEventSource.cs pliku, który jest częścią kodu usługi.It is all specified in the ServiceEventSource.cs file, which is part of the service code. Na przykład w poniższym fragmencie kodu nazwa elementu serviceeventsource to Application1-Stateless1:For example, in the following code snippet the name of the ServiceEventSource is MyCompany-Application1-Stateless1:

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

Należy zauważyć, że eventFlowConfig.json plik jest częścią pakietu konfiguracji usługi.Note that eventFlowConfig.json file is part of service configuration package. Zmiany w tym pliku mogą być zawarte w pełnych lub tylko konfiguracyjnych uaktualnieniach usługi, z zastrzeżeniem Service Fabric uaktualnienia kondycji i automatycznego wycofywania w przypadku niepowodzenia uaktualnienia.Changes to this file can be included in full- or configuration-only upgrades of the service, subject to Service Fabric upgrade health checks and automatic rollback if there is upgrade failure. Aby uzyskać więcej informacji, zobacz Service Fabric uaktualniania aplikacji.For more information, see Service Fabric application upgrade.

Sekcja filtry konfiguracji umożliwia dalsze dostosowywanie informacji, które przechodzą przez potok użyciu struktury eventflow do danych wyjściowych, co pozwala na upuszczanie lub dołączenie określonych informacji lub zmianę struktury danych zdarzeń.The filters section of the config allows you to further customize the information that is going to go through the EventFlow pipeline to the outputs, allowing you to drop or include certain information, or change the structure of the event data. Aby uzyskać więcej informacji na temat filtrowania, zobacz filtry użyciu struktury eventflow.For more information on filtering, see EventFlow filters.

Ostatnim krokiem jest utworzenie wystąpienia potoku użyciu struktury eventflow w kodzie początkowym usługi, znajdującym się w Program.cs pliku:The final step is to instantiate EventFlow pipeline in your service's startup code, located in Program.cs file:

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 przenoszona jako parametr CreatePipeline metody ServiceFabricDiagnosticsPipelineFactory jest nazwą jednostki kondycji reprezentującej potok zbierania dzienników użyciu struktury eventflow.The name passed as the parameter of the CreatePipeline method of the ServiceFabricDiagnosticsPipelineFactory is the name of the health entity representing the EventFlow log collection pipeline. Ta nazwa jest używana, jeśli użyciu struktury eventflow napotyka i błęduje i raportuje go za pomocą podsystemu kondycji Service Fabric.This name is used if EventFlow encounters and error and reports it through the Service Fabric health subsystem.

Używanie ustawień Service Fabric i parametrów aplikacji w eventFlowConfigUse Service Fabric settings and application parameters in eventFlowConfig

Użyciu struktury eventflow obsługuje używanie ustawień Service Fabric i parametrów aplikacji do konfigurowania ustawień użyciu struktury eventflow.EventFlow supports using Service Fabric settings and application parameters to configure EventFlow settings. Można odwołać się do parametrów ustawień Service Fabric przy użyciu tej specjalnej składni dla wartości:You can refer to Service Fabric settings parameters using this special syntax for values:

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

<section-name> jest nazwą sekcji konfiguracji Service Fabric i <setting-name> jest ustawieniem konfiguracji dostarczającym wartość, która będzie używana do konfigurowania ustawienia użyciu struktury eventflow.<section-name> is the name of the Service Fabric configuration section, and <setting-name> is the configuration setting providing the value that will be used to configure an EventFlow setting. Aby dowiedzieć się więcej o tym, jak to zrobić, przejdź do pomocy technicznej dotyczącej ustawień Service Fabric i parametrów aplikacji.To read more about how to do this, go to Support for Service Fabric settings and application parameters.

WeryfikacjaVerification

Uruchom usługę i zaobserwuj okno dane wyjściowe debugowania w programie Visual Studio.Start your service and observe the Debug output window in Visual Studio. Po uruchomieniu usługi należy zacząć wyświetlać dowód, że usługa wysyła rekordy do danych wyjściowych, które zostały skonfigurowane.After the service is started, you should start seeing evidence that your service is sending records to the output that you have configured. Przejdź do platformy analizy zdarzeń i wizualizacji, a następnie upewnij się, że dzienniki zostały uruchomione w celu wyświetlenia (może to potrwać kilka minut).Navigate to your event analysis and visualization platform and confirm that logs have started to show up (could take a few minutes).

Następne krokiNext steps