Freigeben über


Tutorial: Überwachen und Diagnostizieren einer Service Fabric-Anwendung mithilfe von Application Insights

Dieses Tutorial ist der fünfte Teil einer Reihe. Es beschreibt die Schritte zum Konfigurieren von Überwachung und Diagnose für eine ASP.NET Core-Anwendung, die in einem Azure Service Fabric-Cluster mithilfe von Application Insights ausgeführt wird. Sie sammeln Telemetrie aus der Anwendung, die in Teil einer der Tutorialreihe entwickelt wurde.

In diesem Tutorial lernen Sie Folgendes:

  • Einrichten einer Application Insights-Ressource
  • Hinzufügen von Application Insights zum Anwendungsdienst
  • Anzeigen der Telemetrie und der App-Übersicht-Zuordnung in Application Insights
  • Hinzufügen einer benutzerdefinierten Instrumentierung zu Ihrer Anwendung

In der Tutorialreihe lernen Sie:

Voraussetzungen

Bevor Sie mit diesem Tutorial beginnen können, müssen Sie Folgendes tun:

Laden Sie die Beispielanwendung „Voting“ herunter.

Falls Sie die Beispielanwendung „Voting“ aus Teil 1 dieser Tutorialreihe nicht erstellt haben, können Sie sie herunterladen. Führen Sie in einem Befehlsfenster oder -terminal den folgenden Befehl aus, um das Beispielrepository für die App auf Ihren lokalen Computer zu klonen:

git clone https://github.com/Azure-Samples/service-fabric-dotnet-quickstart

Einrichten einer Application Insights-Ressource

Application Insights ist die Azure Leistungsverwaltungsplattform. Es wird empfohlen, Application Insights für die Anwendungsüberwachung und -diagnose in Service Fabric zu verwenden.

Gehen Sie zum Azure-Portal, um eine Application Insights-Ressource zu erstellen. Wählen Sie Ressource erstellen. Wählen Sie im Portalmenü Monitoring + Diagnostics aus. Wählen Sie in der Spalte Beliebte Azure-Dienste unter Application Insights die Option Erstellen aus.

Screenshot, der zeigt, wie Sie eine neue Application Insights-Ressource erstellen.

Wählen Sie Werte für Abonnement, Ressourcengruppe und Region aus, oder geben Sie sie ein. Wählen Sie für Region aus, wo Ihr Service Fabric-Cluster in Zukunft bereitgestellt werden soll. In diesem Tutorial stellen wir die App auf einem lokalen Cluster bereit, sodass die Azure Region nicht relevant ist. Belassen Sie als Anwendungstyp die Option ASP.NET-Webanwendung.

Screenshot, der Application Insights-Ressourcenattribute zeigt.

Wenn Sie die erforderlichen Informationen eingegeben oder ausgewählt haben, wählen Sie Erstellen aus, um die Ressource bereitzustellen. Die Ressource wird in etwa einer Minute bereitgestellt.

Hinzufügen von Application Insights zum Anwendungsdienst

Öffnen Sie Visual Studio 2019 mit der Option Als Administrator ausführen (klicken Sie im Startmenü mit der rechten Maustaste auf das Visual Studio-Symbol). Wählen Sie Datei>Öffnen>Projekt/Projektmappe aus, und navigieren Sie zur Abstimmungsanwendung (die entweder in Teil 1 des Tutorials erstellt oder von GitHub geklont wurde). Öffnen Sie Voting.sln. Wählen Sie Ja aus, wenn Sie zum Wiederherstellen der NuGet-Pakete der Anwendung aufgefordert werden.

Um Application Insights für VotingWeb- und VotingData-Dienste zu konfigurieren:

  1. Klicken Sie mit der rechten Maustaste auf den Namen des Diensts, und wählen Sie dann Hinzufügen>Verbundene Dienste>Überwachung mit Application Insights aus.

    Screenshot der Konfiguration von Application Insights-Diensten.

    Hinweis

    Abhängig vom Projekttyp müssen Sie nach dem Rechtsklick auf den Dienstnamen unter Umständen Hinzufügen und dann Application Insights-Telemetrie auswählen.

  2. Wählen Sie Erste Schritte aus.

  3. Melden Sie sich bei dem Konto an, mit dem Sie Ihr Azure-Abonnement eingerichtet haben, und wählen Sie das Abonnement aus, in dem Sie die Application Insights-Ressource erstellt haben. Um die Ressource zu finden, wechseln Sie in Ressource zu Vorhandene Application Insights-Ressource. Wählen Sie Registrieren aus, um Application Insights zu Ihrem Dienst hinzuzufügen.

    Screenshot: Registrieren von Application Insights.

  4. Klicken Sie auf Fertigstellen.

