Dela via


Självstudie: Övervaka och diagnostisera en ASP.NET Core-app för Service Fabric med 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 på ett Service Fabric-kluster med Application Insights. Vi samlar in telemetri från program som utvecklats i den första delen av självstudien Skapa ett .NET Service Fabric-program.

I del fyra av den här självstudieserien får du lära dig att:

  • Konfigurera Application Insights för ditt program
  • Samla in svarstelemetri som spårar HTTP-baserad kommunikation mellan tjänster
  • Använda programkartefunktionen i Application Insights
  • Lägga till anpassade händelser med hjälp av Application Insights API

I den här självstudieserien får du lära du dig att:

Förutsättningar

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

Ladda ned exempelprogrammet Röstning

Om du inte byggde exempelprogrammet Röstning i del ett av självstudiekursen kan du ladda ned det. Kör följande kommando i ett kommandofönster eller en terminal för att klona lagringsplatsen för exempelappen till den lokala datorn.

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

Konfigurera en Application Insights-resurs

Application Insights är Azures hanteringsplattform för programprestanda och Service Fabrics rekommenderade plattform för övervakning av program och diagnostik.

Skapa en Application Insights-resurs genom att gå till Azure Portal. Välj Skapa en resurs på den vänstra navigeringsmenyn för att öppna Azure Marketplace. Välj Övervakning + hantering och sedan Application Insights.

Skapa en ny AI-resurs

Nu behöver du fylla i nödvändig information om attributen för den resurs som ska skapas. Ange ett lämpligt Namn, Resursgrupp och Prenumeration. Ange den Plats som du vill distribuera Service Fabric-klustret till i framtiden. I den här självstudien distribuerar vi appen till det lokala klustret, så fältet Plats är inte relevant. Programtyp ska fortsätta vara ”ASP.NET-webbprogram”.

AI-resursattribut

När du har fyllt i nödvändig information väljer du Skapa för att etablera resursen – det bör ta ungefär en minut.

Lägga till Application Insights i tillämpningstjänsterna

Starta Visual Studio 2019 med utökade privilegier genom att högerklicka på Visual Studio-ikonen på Start-menyn och välja Kör som administratör. Välj Fil>Öppna>projekt/lösning och gå till röstningsprogrammet (antingen skapat i del ett av självstudien eller git-klonad). Öppna Voting.sln. Om du uppmanas att återställa programmets NuGet-paket väljer du Ja.

Följ de här stegen för att konfigurera 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.

    Konfigurera AI

Anteckning

Beroende på projekttypen kan du när du högerklickar på namnet på tjänsten välja Lägg till–> Application Insights-telemetri ...

  1. Välj Kom igång.

  2. 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. Resursen finns under Befintlig Application Insights-resurs i listrutan ”Resurs”. Välj Registrera för att lägga till Application Insights i din tjänst.

    Registrera AI

  3. Klicka på Slutför när dialogrutan öppnas och visar att åtgärden är klar.

Anteckning

Gör stegen ovan 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 NuGets som kan användas beroende på scenario. Den ena används med Service Fabrics ursprungliga tjänster och andra med containrar och körbara gästfiler. I det här fallet ska vi använda Microsoft.ApplicationInsights.ServiceFabric.Native NuGet till att förstå vilken tjänstkontext den har. Mer information om Application Insights SDK och Service Fabric-specifika NuGet-paket finns i Microsoft Application Insights för Service Fabric.

Här följer stegen för att konfigurera NuGet-paketet:

  1. Högerklicka på Lösningen Röstning överst i Solution Explorer och välj Hantera NuGet-paket för lösning....
  2. Välj Bläddra på den översta navigeringsmenyn i fönstret "NuGet - Lösning" och markera rutan Inkludera förhandsversion bredvid sökfältet.

Anteckning

Du kan behöva installera paketet Microsoft.ServiceFabric.Diagnostics.Internal på liknande sätt, om det inte finns förinstallerat, innan du installerar Application Insights-paketet

  1. Sök Microsoft.ApplicationInsights.ServiceFabric.Native efter och välj lämpligt NuGet-paket.

  2. Till höger markerar du de två kryssrutorna bredvid de två tjänsterna i programmet, VotingWeb och VotingData , och väljer Installera. AI sdk Nuget

  3. Välj OK i dialogrutan Förhandsgranska ändringar som visas och godkänn godkännandet av licensen. Du är nu klar med att lägga till NuGet till tjänsterna.

  4. Nu måste du konfigurera telemetriinitieraren i de två tjänsterna. Det gör du genom att öppna VotingWeb.cs och VotingData.cs. Gör följande i båda två:

    1. Lägg till dessa två using-instruktioner överst i varje <ServiceName.cs> efter de befintliga using-instruktionerna:
    using Microsoft.ApplicationInsights.Extensibility;
    using Microsoft.ApplicationInsights.ServiceFabric;
    
    1. I båda filerna, i den kapslade return-instruktionenför CreateServiceInstanceListeners() eller CreateServiceReplicaListeners(), under ConfigureServices-tjänster>, med de andra singleton-tjänsterna deklarerade, lägger du till:
    .AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext))
    

    Detta lägger till Tjänstkontext i din telemetri för att underlätta förståelsen av källan för din telemetri i Application Insights. Den kapslade return-instruktionen i VotingWeb.cs bör se ut så här:

    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 bör du ha:

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

