Megosztás a következőn keresztül:


Oktatóanyag: Service Fabric-alkalmazások monitorozása és diagnosztizálása az Application Insights használatával

Ez az oktatóanyag egy sorozat ötödik része. Végigvezeti az Azure Service Fabric-fürtön futó ASP.NET Core-alkalmazások monitorozásának és diagnosztikáinak konfigurálásához szükséges lépéseket az Application Insights használatával. Telemetriát gyűjt az oktatóanyag-sorozat első részében kifejlesztett alkalmazásból.

Ebben az oktatóanyagban az alábbiakkal fog megismerkedni:

  • Application Insights-erőforrás beállítása
  • Az Application Insights hozzáadása az alkalmazás szolgáltatásaihoz
  • Telemetria és alkalmazástérkép megtekintése az Application Insightsban
  • Egyéni kialakítás hozzáadása az alkalmazáshoz

Az oktatóanyag-sorozat bemutatja, hogyan:

Előfeltételek

Az oktatóanyag elkezdése előtt:

A mintául szolgáló szavazóalkalmazás letöltése

Ha nem az oktatóanyag-sorozat első részében készítette el a Voting mintaalkalmazást, letöltheti. Egy parancsablakban vagy terminálon futtassa a következő parancsot a mintaalkalmazás-adattár klónozásához a helyi számítógépre:

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

Application Insights-erőforrás beállítása

Az Application Insights az Azure-alkalmazások teljesítménykezelési platformja. Javasoljuk, hogy az Application Insightst használja az alkalmazásfigyeléshez és a diagnosztikahoz a Service Fabricben.

Application Insights-erőforrás létrehozásához nyissa meg az Azure Portalt. Válassza az Erőforrás létrehozása lehetőséget. A portál menüjében válassza a Figyelés + Diagnosztika lehetőséget. A Népszerű Azure-szolgáltatások oszlopban az Application Insights alatt válassza a Létrehozás lehetőséget.

Képernyőkép egy új Application Insights-erőforrás létrehozásáról.

Adja meg vagy válassza ki az előfizetés, az erőforráscsoport és a név értékeit. Régió esetén válassza ki, hogy a jövőben hol helyezze üzembe a Service Fabric-fürtöt. Ebben az oktatóanyagban egy helyi fürtön helyezzük üzembe az alkalmazást, így az Azure-régió nem releváns. Alkalmazástípus esetén hagyja ASP.NET webalkalmazásként.

Az Application Insights erőforrásattribútumait bemutató képernyőkép.

Amikor megadta vagy kiválasztotta a szükséges információkat, válassza a Létrehozás lehetőséget az erőforrás kiépítéséhez. Az erőforrás üzembe helyezése körülbelül egy perc alatt történik.

Az Application Insights hozzáadása az alkalmazás szolgáltatásaihoz

Nyissa meg a Visual Studio 2019-et a Futtatás rendszergazdaként lehetőséggel (kattintson a jobb gombbal a Visual Studio ikonra a Start menüben). Válassza a Fájl>megnyitása>projekt/megoldás lehetőséget, és nyissa meg a szavazóalkalmazást (vagy az oktatóanyag első részében létrehozott vagy a GitHubról klónozott). Nyissa meg a Voting.sln. Ha a rendszer kéri az alkalmazás NuGet-csomagjainak visszaállítását, válassza az Igen lehetőséget.

Az Application Insights konfigurálása a VotingWeb és a VotingData szolgáltatásokhoz:

  1. Kattintson a jobb gombbal a szolgáltatás nevére, és válassza a Csatlakoztatott szolgáltatások>monitorozásának hozzáadása>az Application Insights használatával lehetőséget.

    Az Application Insights-szolgáltatások konfigurálását bemutató képernyőkép.

    Feljegyzés

    A projekt típusától függően, amikor a jobb gombbal a szolgáltatás nevére kattint, szükség lehet a Hozzáadás gombra, majd az Application Insights telemetriai adatainak kiválasztására.

  2. Válassza az Első lépések lehetőséget.

  3. Jelentkezzen be az Azure-előfizetéséhez használt fiókba, és válassza ki azt az előfizetést, amelyben létrehozta az Application Insights-erőforrást. Az erőforrás megkereséséhez nyissa meg a Meglévő Application Insights-erőforrást az Erőforrás területen. Válassza a Regisztráció lehetőséget az Application Insights szolgáltatáshoz való hozzáadásához.

    Képernyőkép az Application Insights regisztrálásáról.

  4. Válassza a Befejezéslehetőséget.

Feljegyzés

Az Application Insights alkalmazáshoz való konfigurálásának befejezéséhez mindenképpen végezze el ezeket a lépéseket az alkalmazás mindkét szolgáltatásához. A rendszer ugyanazt az Application Insights-erőforrást használja mindkét szolgáltatáshoz, hogy lássa a bejövő és a kimenő kéréseket, és kommunikáljon a szolgáltatások között.

