Delen via


Zelfstudie: Een Service Fabric-toepassing bewaken en diagnosticeren met Behulp van Application Insights

Deze zelfstudie is deel vijf in een reeks. Het begeleidt de stappen voor het configureren van bewaking en diagnose voor een ASP.NET Core-toepassing die wordt uitgevoerd op een Azure Service Fabric-cluster met behulp van Application Insights. U verzamelt telemetrie van de toepassing die is ontwikkeld in deel één van de reeks zelfstudies.

In deze zelfstudie leert u het volgende:

  • Een Application Insights-resource instellen
  • Application Insights toevoegen aan de services van de toepassing
  • Telemetrie en toepassingsoverzicht weergeven in Application Insights
  • Aangepaste instrumentatie toevoegen aan uw toepassing

In de reeks zelfstudies ziet u hoe u het volgende kunt doen:

Vereisten

Voor u met deze zelfstudie begint:

De voorbeeldtoepassing om te stemmen downloaden

Als u de voorbeeldtoepassing Voting niet in deel één van deze reeks zelfstudies hebt gemaakt, kunt u deze downloaden. Voer in een opdrachtvenster of terminal de volgende opdracht uit om de opslagplaats van de voorbeeld-app te klonen naar uw lokale computer:

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

Een Application Insights-resource instellen

Application Insights is het Azure Application Performance Management-platform. U wordt aangeraden Application Insights te gebruiken voor toepassingsbewaking en diagnostische gegevens in Service Fabric.

Als u een Application Insights-resource wilt maken, gaat u naar Azure Portal. Selecteer Een resource maken. Selecteer Bewaking en diagnostische gegevens in het portalmenu. Selecteer Maken in de kolom Populaire Azure-services onder Application Insights.

Schermopname van het maken van een nieuwe Application Insights-resource.

Voer waarden in of selecteer deze voor Abonnement, Resourcegroep en Naam. Kies voor Regio waar u uw Service Fabric-cluster in de toekomst wilt implementeren. In deze zelfstudie implementeren we de app in een lokaal cluster, dus de Azure-regio is niet relevant. Voor toepassingstype laat u deze staan als ASP.NET webtoepassing.

Schermopname van Application Insights-resourcekenmerken.

Wanneer u de vereiste gegevens hebt ingevoerd of geselecteerd, selecteert u Maken om de resource in te richten. De resource wordt in ongeveer één minuut geïmplementeerd.

Application Insights toevoegen aan de services van de toepassing

Open Visual Studio 2019 met behulp van de optie Als administrator uitvoeren (klik met de rechtermuisknop op het pictogram van Visual Studio in het menu Start ). Selecteer Bestand openen>>project/oplossing en ga naar de stemtoepassing (gemaakt in deel één van de zelfstudie of gekloond vanuit GitHub). Open Voting.sln. Als u wordt gevraagd om de NuGet-pakketten van de toepassing te herstellen, selecteert u Ja.

Application Insights configureren voor de Services VotingWeb en VotingData:

  1. Klik met de rechtermuisknop op de naam van de service en selecteer Connected Services>Monitoring toevoegen>met Application Insights.

    Schermopname van het configureren van Application Insights-services.

    Notitie

    Afhankelijk van het projecttype moet u, wanneer u met de rechtermuisknop op de naam van de service klikt, mogelijk Toevoegen selecteren en vervolgens Application Insights-telemetrie selecteren.

  2. Selecteer Aan de slag.

  3. Meld u aan bij het account dat u gebruikt voor uw Azure-abonnement en selecteer het abonnement waarin u de Application Insights-resource hebt gemaakt. Als u de resource wilt zoeken, gaat u in de resource naar de bestaande Application Insights-resource. Selecteer Registreren om Application Insights toe te voegen aan uw service.

    Schermopname van het registreren van Application Insights.

  4. Klik op Voltooien.

Notitie

Zorg ervoor dat u deze stappen uitvoert voor beide services in de toepassing om het configureren van Application Insights voor de toepassing te voltooien. Dezelfde Application Insights-resource wordt gebruikt voor beide services om binnenkomende en uitgaande aanvragen en communicatie tussen de services te bekijken.

Voeg de NuGet Microsoft.ApplicationInsights.ServiceFabric.Native toe aan de services