Hinweis

Stellen Sie sicher, dass Sie diese Schritte für beide Dienste der Anwendung durchführen, um die Konfiguration von Application Insights für die Anwendung abzuschließen. Für beide Dienste wird dieselbe Application Insights-Ressource verwendet, damit eingehende und ausgehende Anforderungen und die Kommunikation zwischen den Diensten angezeigt werden.

Hinzufügen des NuGet-Pakets „Microsoft.ApplicationInsights.ServiceFabric.Native“ zu den Diensten

Application Insights verfügt über zwei für Service Fabric spezifische NuGet-Pakete, die abhängig vom Szenario verwendet werden können. Eines wird mit den nativen Service Fabric-Diensten verwendet, das andere mit Containern und ausführbaren Gastanwendungsdateien. In diesem Fall verwenden wir das Microsoft.ApplicationInsights.ServiceFabric.Native NuGet-Paket, um mehr über den Dienstkontext zu erfahren. Weitere Informationen zum Application Insights SDK und zu den für Service Fabric spezifischen NuGet-Paketen finden Sie unter Microsoft Application Insights für Service Fabric.

So richten Sie das NuGet-Paket ein:

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Projektmappe 'Voting, und wählen Sie dann NuGet-Pakete für Projektmappe verwalten aus.

  2. Wählen Sie im Dialogfeld NuGet – Projektmappe die Option Durchsuchen aus. Aktivieren Sie das Kontrollkästchen Vorabversion einbeziehen.

    Hinweis

    Möglicherweise müssen Sie das Paket Microsoft.ServiceFabric.Diagnostics.Internal auf die gleiche Weise installieren, wenn es nicht vor der Installation des Application Insights-Pakets vorinstalliert war.

  3. Suchen Sie nach Microsoft.ApplicationInsights.ServiceFabric.Native, und wählen Sie dann das NuGet-Paket aus.

  4. Aktivieren Sie im rechten Bereich das Kontrollkästchen VotingWeb und das Kontrollkästchen VotingData. Wählen Sie Installieren aus.

    Screenshot: „Application Insights-SDK“ in NuGet.

  5. Wählen Sie im Dialogfeld Änderungen in der Vorschau OK aus, um die Lizenz zu akzeptieren. Die NuGet-Pakete werden den Diensten hinzugefügt.

  6. Als nächstes müssen Sie nun den Telemetrieinitialisierer in beiden Diensten einrichten. Öffnen Sie VotingWeb.cs und VotingData.cs. Führen Sie die folgenden Schritte in beiden Codedateien aus:

    1. Fügen Sie diese zwei using-Anweisungen am Anfang jeder Datei hinzu, nach den vorhandenen using-Anweisungen:

      using Microsoft.ApplicationInsights.Extensibility;
      using Microsoft.ApplicationInsights.ServiceFabric;
      
    2. Fügen Sie in beiden Dateien in der geschachtelten return Anweisung von CreateServiceInstanceListeners() oder CreateServiceReplicaListeners() unter ConfigureServices>services mit den anderen Singletondiensten folgendes hinzu:

      .AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext))
      

      Dieser Code fügt Service Context Ihrer Telemetrie hinzu, sodass Sie die Quelle Ihrer Telemetrie in Application Insights besser verstehen können. Ihre geschachtelte return Anweisung in VotingWeb.cs sieht nun ähnlich wie in diesem Beispiel aus:

      return new WebHostBuilder()
          .UseKestrel()
          .ConfigureServices(
              services => services
                  .AddSingleton<HttpClient>(new HttpClient())
                  .AddSingleton<FabricClient>(new FabricClient())
                  .AddSingleton<StatelessServiceContext>(serviceContext)
                  .AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext)))
          .UseContentRoot(Directory.GetCurrentDirectory())
          .UseStartup<Startup>()
          .UseApplicationInsights()
          .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
          .UseUrls(url)
          .Build();
      

In VotingData.cs sieht Ihr Code nun ähnlich wie in diesem Beispiel aus:

return new WebHostBuilder()
    .UseKestrel()
    .ConfigureServices(
        services => services
            .AddSingleton<StatefulServiceContext>(serviceContext)
            .AddSingleton<IReliableStateManager>(this.StateManager)
            .AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext)))
    .UseContentRoot(Directory.GetCurrentDirectory())
    .UseStartup<Startup>()
    .UseApplicationInsights()
    .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.UseUniqueServiceUrl)
    .UseUrls(url)
    .Build();

Vergewissern Sie sich, dass die UseApplicationInsights()-Methode in den beiden Dateien VotingWeb.cs und VotingData.cs aufgerufen wird, wie in den Beispielen gezeigt.

