Självstudie: Övervaka och diagnostisera ett Service Fabric-program med hjälp av Application Insights
Den här självstudien är del fem i en serie. Den går igenom stegen för att konfigurera övervakning och diagnostik för ett ASP.NET Core-program som körs i ett Azure Service Fabric-kluster med hjälp av Application Insights. Du samlar in telemetri från programmet som har utvecklats i del ett av självstudieserien.
I den här självstudien lär du dig att:
- Konfigurera en Application Insights-resurs
- Lägga till Application Insights i tillämpningstjänsterna
- Visa telemetri och programkarta i Application Insights
- Lägga till anpassad instrumentation i ditt program
Självstudieserien visar hur du:
- Skapa ett .NET Service Fabric-program
- Distribuera programmet till ett fjärrkluster
- Lägga till en HTTPS-slutpunkt i en klienttjänst i ASP.NET Core
- Konfigurera CI/CD med hjälp av Azure Pipelines
- Konfigurera övervakning och diagnostik för programmet (den här självstudien)
Förutsättningar
Innan du börjar den här självstudien:
- Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto.
- Installera Visual Studio 2019, inklusive arbetsbelastningen för Azure-utveckling och arbetsbelastningen ASP.NET och webbutveckling.
- Installera Service Fabric SDK.
Ladda ned exempelprogrammet Röstning
Om du inte har byggt exempelprogrammet Röstning i del ett av den här självstudieserien kan du ladda ned det. I ett kommandofönster eller en terminal kör du följande kommando för att klona exempelapplagringsplatsen till den lokala datorn:
git clone https://github.com/Azure-Samples/service-fabric-dotnet-quickstart
Konfigurera en Application Insights-resurs
Application Insights är azure-plattformen för programprestandahantering. Vi rekommenderar att du använder Application Insights för programövervakning och diagnostik i Service Fabric.
Om du vill skapa en Application Insights-resurs går du till Azure Portal. Välj Skapa en resurs. På portalmenyn väljer du Övervakning + diagnostik. I kolumnen Populära Azure-tjänster går du till Application Insights och väljer Skapa.
Ange eller välj värden för Prenumeration, Resursgrupp och Namn. För Region väljer du var service fabric-klustret ska distribueras i framtiden. I den här självstudien distribuerar vi appen till ett lokalt kluster, så Azure-regionen är irrelevant. För Programtyp lämnar du som ASP.NET webbapp.
När du har angett eller valt nödvändig information väljer du Skapa för att etablera resursen. Resursen distribueras om ungefär en minut.
Lägga till Application Insights i tillämpningstjänsterna
Öppna Visual Studio 2019 med alternativet Kör som administratör (högerklicka på Visual Studio-ikonen på Start-menyn ). Välj Fil>öppna>projekt/lösning och gå till röstningsprogrammet (antingen skapat i del ett av självstudien eller klonat från GitHub). Öppna Voting.sln. Om du uppmanas att återställa programmets NuGet-paket väljer du Ja.
Så här konfigurerar du Application Insights för tjänsterna VotingWeb och VotingData:
Högerklicka på namnet på tjänsten och välj Lägg till>övervakning av anslutna tjänster>med Application Insights.
Kommentar
Beroende på projekttyp kan du behöva välja Lägg till och sedan välja Application Insights Telemetry när du högerklickar på namnet på tjänsten.
Välj Komma igång.
Logga in på det konto som du använder för din Azure-prenumeration och välj den prenumeration där du skapade Application Insights-resursen. Om du vill hitta resursen går du till Resurs och går till Befintlig Application Insights-resurs. Välj Registrera för att lägga till Application Insights i din tjänst.
Välj Slutför.
Kommentar
Se till att utföra de här stegen för båda tjänsterna i programmet för att slutföra konfigurationen av Application Insights för programmet. Samma Application Insights-resurs används för båda tjänsterna för att visa inkommande och utgående förfrågningar och kommunikation mellan tjänsterna.
Lägg till Microsoft.ApplicationInsights.ServiceFabric.Native NuGet till tjänsterna
Application Insights har två Service Fabric-specifika NuGet-paket som du kan använda beroende på scenariot. Den ena används med inbyggda Service Fabric-tjänster och den andra med containrar och körbara gästprogram. I det här fallet använder vi NuGet-paketet Microsoft.ApplicationInsights.ServiceFabric.Native för att lära oss mer om tjänstkontext. Mer information om Application Insights SDK och Service Fabric-specifika NuGet-paket finns i Microsoft Application Insights för Service Fabric.
Så här konfigurerar du NuGet-paketet:
I Solution Explorer högerklickar du på Lösningen Röstning och väljer Hantera NuGet-paket för lösning.
I dialogrutan NuGet – Lösning väljer du Bläddra. Markera kryssrutan Inkludera förhandsversion .
Kommentar
Du kan behöva installera paketet Microsoft.ServiceFabric.Diagnostics.Internal på samma sätt om det inte var förinstallerat innan du installerade Application Insights-paketet.
Sök efter Microsoft.ApplicationInsights.ServiceFabric.Native och välj sedan NuGet-paketet.
I den högra rutan markerar du kryssrutan VotingWeb och kryssrutan VotingData . Välj Installera.
I dialogrutan Förhandsgranskningsändringar väljer du OK för att acceptera licensen. NuGet-paketen läggs till i tjänsterna.
Konfigurera telemetriinitieraren i de två tjänsterna. Öppna VotingWeb.cs och VotingData.cs. Slutför följande steg i båda kodfilerna:
Lägg till dessa två
using
instruktioner överst i varje fil, efter de befintligausing
instruktionerna:using Microsoft.ApplicationInsights.Extensibility; using Microsoft.ApplicationInsights.ServiceFabric;
I båda filerna, i den kapslade
return
instruktionenCreateServiceInstanceListeners()
för ellerCreateServiceReplicaListeners()
, underConfigureServices
>services
, med de andra singleton-tjänsterna deklarerade, lägger du till:.AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext))
Den här koden lägger
Service Context
till telemetrin så att du bättre kan förstå källan till telemetrin i Application Insights. Din kapsladereturn
instruktion i VotingWeb.cs ser nu ut ungefär som i det här exemplet: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();
I VotingData.cs ser koden nu ut ungefär som i det här exemplet:
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();
Dubbelkolla att UseApplicationInsights()
metoden anropas i både VotingWeb.cs och VotingData.cs enligt exemplen.
Kommentar
Den här exempelappen använder HTTP för att tjänsterna ska kommunicera. Om du utvecklar en app med hjälp av Service Fabric Service Remoting V2 lägger du även till följande rader på samma plats i koden:
ConfigureServices(services => services
...
.AddSingleton<ITelemetryModule>(new ServiceRemotingDependencyTrackingTelemetryModule())
.AddSingleton<ITelemetryModule>(new ServiceRemotingRequestTrackingTelemetryModule())
)
Nu är du redo att distribuera programmet. Välj Start (eller välj F5). Visual Studio skapar och paketar programmet, konfigurerar ditt lokala kluster och distribuerar programmet till klustret.
Kommentar
Du kan få ett byggfel om du inte har någon uppdaterad version av .NET Core SDK installerad.
När programmet har distribuerats går du till localhost:8080
, där ensidesprogrammet Röstningsexempel körs. Rösta på några olika objekt som du väljer för att skapa exempeldata och telemetri. Till exempel desserter!
Du kan också ta bort några av röstningsalternativen när du är klar med att lägga till några röster.
Visa telemetri och programkarta i Application Insights
I Azure Portal går du till din Application Insights-resurs.
Välj Översikt för att gå tillbaka till översiktsfönstret för resursen. Välj Sök för att se spårningarna som kommer in. Det tar några minuter innan spårningarna visas i Application Insights. Om du inte ser några spårningar väntar du en minut och väljer sedan knappen Uppdatera .
Rulla nedåt i sökfönstret för att visa all inkommande telemetri som medföljer Application Insights. För varje åtgärd som du vidtog i röstningsprogrammet bör det finnas en utgående PUT-begäran från VotingWeb (PUT Votes/Put [name]), en inkommande PUT-begäran från VotingData (PUT VoteData/Put [name]), följt av ett par GET-begäranden för att uppdatera de data som visas. Det kommer också att finnas en beroendespårning för HTTP på localhost
eftersom dessa begäranden är HTTP-begäranden. Här är ett exempel på vad du ser för hur en röst läggs till:
Du kan välja en spårning för att se mer information om den. Application Insights innehåller användbar information om begäran, inklusive värden för svarstid och URL för begäran. Eftersom du har lagt till Den Service Fabric-specifika NuGet får du även data om ditt program i kontexten för ett Service Fabric-kluster i avsnittet Anpassade data . Data innehåller tjänstkontexten så att du kan se värdena PartitionID och ReplicaId för källan till begäran och bättre isolera problem när du diagnostiserar fel i ditt program.
Om du vill gå till Programkarta väljer du Programkarta på resursmenyn i fönstret Översikt eller väljer ikonen Appkarta . Kartan visar dina två anslutna tjänster.
Programkarta kan hjälpa dig att förstå programtopologin bättre, särskilt när du börjar lägga till tjänster som fungerar tillsammans. Det ger dig också grundläggande data om antalet lyckade begäranden, och det kan hjälpa dig att diagnostisera misslyckade begäranden för att förstå var saker gick fel. Mer information finns i Programkarta i Application Insights.
Lägga till anpassad instrumentation i ditt program
Även om Application Insights tillhandahåller telemetri direkt kanske du vill lägga till anpassad instrumentation. Du kanske har affärsbehov för anpassad instrumentering eller vill förbättra diagnostiken när saker går fel i ditt program. Du kan mata in anpassade händelser och mått med hjälp av Application Insights-API:et.
Lägg sedan till några anpassade händelser i VoteDataController.cs (iControllers
VotingData
> ) för att spåra när röster läggs till och tas bort från den underliggande votesDictionary
:
Lägg till
using Microsoft.ApplicationInsights;
i slutet av de andrausing
uttrycken.Deklarera ett nytt värde för
TelemetryClient
i början av klassen under skapandet avIReliableStateManager
:private TelemetryClient telemetry = new TelemetryClient();
.Put()
I funktionen lägger du till en händelse som bekräftar att en omröstning har lagts till. Lägg tilltelemetry.TrackEvent($"Added a vote for {name}");
efter att transaktionen har slutförts, precis före returutdragetOkResult
.I
Delete()
finns det ett "if/else" baserat på villkoret somvotesDictionary
innehåller röster för ett specifikt röstningsalternativ.- Lägg till en händelse som bekräftar borttagningen av en röst i -instruktionen
if
, efterawait tx.CommitAsync()
:telemetry.TrackEvent($"Deleted votes for {name}");
- Lägg till en händelse för att visa att borttagningen inte ägde rum i -instruktionen
else
före -instruktionenreturn
:telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");
- Lägg till en händelse som bekräftar borttagningen av en röst i -instruktionen
Här är ett exempel på hur dina Put()
funktioner och Delete()
funktioner kan se ut när du har lagt till händelserna:
// 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();
}
}
}
När du är klar med ändringarna väljer du Starta i programmet så att det skapar och distribuerar den senaste versionen. När programmet har distribuerats går du till localhost:8080
. Lägg till och ta bort några röstningsalternativ. Gå sedan tillbaka till Application Insights-resursen för att se spårningarna för den senaste körningen (spårningar tar mellan 1 och 2 minuter att visas i Application Insights). För alla röster som du har lagt till och tagit bort bör du nu se en post för anpassad händelse med tillhörande svarstelemetri.
Relaterat innehåll
- Läs mer om övervakning och diagnostik i Service Fabric.
- Granska Service Fabric-händelseanalysen med hjälp av Application Insights.
- Läs mer om Application Insights.