A Microsoft.ApplicationInsights.ServiceFabric.Native NuGet hozzáadása a szolgáltatásokhoz

Az Application Insights két Service Fabric-specifikus NuGet-csomaggal rendelkezik, amelyeket a forgatókönyvtől függően használhat. Az egyiket a Service Fabric natív szolgáltatásaival, a másikat tárolókkal és vendég végrehajtható fájlokkal használják. Ebben az esetben a Microsoft.ApplicationInsights.ServiceFabric.Native NuGet csomagot használjuk a szolgáltatáskörnyezet megismeréséhez. További információ az Application Insights SDK-ról és a Service Fabric-specifikus NuGet-csomagokról: Microsoft Application Insights for Service Fabric.

A NuGet-csomag beállítása:

  1. A Megoldáskezelő kattintson a jobb gombbal a "Szavazás" megoldásra, és válassza a Megoldáshoz készült NuGet-csomagok kezelése lehetőséget.

  2. A NuGet – Megoldás párbeszédpanelen válassza a Tallózás lehetőséget. Jelölje be az Előzetes befoglalás jelölőnégyzetet.

    Feljegyzés

    Előfordulhat, hogy a Microsoft.ServiceFabric.Diagnostics.Internal csomagot ugyanúgy kell telepítenie, ha nem lett előre telepítve az Application Insights-csomag telepítése előtt.

  3. Keresse meg a Microsoft.ApplicationInsights.ServiceFabric.Native fájlt, majd válassza ki a NuGet-csomagot.

  4. A jobb oldali panelen jelölje be a VotingWeb jelölőnégyzetet és a VotingData jelölőnégyzetet. Válassza a Telepítés lehetőséget.

    Képernyőkép az Application Insights SDK-ról a NuGetben.

  5. A Módosítások előnézete párbeszédpanelen kattintson az OK gombra a licenc elfogadásához. A NuGet-csomagok hozzá lesznek adva a szolgáltatásokhoz.

  6. Ezután állítsa be a telemetriai inicializálót a két szolgáltatásban. Nyissa meg VotingWeb.cs és VotingData.cs. Hajtsa végre a következő lépéseket mindkét kódfájlban:

    1. Adja hozzá ezt a két using utasítást az egyes fájlok tetején, a meglévő using utasítások után:

      using Microsoft.ApplicationInsights.Extensibility;
      using Microsoft.ApplicationInsights.ServiceFabric;
      
    2. Mindkét fájlban a többi singleton-szolgáltatás beágyazott return utasításában CreateServiceInstanceListeners() CreateServiceReplicaListeners()vagy alatta ConfigureServices>servicesadja hozzá a következőt:

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

      Ez a kód hozzáadja Service Context a telemetriát, így jobban megismerheti a telemetriai adatok forrását az Application Insightsban. Az VotingWeb.cs beágyazott return utasítása most az alábbi példához hasonlóan néz ki:

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

A VotingData.cs a kód az alábbi példához hasonlóan néz ki:

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

Ellenőrizze, hogy a UseApplicationInsights() metódus VotingWeb.cs és VotingData.cs is szerepel-e a példában látható módon.

Feljegyzés

Ez a mintaalkalmazás HTTP-t használ a szolgáltatások kommunikációhoz. Ha a Service Fabric Service Remoting V2 használatával fejleszt alkalmazást, adja hozzá a következő sorokat is a kód ugyanazon helyére:

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

Ezen a ponton készen áll az alkalmazás üzembe helyezésére. Válassza a Start (vagy az F5) lehetőséget. A Visual Studio létrehozza és csomagolja az alkalmazást, beállítja a helyi fürtöt, és üzembe helyezi az alkalmazást a fürtön.

Feljegyzés

Buildelési hibát kaphat, ha nincs telepítve a .NET Core SDK naprakész verziója.

Az alkalmazás üzembe helyezésekor lépjen oda localhost:8080, ahol a szavazóminta egyoldalas alkalmazás fut. Szavazzon néhány választható elemre, hogy létrehozzon néhány mintaadatot és telemetriát. Például desszertek!

Képernyőkép a desszerttípusokra való szavazásról.

A szavazatok egy részét is eltávolíthatja, ha elkészült néhány szavazat hozzáadásával.

Telemetria és alkalmazástérkép megtekintése az Application Insightsban

Az Azure Portalon nyissa meg az Application Insights-erőforrást.

Válassza az Áttekintés lehetőséget az erőforrás áttekintési paneljére való visszalépéshez. Válassza a Keresés lehetőséget a beérkező nyomkövetések megtekintéséhez. Néhány percig tart, amíg a nyomok megjelennek az Application Insightsban. Ha nem lát nyomokat, várjon egy percet, majd válassza a Frissítés gombot.

Képernyőkép az Application Insights nyomkövetési nézetről.

Görgessen le a keresési ablakban az Application Insightshoz kapcsolódó összes bejövő telemetria megtekintéséhez. A szavazóalkalmazásban végzett minden művelethez rendelkeznie kell egy kimenő PUT kéréssel a VotingWebtől (PUT Votes/Put [név]), egy bejövő PUT kérést a VotingData-ból (PUT VoteData/Put [név]), majd egy get kérést a megjelenített adatok frissítésére. A HTTP-hez függőségi nyomkövetés is lesz, localhost mivel ezek a kérések HTTP-kérések. Íme egy példa arra, hogy mit lát egy szavazás hozzáadásához:

Képernyőkép az Application Insights mintakérés-nyomkövetési funkcióról.

A nyomkövetés kiválasztásával további részleteket is megtekinthet róla. Az Application Insights hasznos információkat tartalmaz a kérésről, beleértve a válaszidő és a kérelem URL-címének értékeit. Mivel hozzáadta a Service Fabric-specifikus NuGetet, az egyéni adatok szakaszban egy Service Fabric-fürt kontextusában is lekérheti az alkalmazás adatait. Az adatok tartalmazzák a szolgáltatáskörnyezetet, így megtekintheti a kérelem forrásának PartitionID és ReplicaId értékeit, és jobban elkülönítheti a problémákat az alkalmazás hibáinak diagnosztizálásakor.

Képernyőkép az Application Insights nyomkövetési részleteiről.

Az Alkalmazástérkép megnyitásához válassza az Alkalmazástérkép lehetőséget az Erőforrás menü Áttekintés panelén, vagy válassza az Alkalmazástérkép ikont. A térképen a két csatlakoztatott szolgáltatás látható.

Képernyőkép az alkalmazástérképről az erőforrásmenüben.

Az Alkalmazástérkép segítségével jobban megértheti az alkalmazástopológiát, különösen akkor, amikor elkezdi a közösen működő szolgáltatások hozzáadását. Emellett alapszintű adatokat is biztosít a kérelmek sikerességi arányáról, és segíthet diagnosztizálni a sikertelen kéréseket, hogy megértse, hol történt a hiba. További információ: Application Map in Application Insights.

Egyéni kialakítás hozzáadása az alkalmazáshoz

Bár az Application Insights telemetriát biztosít a mezőből, érdemes lehet egyéni rendszerezést hozzáadni. Lehet, hogy üzleti igényei vannak az egyéni kialakításhoz, vagy javítani szeretné a diagnosztikát, amikor a dolgok elromlanak az alkalmazásban. Az Application Insights API használatával egyéni eseményeket és metrikákat is betölthet.

Ezután adjon hozzá néhány egyéni eseményt a VoteDataController.cs (inControllersVotingData>) elemhez, hogy nyomon kövesse a szavazatok hozzáadásának és törlésének időpontját az alapul szolgálóbólvotesDictionary:

  1. Adja hozzá using Microsoft.ApplicationInsights; a többi using utasítás végén.

  2. Deklaráljon egy új értéket TelemetryClient az osztály elején, a következő létrehozása IReliableStateManageralatt: private TelemetryClient telemetry = new TelemetryClient();.

  3. A függvényben Put() adjon hozzá egy eseményt, amely megerősíti a szavazat hozzáadását. Hozzáadás telemetry.TrackEvent($"Added a vote for {name}"); a tranzakció befejezése után, közvetlenül a visszatérési OkResult utasítás előtt.

  4. Ebben Delete()az esetben egy "if/else" van azon feltétel alapján, amely votesDictionary egy adott szavazási lehetőségre vonatkozó szavazatokat tartalmaz.

    1. Adjon hozzá egy eseményt, amely megerősíti a szavazás törlését a if nyilatkozatban a következő után await tx.CommitAsync(): telemetry.TrackEvent($"Deleted votes for {name}");
    2. Adjon hozzá egy eseményt, amely azt mutatja, hogy a törlés nem az else utasításban történt az return utasítás előtt: telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");

Íme egy példa arra, hogyan nézhetnek ki a Put() Delete() függvények az események hozzáadása után:

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

Amikor befejezte a módosításokat, válassza a Start lehetőséget az alkalmazásban, hogy az létrehozza és üzembe helyezze a legújabb verziót. Ha az alkalmazás üzembe helyezése befejeződött, nyissa meg a következőt localhost:8080: . Adjon hozzá és töröljön néhány szavazási lehetőséget. Ezután térjen vissza az Application Insights-erőforráshoz, és tekintse meg a legújabb futtatás nyomkövetéseit (a nyomkövetések 1–2 percet vesznek igénybe az Application Insightsban való megjelenéshez). A hozzáadott és törölt szavazatok esetében most már látnia kell egy bejegyzést az egyéni eseményhez a kapcsolódó választelemetria használatával.

Egyéni eseményeket bemutató képernyőkép.