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:
- Erstellen einer .NET Service Fabric-Anwendung
- Bereitstellen der Anwendung in einem Remotecluster
- Hinzufügen eines HTTPS-Endpunkts zu einem ASP.NET Core-Front-End-Dienst
- Konfigurieren von CI/CD mit Azure Pipelines
- Einrichten der Überwachung und Diagnose für die Anwendung (dieses Tutorial)
Voraussetzungen
Bevor Sie mit diesem Tutorial beginnen können, müssen Sie Folgendes tun:
- Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen.
- Installieren Sie Visual Studio 2019 mit den Workloads Azure-Entwicklung und ASP.NET und Webentwicklung.
- Installieren Sie das Service Fabric SDK.
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.
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.
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:
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.
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.
Wählen Sie Erste Schritte aus.
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.
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:
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.
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.
Suchen Sie nach Microsoft.ApplicationInsights.ServiceFabric.Native, und wählen Sie dann das NuGet-Paket aus.
Aktivieren Sie im rechten Bereich das Kontrollkästchen VotingWeb und das Kontrollkästchen VotingData. Wählen Sie Installieren aus.
Wählen Sie im Dialogfeld Änderungen in der Vorschau OK aus, um die Lizenz zu akzeptieren. Die NuGet-Pakete werden den Diensten hinzugefügt.
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:
Fügen Sie diese zwei
using
-Anweisungen am Anfang jeder Datei hinzu, nach den vorhandenenusing
-Anweisungen:using Microsoft.ApplicationInsights.Extensibility; using Microsoft.ApplicationInsights.ServiceFabric;
Fügen Sie in beiden Dateien in der geschachtelten
return
Anweisung vonCreateServiceInstanceListeners()
oderCreateServiceReplicaListeners()
unterConfigureServices
>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 geschachteltereturn
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!
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.
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:
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.
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.
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 votesDictionary
gelöscht werden:
Fügen Sie
using Microsoft.ApplicationInsights;
zum Ende der anderenusing
-Anweisungen hinzu.Deklarieren Sie einen neuen Wert für
TelemetryClient
den Anfang der Klasse unter der Erstellung vonIReliableStateManager
:private TelemetryClient telemetry = new TelemetryClient();
.Fügen Sie in der
Put()
Funktion ein Ereignis hinzu, das bestätigt, dass eine Stimme hinzugefügt wird. Fügen Sietelemetry.TrackEvent($"Added a vote for {name}");
direkt vor der return-AnweisungOkResult
hinzu, nachdem die Transaktion abgeschlossen ist.In
Delete()
, gibt es ein "if/else" basierend auf der Bedingung, dasvotesDictionary
Stimmen für eine bestimmte Abstimmungsoption enthält.- Fügen Sie ein Ereignis hinzu, das das Löschen einer Stimme in der
if
-Anweisung bestätigt, nachawait tx.CommitAsync()
:telemetry.TrackEvent($"Deleted votes for {name}");
- Fügen Sie ein Ereignis hinzu, um anzuzeigen, dass der Löschvorgang in der
else
-Anweisung nicht erfolgt ist, vor derreturn
Anweisung:telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");
- Fügen Sie ein Ereignis hinzu, das das Löschen einer Stimme in der
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.
Zugehöriger Inhalt
- Erfahren Sie mehr über die Überwachung und Diagnose in Service Fabric.
- Service Fabric-Ereignisanalyse mit Application Insights nachschlagen.
- Erfahren Sie mehr über Application Insights.