Hinweis

Diese Beispiel-App verwendet HTTP für die Dienstkommunikation. Wenn Sie eine App mithilfe von Service Fabric Service Remoting V2 entwickeln, fügen Sie auch die folgenden Zeilen am gleichen Speicherort im Code hinzu:

ConfigureServices(services => services
    ...
    .AddSingleton<ITelemetryModule>(new ServiceRemotingDependencyTrackingTelemetryModule())
    .AddSingleton<ITelemetryModule>(new ServiceRemotingRequestTrackingTelemetryModule())
)

An diesem Punkt können Sie Ihre Anwendung bereitstellen. Wählen Sie Start (oder "F5" aus). Visual Studio erstellt und verpackt die Anwendung, richtet Ihren lokalen Cluster ein und stellt die Anwendung im Cluster bereit.

Hinweis

Unter Umständen wird ein Buildfehler angezeigt, wenn keine aktuelle Version des .NET Core SDK installiert ist.

Wenn die Anwendung bereitgestellt wird, wechseln Sie zu localhost:8080, wo die Single-Page-Anwendung des Abstimmungsbeispiels ausgeführt wird. Stimmen Sie für einige verschiedene Elemente Ihrer Wahl ab, um Beispieldaten und eine Beispieltelemetrie zu erstellen. Zum Beispiel Desserts!

Screenshot, der ein Beispiel für die Abstimmung für Arten von Dessert zeigt.

Sie können auch ein paar der Abstimmungsoptionen entfernen, wenn Sie ein paar Stimmen hinzugefügt haben.

Anzeigen der Telemetrie und der App-Übersicht-Zuordnung in Application Insights

Navigieren Sie im Azure-Portal zu Ihrer Application Insights-Ressource.

Wählen Sie Übersicht aus, um zurück zur Übersichtsseite Ihrer Ressource zu gelangen. Wählen Sie Suchen aus, um die ablaufenden Ablaufverfolgungen anzuzeigen. Es dauert ein paar Minuten, bis die Ablaufverfolgungen in Application Insights angezeigt werden. Wenn keine Ablaufverfolgungen angezeigt werden, warten Sie eine Minute, und wählen Sie dann die Schaltfläche Aktualisieren aus.

Screenshot: Fenster „Application Insights“ Überwachungsansicht anzeigen.

Scrollen Sie im Suchfenster nach unten, um alle eingehenden Telemetriedaten anzuzeigen, die im Lieferumfang von Application Insights sind. Für jede Aktion, die Sie in der Voting-Anwendung vorgenommen haben, sollten eine ausgehende PUT-Anforderung von VotingWeb (PUT-Stimmen/Put [Name]) und eine eingehende PUT-Anforderung von VotingData (PUT-Abstimmungsdaten/Put [Name]) vorhanden sein, gefolgt von einem Paar von GET-Anforderungen zum Aktualisieren der angezeigten Daten. Außerdem wird eine Ablaufverfolgung der Abhängigkeit für HTTP von localhost angezeigt, da es sich bei diesen Anforderungen um HTTP-Anforderungen handelt. In diesem Beispiel wird dargestellt, wie eine Stimme hinzugefügt wird:

Screenshot einer Beispielanforderungsablaufverfolgung in Application Insights.

Sie können eine Ablaufverfolgung auswählen, um weitere Details darüber anzuzeigen. Application Insights enthält nützliche Informationen zur Anforderung, einschließlich der Werte für Antwortzeit und Anforderungs-URL. Da Sie die für Service Fabric spezifischen NuGet-Pakete hinzugefügt haben, erhalten Sie ebenfalls Daten zu Ihrer Anwendung im Kontext eines Service Fabric-Clusters im Abschnitt Benutzerdefinierte Daten. Diese Daten schließen den Dienstkontext ein, sodass Ihnen die PartitionId- und die ReplicaId-Werte der Quelle der Anforderung angezeigt werden. Außerdem können Sie Probleme besser lokalisieren, wenn Sie Fehler in Ihrer Anwendung diagnostizieren.

Screenshot: Application Insights Überwachungseinzelheiten.

Um zur Anwendungszuordnung zu wechseln, wählen Sie Anwendungsübersicht im Ressourcenmenü im Bereich Übersicht, oder wählen Sie das Symbol App-Karte aus. Die Karte zeigt Ihre beiden verbundenen Dienste an.

Screenshot, der die Anwendungszuordnung im Ressourcenmenü hervorhebt.