Anteckning

Det här exempelprogrammet använder http för tjänster för att kommunicera. Om du utvecklar ett program med Service Remoting V2 behöver du även lägga till följande kodrader på samma plats som ovan

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

Nu är du redo att distribuera programmet. Välj Start längst upp (eller F5) så skapar och paketar Visual Studio programmet, konfigurerar ditt lokala kluster och distribuerar programmet till det.

Anteckning

Du kan få ett build-fel om du inte har en uppdaterad version av .NET Core SDK installerad.

När programmet har distribuerats går du till localhost:8080, där du bör kunna se ensidesapplikationen Röstningsexempel. Rösta på några olika objekt för att skapa exempeldata och telemetri – jag valde efterrätter!

Röstning i AI-exempel

Du kan ta bort några av röstningsalternativen eller lägga till ett par röster när du är klar.

Visa telemetri och programkarta i Application Insights

Navigera till Application Insights-resursen i Azure-portalen.

Välj Översikt för att gå tillbaka till landningssidan för din resurs. Välj sedan Sök längst upp 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 kan du vänta en minut och sedan trycka på knappen Uppdatera längst upp. AI se spårningar

Rulla nedåt i fönstret Sök för att se all inkommande telemetri som medföljer Application Insights. För varje åtgärd som du har gjort i programmet Röstning ska det finnas en utgående PUT-förfrågan från VotingWeb (PUT Votes/Put [namn]), en inkommande PUT-begäran från VotingData (PUT VoteData/Put [namn]), följt av ett par GET-begäranden om att uppdatera de data som visas. Det finns också en beroendespårning för HTTP på localhost, eftersom det är HTTP-begäranden. Här är ett exempel på vad som ska visas när en röst har lagts till:

Spårning av AI-exempelbegäran

Du kan välja en av spårningarna om du vill visa mer information om den. Det är användbar information om den begäran som kommit från Application Insights, inklusive Svarstid och Fråge-URL. Eftersom du dessutom lade till den Service Fabric-specifika NuGet, visas också data om ditt program i kontexten för ett Service Fabric-kluster i avsnittet Anpassade data. Detta inkluderar tjänstkontexten, så du kan se PartitionID och ReplicaId från källan för begäran, vilket gör det lättare att hitta problem vid diagnostisering av fel i programmet.

AI spårar information

Dessutom kan du välja Programkarta på den vänstra menyn på sidan Översikt eller välja ikonen Appkarta för att ta dig till appkartan som visar dina två anslutna tjänster.

Skärmbild som visar Programkarta på den vänstra menyn.

Med programkartan blir det enklare att förstå programtopologin, särskilt när du börjar att lägga till flera olika tjänster som samverkar. Den ger dig även grundläggande data på begäran och kan hjälpa dig att felsöka misslyckade begäranden för att förstå vad som blev fel. Mer information om hur du använder programkartan finns i Programkarta i Application Insights.

Lägga till anpassad instrumentation i ditt program

Även om Application Insights innehåller en mängd telemetri direkt, kanske du vill lägga till ytterligare anpassad instrumentation. Detta kan baseras på dina verksamhetsbehov eller förbättra diagnostiken om något fel uppstår i ditt program. Application Insights innehåller en API som matar in anpassade händelser och mått. Du kan läsa mer om den här.

Låt oss lägga till vissa anpassade händelser i VoteDataController.cs (under VotingData>Kontrollanter) för att kunna spåra när röster läggs till och tas bort från underliggande votesDictionary.

  1. Lägg till using Microsoft.ApplicationInsights; i slutet av de andra using-instruktionerna.
  2. Deklarera en ny TelemetryClient i början av klassen under skapandet av IReliableStateManager: private TelemetryClient telemetry = new TelemetryClient();.
  3. I funktionen Put() lägger du till en händelse som bekräftar en röst har lagts till. Lägg till telemetry.TrackEvent($"Added a vote for {name}"); när transaktionen har slutförts, direkt före return-instruktionen OkResult.
  4. I Delete() finns det ett ”if/else” som baseras på villkoret att 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 if-instruktionen, efter await tx.CommitAsync(): telemetry.TrackEvent($"Deleted votes for {name}");
    2. Lägg till en händelse som visar att borttagningen inte ägde rum i else-instruktionen före return-instruktionen: telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");

Här är ett exempel på hur dina Put()- 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 har gjort dessa ändringar startar du programmet så att den senaste versionen skapas och distribueras. När programmet har distribuerats går du till och lägger till localhost:8080och tar bort några röstningsalternativ. Gå sedan tillbaka till Application Insights-resursen för att se spårningarna för den senaste körningen (som tidigare kan det ta 1–2 minuter för spårningar att visas i Application Insights). För alla röster som du har lagt till och tagit bort, bör du nu se en ”Anpassad händelse”\* samt all svarstelemetri.

anpassade händelser

Nästa steg

I den här självstudiekursen lärde du dig att:

  • Konfigurera Application Insights för ditt program
  • Samla in svarstelemetri som spårar HTTP-baserad kommunikation mellan tjänster
  • Använda programkartefunktionen i Application Insights
  • Lägga till anpassade händelser med hjälp av Application Insights API

Nu när du har konfigurerat övervakning och diagnostik för ditt ASP.NET program kan du prova följande: