Dela via


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:

Förutsättningar

Innan du börjar den här självstudien:

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.

Skärmbild som visar hur du skapar en ny Application Insights-resurs.

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.

Skärmbild som visar Application Insights-resursattribut.

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:

  1. Högerklicka på namnet på tjänsten och välj Lägg till>övervakning av anslutna tjänster>med Application Insights.

    Skärmbild som visar hur du konfigurerar Application Insights-tjänster.

    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.

  2. Välj Komma igång.

  3. 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.

    Skärmbild som visar hur du registrerar Application Insights.

  4. 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:

  1. I Solution Explorer högerklickar du på Lösningen Röstning och väljer Hantera NuGet-paket för lösning.

  2. 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.

  3. Sök efter Microsoft.ApplicationInsights.ServiceFabric.Native och välj sedan NuGet-paketet.

  4. I den högra rutan markerar du kryssrutan VotingWeb och kryssrutan VotingData . Välj Installera.

    Skärmbild som visar Application Insights SDK i NuGet.

  5. I dialogrutan Förhandsgranskningsändringar väljer du OK för att acceptera licensen. NuGet-paketen läggs till i tjänsterna.

  6. Konfigurera telemetriinitieraren i de två tjänsterna. Öppna VotingWeb.cs och VotingData.cs. Slutför följande steg i båda kodfilerna:

    1. Lägg till dessa två using instruktioner överst i varje fil, efter de befintliga using instruktionerna:

      using Microsoft.ApplicationInsights.Extensibility;
      using Microsoft.ApplicationInsights.ServiceFabric;
      
    2. I båda filerna, i den kapslade return instruktionen CreateServiceInstanceListeners() för eller CreateServiceReplicaListeners(), under ConfigureServices>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 kapslade return 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!

Skärmbild som visar ett exempel på röstning för typer av 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:

Skärmbild som visar en exempelbegäransspårning i Application Insights.

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.

Skärmbild som visar programkartan på resursmenyn.

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 (iControllersVotingData> ) för att spåra när röster läggs till och tas bort från den underliggande votesDictionary:

  1. Lägg till using Microsoft.ApplicationInsights; i slutet av de andra using uttrycken.

  2. Deklarera ett nytt värde för TelemetryClient i början av klassen under skapandet av IReliableStateManager: private TelemetryClient telemetry = new TelemetryClient();.

  3. Put() I funktionen lägger du till en händelse som bekräftar att en omröstning har lagts till. Lägg till telemetry.TrackEvent($"Added a vote for {name}"); efter att transaktionen har slutförts, precis före returutdraget OkResult .

  4. I Delete()finns det ett "if/else" baserat på villkoret som votesDictionary innehåller röster för ett specifikt röstningsalternativ.

    1. Lägg till en händelse som bekräftar borttagningen av en röst i -instruktionen if , efter await tx.CommitAsync(): telemetry.TrackEvent($"Deleted votes for {name}");
    2. Lägg till en händelse för att visa att borttagningen inte ägde rum i -instruktionen else före -instruktionen return : telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");

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.

Skärmbild som visar anpassade händelser.