Die Anwendungsübersichtsfunktion kann Sie beim Nachvollziehen der Anwendungstopologie unterstützen, insbesondere wenn Sie Dienste hinzufügen, die zusammenarbeiten. Sie erhalten ebenfalls Daten zur Erfolgsrate der Anforderungen und werden bei der Diagnose fehlgeschlagener Anforderungen unterstützt, um nachzuvollziehen, warum Fehler aufgetreten sind. Screenshot der Anwendungsübersicht in Application Insights.

Hinzufügen einer benutzerdefinierten Instrumentierung zu Ihrer Anwendung

Obwohl Application Insights viele vordefinierte Telemetriedaten bereitstellt, sollten Sie benutzerdefinierte Instrumentierungen hinzufügen. Vielleicht haben Sie geschäftliche Anforderungen für benutzerdefinierte Instrumentierung oder möchten die Diagnose verbessern, wenn in Ihrer Anwendung etwas schief geht. Sie können benutzerdefinierte Ereignisse und Metriken mithilfe der Application Insights-API erfassen.

Fügen Sie als Nächstes einige benutzerdefinierte Ereignisse zu VoteDataController.cs (in VotingData>Controllers) hinzu, um nachzuverfolgen, wann Stimmen hinzugefügt und aus dem zugrunde liegenden votesDictionarygelöscht werden:

  1. Fügen Sie using Microsoft.ApplicationInsights; zum Ende der anderen using-Anweisungen hinzu.

  2. Deklarieren Sie einen neuen Wert für TelemetryClient den Anfang der Klasse unter der Erstellung von IReliableStateManager: private TelemetryClient telemetry = new TelemetryClient();.

  3. Fügen Sie in der Put() Funktion ein Ereignis hinzu, das bestätigt, dass eine Stimme hinzugefügt wird. Fügen Sie telemetry.TrackEvent($"Added a vote for {name}"); direkt vor der return-Anweisung OkResult hinzu, nachdem die Transaktion abgeschlossen ist.

  4. In Delete(), gibt es ein "if/else" basierend auf der Bedingung, das votesDictionary Stimmen für eine bestimmte Abstimmungsoption enthält.

    1. Fügen Sie ein Ereignis hinzu, das das Löschen einer Stimme in der if-Anweisung bestätigt, nach await tx.CommitAsync(): telemetry.TrackEvent($"Deleted votes for {name}");
    2. Fügen Sie ein Ereignis hinzu, um anzuzeigen, dass der Löschvorgang in der else-Anweisung nicht erfolgt ist, vor der return Anweisung: telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");

Nachfolgend finden Sie ein Beispiel dafür, wie Ihre Put() und Delete() Funktionen aussehen können, nachdem Sie die Ereignisse hinzugefügt haben:

// PUT api/VoteData/name
[HttpPut("{name}")]
public async Task<IActionResult> Put(string name)
{
    var votesDictionary = await this.stateManager.GetOrAddAsync<IReliableDictionary<string, int>>("counts");

    using (ITransaction tx = this.stateManager.CreateTransaction())
    {
        await votesDictionary.AddOrUpdateAsync(tx, name, 1, (key, oldvalue) => oldvalue + 1);
        await tx.CommitAsync();
    }

    telemetry.TrackEvent($"Added a vote for {name}");
    return new OkResult();
}

// DELETE api/VoteData/name
[HttpDelete("{name}")]
public async Task<IActionResult> Delete(string name)
{
    var votesDictionary = await this.stateManager.GetOrAddAsync<IReliableDictionary<string, int>>("counts");

    using (ITransaction tx = this.stateManager.CreateTransaction())
    {
        if (await votesDictionary.ContainsKeyAsync(tx, name))
        {
            await votesDictionary.TryRemoveAsync(tx, name);
            await tx.CommitAsync();
            telemetry.TrackEvent($"Deleted votes for {name}");
            return new OkResult();
        }
        else
        {
            telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");
            return new NotFoundResult();
        }
    }
}

Sobald Sie mit den Änderungen fertig sind, wählen Sie Start in der Anwendung aus, sodass diese erstellt und die aktuelle Version bereitgestellt wird. Wenn die Bereitstellung der Anwendung abgeschlossen ist, wechseln Sie zu localhost:8080. Fügen Sie einige Abstimmungsoptionen hinzu, und löschen Sie sie. Wechseln Sie dann zu Ihrer Application Insights-Ressource zurück, um die Ablaufverfolgungen der letzten Ausführung anzuzeigen. (Es kann ein bis zwei Minuten dauern, bis die Ablaufverfolgungen in Application Insights angezeigt werden). Für alle Stimmen, die Sie hinzugefügt und gelöscht haben, sollte nun ein Eintrag für benutzerdefiniertes Ereignis mit zugeordneter Antwort-Telemetrie angezeigt werden.

Screenshot, der benutzerdefinierte Ereignisse zeigt.