Application Insights heeft twee Service Fabric-specifieke NuGet-pakketten die u kunt gebruiken, afhankelijk van het scenario. De ene wordt gebruikt met systeemeigen Service Fabric-services en de andere met containers en uitvoerbare gastbestanden. In dit geval gebruiken we het NuGet-pakket Microsoft.ApplicationInsights.ServiceFabric.Native voor meer informatie over servicecontext. Zie Microsoft Application Insights voor Service Fabric voor meer informatie over de Application Insights SDK en de Service Fabric-specifieke NuGet-pakketten.

Het NuGet-pakket instellen:

  1. Klik in Solution Explorer met de rechtermuisknop op Oplossing 'Stemmen' en selecteer NuGet-pakketten beheren voor oplossing.

  2. Selecteer Bladeren in het dialoogvenster NuGet - Oplossing. Schakel het selectievakje Prerelease opnemen in.

    Notitie

    Mogelijk moet u het Microsoft.ServiceFabric.Diagnostics.Internal-pakket op dezelfde manier installeren als het niet vooraf is geïnstalleerd voordat u het Application Insights-pakket hebt geïnstalleerd.

  3. Zoek naar Microsoft.ApplicationInsights.ServiceFabric.Native en selecteer vervolgens het NuGet-pakket.

  4. Schakel in het rechterdeelvenster het selectievakje VotingWeb en het selectievakje VotingData in. Selecteer Installeren.

    Schermopname van de Application Insights SDK in NuGet.

  5. Selecteer OK in het dialoogvenster Voorbeeldwijzigingen om de licentie te accepteren. De NuGet-pakketten worden toegevoegd aan de services.

  6. Stel vervolgens de initialisatiefunctie voor telemetrie in de twee services in. Open VotingWeb.cs en VotingData.cs. Voer de volgende stappen uit in beide codebestanden:

    1. Voeg deze twee using instructies boven aan elk bestand toe, na de bestaande using instructies:

      using Microsoft.ApplicationInsights.Extensibility;
      using Microsoft.ApplicationInsights.ServiceFabric;
      
    2. Voeg in beide bestanden, in de geneste return instructie van CreateServiceInstanceListeners() of CreateServiceReplicaListeners(), onder ConfigureServices>services, met de andere singleton-services gedeclareerd, het volgende toe:

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

      Deze code wordt toegevoegd Service Context aan uw telemetrie, zodat u beter inzicht krijgt in de bron van uw telemetrie in Application Insights. Uw geneste return instructie in VotingWeb.cs ziet er nu ongeveer als volgt uit:

      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 ziet uw code er nu ongeveer als volgt uit:

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();

Controleer of de UseApplicationInsights() methode wordt aangeroepen in zowel VotingWeb.cs als VotingData.cs , zoals wordt weergegeven in de voorbeelden.

Notitie

Deze voorbeeld-app maakt gebruik van HTTP voor de services om te communiceren. Als u een app ontwikkelt met Service Fabric Service Remoting V2, voegt u ook de volgende regels toe op dezelfde locatie in de code:

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

Op dit moment bent u klaar om de toepassing te implementeren. Selecteer Start (of selecteer F5). Visual Studio bouwt en verpakt de toepassing, stelt uw lokale cluster in en implementeert de toepassing in het cluster.

Notitie

Mogelijk krijgt u een buildfout als u geen bijgewerkte versie van de .NET Core SDK hebt geïnstalleerd.

Wanneer de toepassing is geïmplementeerd, gaat u naar localhost:8080, waar de toepassing Stemvoorbeeld met één pagina wordt uitgevoerd. Stem op een aantal verschillende items van uw keuze om enkele voorbeeldgegevens en telemetriegegevens te maken. Bijvoorbeeld desserts!

Schermopname van een voorbeeld van stemmen voor soorten dessert.

U kunt ook enkele stemopties verwijderen wanneer u klaar bent met het toevoegen van een paar stemmen.

Telemetrie en toepassingsoverzicht weergeven in Application Insights

Ga in Azure Portal naar uw Application Insights-resource.

Selecteer Overzicht om terug te gaan naar het overzichtsvenster van uw resource. Selecteer Zoeken om de traceringen te zien die binnenkomen. Het duurt enkele minuten voordat de traceringen in Application Insights verschijnen. Als u geen traceringen ziet, wacht u een minuut en selecteert u vervolgens de knop Vernieuwen .

Schuif omlaag in het zoekvenster om alle binnenkomende telemetriegegevens weer te geven die bij Application Insights worden geleverd. Voor elke actie die u in de stemtoepassing hebt uitgevoerd, moet er een uitgaande PUT-aanvraag zijn van VotingWeb (PUT Votes/Put [naam]), een binnenkomende PUT-aanvraag van VotingData (PUT VoteData/Put [naam]), gevolgd door een paar GET-aanvragen voor het vernieuwen van de weergegeven gegevens. Er is ook een afhankelijkheidstracering voor HTTP ingeschakeld localhost omdat deze aanvragen HTTP-aanvragen zijn. Hier volgt een voorbeeld van wat u ziet voor hoe één stem wordt toegevoegd:

Schermopname van een voorbeeld van een aanvraagtracering in Application Insights.

U kunt een tracering selecteren om meer informatie over deze trace te bekijken. Application Insights bevat nuttige informatie over de aanvraag, inclusief waarden voor reactietijd en aanvraag-URL. Omdat u de Service Fabric-specifieke NuGet hebt toegevoegd, krijgt u ook gegevens over uw toepassing in de context van een Service Fabric-cluster in de sectie Aangepaste gegevens . De gegevens bevatten de servicecontext, zodat u de PartitionID - en ReplicaId-waarden van de bron van de aanvraag kunt zien en problemen beter kunt isoleren wanneer u fouten in uw toepassing diagnosticeert.

Als u naar Toepassingsoverzicht wilt gaan, selecteert u Toepassingsoverzicht in het resourcemenu in het deelvenster Overzicht of selecteert u het pictogram App-kaart . Op de kaart ziet u de twee verbonden services.

Schermopname met toepassingsoverzicht gemarkeerd in het resourcemenu.

Toepassingsoverzicht kan u helpen uw toepassingstopologie beter te begrijpen, met name wanneer u services toevoegt die samenwerken. Het biedt u ook basisgegevens over succespercentages voor aanvragen en het kan u helpen bij het diagnosticeren van een mislukte aanvraag om te begrijpen waar de fout is gegaan. Zie Application Map in Application Insights voor meer informatie.

Aangepaste instrumentatie toevoegen aan uw toepassing

Hoewel Application Insights standaard telemetrie biedt, kunt u aangepaste instrumentatie toevoegen. Misschien hebt u zakelijke behoeften voor aangepaste instrumentatie of wilt u diagnostische gegevens verbeteren wanneer er iets misgaat in uw toepassing. U kunt aangepaste gebeurtenissen en metrische gegevens opnemen met behulp van de Application Insights-API.

Voeg vervolgens een aantal aangepaste gebeurtenissen toe aan VoteDataController.cs (in VotingData>Controllers) om bij te houden wanneer er stemmen worden toegevoegd en verwijderd uit de onderliggende votesDictionarywaarden:

  1. Voeg using Microsoft.ApplicationInsights; toe aan het einde van de andere using instructies.

  2. Declareer een nieuwe waarde voor TelemetryClient aan het begin van de klasse, onder het maken van IReliableStateManager: private TelemetryClient telemetry = new TelemetryClient();.

  3. Voeg in de Put() functie een gebeurtenis toe waarmee wordt bevestigd dat er een stem wordt toegevoegd. Voeg toe telemetry.TrackEvent($"Added a vote for {name}"); nadat de transactie is voltooid, vlak voor de retourinstructie OkResult .

  4. Er Delete()is een 'if/else' op basis van de voorwaarde die votesDictionary stemmen voor een specifieke stemoptie bevat.

    1. Voeg een gebeurtenis toe waarmee de verwijdering van een stem in de if verklaring wordt bevestigd, na await tx.CommitAsync(): telemetry.TrackEvent($"Deleted votes for {name}");
    2. Voeg een gebeurtenis toe om aan te geven dat de verwijdering niet plaatsvond in de else instructie vóór de return instructie: telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");

Hier volgt een voorbeeld van hoe uw Put() en Delete() functies eruit kunnen zien nadat u de gebeurtenissen hebt toegevoegd:

// 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();
        }
    }
}

Wanneer u klaar bent met het aanbrengen van deze wijzigingen, selecteert u Starten in de toepassing, zodat deze de nieuwste versie bouwt en implementeert. Wanneer de toepassing is geïmplementeerd, gaat u naar localhost:8080. Voeg enkele stemopties toe en verwijder deze. Ga vervolgens terug naar uw Application Insights-resource om de traceringen voor de meest recente uitvoering te zien (traceringen duren 1 tot 2 minuten om weer te geven in Application Insights). Voor alle stemmen die u hebt toegevoegd en verwijderd, ziet u nu een vermelding voor aangepaste gebeurtenis met gekoppelde antwoordtelemetrie.

Schermopname van aangepaste gebeurtenissen.