Kurz: Monitorování a diagnostika aplikace ASP.NET Core na platformě Service Fabric pomocí Application Insights

Tento kurz je pátou částí série. Provede kroky konfigurace monitorování a diagnostiky pro ASP.NET Core aplikaci spuštěnou v clusteru Service Fabric pomocí Application Insights. Budeme shromažďovat telemetrii z aplikace vyvinuté v první části kurzu Sestavení aplikace .NET pro Service Fabric.

Ve čtvrté části této série kurzů se naučíte:

  • Nakonfigurovat Application Insights pro vaši aplikaci
  • Shromažďovat telemetrii odpovědí za účelem trasování komunikace založené na HTTP mezi službami
  • Používat funkci Mapa aplikace v Application Insights
  • Přidat vlastní události pomocí rozhraní API pro Application Insights

V této sérii kurzů se naučíte:

Požadavky

Než začnete s tímto kurzem:

Stažení ukázkové aplikace Voting

Pokud jste ukázkovou aplikaci Voting nevytvořili v první části této série kurzů, můžete si ji stáhnout. Spuštěním následujícího příkazu v příkazovém okně nebo terminálu naklonujte úložiště ukázkové aplikace do místního počítače.

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

Nastavení prostředku Application Insights

Application Insights je platforma pro správu výkonu aplikací Azure a doporučená platforma Service Fabric pro monitorování a diagnostiku aplikací.

Pokud chcete vytvořit prostředek Application Insights, přejděte na web Azure Portal. Výběrem možnosti Vytvořit prostředek v levé navigační nabídce otevřete Azure Marketplace. Vyberte Monitorování a správa a pak Application Insights.

Vytvoření nového prostředku Application Insights

Teď budete muset vyplnit požadované informace o atributech vytvářeného prostředku. Zadejte vhodný Název, Skupinu prostředků a Předplatné. Nastavte Umístění, do kterého v budoucnu nasadíte cluster Service Fabric. V tomto kurzu nasadíme aplikaci do místního clusteru, takže pole Umístění není relevantní. Jako Typ aplikace ponechte možnost Webová aplikace ASP.NET.

Atributy prostředku Application Insights

Po vyplnění požadovaných informací vyberte Vytvořit a zřiďte prostředek – mělo by to trvat asi minutu.

Přidání Application Insights do služeb aplikace

Spusťte Visual Studio 2019 se zvýšenými oprávněními tak, že v nabídce Start kliknete pravým tlačítkem na ikonu sady Visual Studio a zvolíte Spustit jako správce. Vyberte Soubor>Otevřít>projekt nebo řešení a přejděte do hlasovací aplikace (buď vytvořené v první části kurzu, nebo naklonované gitem). Otevřete Soubor Voting.sln. Pokud se zobrazí výzva k obnovení balíčků NuGet aplikace, vyberte Ano.

Pokud chcete nakonfigurovat Application Insights pro služby VotingWeb i VotingData, postupujte následovně:

  1. Klikněte pravým tlačítkem na název služby a vyberte Přidat > monitorování připojených služeb > pomocí Application Insights.

    Konfigurace Application Insights

Poznámka

V závislosti na typu projektu, když kliknete pravým tlačítkem myši na název služby, možná budete muset vybrat Přidat –> Application Insights Telemetry ...

  1. Vyberte Začínáme.

  2. Přihlaste se k účtu, který používáte pro své předplatné Azure, a vyberte předplatné, ve kterém jste vytvořili prostředek Application Insights. Vyhledejte prostředek v rozevírací nabídce Prostředek v části Stávající prostředek Application Insights. Vyberte Zaregistrovat a přidejte Application Insights do své služby.

    Registrace Application Insights

  3. Jakmile otevřené dialogové okno dokončí akci, klikněte na Dokončit.

Poznámka

Nezapomeňte výše uvedené kroky provést pro obě služby v aplikaci. Tím se dokončí konfigurace Application Insights pro aplikaci. Pro obě služby se používá stejný prostředek Application Insights za účelem zobrazení příchozích i odchozích požadavků a komunikace mezi službami.

Přidání balíčku NuGet Microsoft.ApplicationInsights.ServiceFabric.Native do služeb

Application Insights má dva balíčky NuGet specifické pro Service Fabric, které je možné použít v závislosti na scénáři. Jeden se používá s nativními službami Service Fabric a druhý s kontejnery a spustitelnými soubory hosta. V tomto případě použijeme balíček NuGet Microsoft.ApplicationInsights.ServiceFabric.Native, abychom mohli využít znalost kontextu služby, kterou poskytuje. Další informace o sadě Application Insights SDK a balíčcích NuGet specifických pro Service Fabric najdete v tématu Microsoft Application Insights pro Service Fabric.

Tady je postup nastavení balíčku NuGet:

  1. Klikněte pravým tlačítkem na Řešení Hlasování v horní části Průzkumník řešení a vyberte Spravovat balíčky NuGet pro řešení....
  2. V horní navigační nabídce okna NuGet – Řešení vyberte Procházet a zaškrtněte políčko Zahrnout předběžné verze vedle panelu hledání.

Poznámka

Podobným způsobem možná bude potřeba nainstalovat balíček Microsoft.ServiceFabric.Diagnostics.Internal, pokud už nebyl nainstalovaný před instalací balíčku Application Insights.

  1. Vyhledejte Microsoft.ApplicationInsights.ServiceFabric.Native a vyberte příslušný balíček NuGet.

  2. Na pravé straně zaškrtněte dvě políčka vedle dvou služeb v aplikaci VotingWeb a VotingData a vyberte Nainstalovat. AI sdk Nuget

  3. V dialogovém okně Náhled změn, které se zobrazí, vyberte OK a přijměte přijetí licence. Tím se dokončí přidání balíčku NuGet do služeb.

  4. Teď je potřeba v obou službách nastavit inicializátor telemetrie. Uděláte to tak, že otevřete soubor VotingWeb.cs a VotingData.cs. U obou z nich proveďte následující kroky:

    1. Přidejte tyto dva příkazy using na začátek každého <ServiceName.cs> za existující příkazy using:
    using Microsoft.ApplicationInsights.Extensibility;
    using Microsoft.ApplicationInsights.ServiceFabric;
    
    1. V obou souborech vnořený return příkaz CreateServiceInstanceListeners() nebo CreateServiceReplicaListeners() v části ConfigureServices>services s deklarovanými dalšími singletonovými službami přidejte:
    .AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext))
    

    Tím se do vaší telemetrie přidá kontext služby, který umožňuje lepší porozumění zdroji telemetrie v Application Insights. Váš vnořený příkaz return v souboru VotingWeb.cs by měl vypadat takto:

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

    Podobně byste v souboru VotingData.cs měli mít následující:

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

Pečlivě zkontrolujte, jestli UseApplicationInsights() je metoda volána v souboru VotingWeb.cs i VotingData.cs , jak je znázorněno výše.

Poznámka

Tato ukázková aplikace pro zajištění komunikace služeb používá protokol HTTP. Pokud vyvíjíte aplikaci s využitím vzdálené komunikace služeb V2, budete muset na stejné místo jako výše přidat také následující řádky kódu.

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

V tuto chvíli jste připraveni nasadit aplikaci. Nahoře vyberte Spustit (nebo F5) a Visual Studio sestaví a zabalí aplikaci, nastaví místní cluster a nasadí do něj aplikaci.

Poznámka

Pokud nemáte nainstalovanou aktuální verzi sady .NET Core SDK, může se zobrazit chyba sestavení.

Po dokončení nasazení aplikace přejděte na localhost:8080stránku , kde byste měli vidět jednostránkovou aplikaci Voting Sample. Hlasujte pro několik různých položek, abyste vytvořili nějaká ukázková data a telemetrii – my jsme zvolili zákusky.

Ukázkové hlasy v Application Insights

Až budete hotovi s přidáváním hlasů, můžete některé možnosti hlasování Odebrat.

Zobrazení telemetrie a mapy aplikace v Application Insights

Přejděte ke svému prostředku Application Insights na webu Azure Portal.

Výběrem možnosti Přehled se vraťte na cílovou stránku prostředku. Pak nahoře vyberte Hledat , abyste viděli, že se blíží trasování. Zobrazení trasování v Application Insights trvá několik minut. V případě, že se žádné nezobrazí, chvíli počkejte a stiskněte tlačítko Aktualizovat v horní části. AI – zobrazení trasování

Když se posunete dolů v okně Vyhledávání, zobrazí se veškerá příchozí telemetrie, která je součástí Application Insights. Pro každou akci, kterou jste provedli v hlasovací aplikaci, by se měl zobrazit odchozí požadavek PUT ze služby VotingWeb (PUT Votes/Put [název]),příchozí požadavek PUT ze služby VotingData (PUT VoteData/Put [název]) a pár požadavků GET pro aktualizaci zobrazovaných dat. Vzhledem k tomu, že se jedná o požadavky HTTP, zobrazí se také trasování závislosti protokolu HTTP na místním hostiteli. Tady je příklad toho, co uvidíte při přidání jednoho hlasu:

Trasování ukázkových požadavků AI

Můžete vybrat některé z trasování a zobrazit o něm další podrobnosti. Zobrazí se užitečné informace o požadavku, které poskytuje Application Insights, včetně doby odezvy a adresy URL požadavku. Navíc vzhledem k tomu, že jste přidali balíček NuGet specifický pro Service Fabric, se v části Vlastní data uvedené níže zobrazí také data o vaší aplikaci v kontextu clusteru Service Fabric. To zahrnuje kontext služby, takže se zobrazí ID oddílu a ID repliky zdroje požadavku, pomocí kterých můžete lépe vyhledat problémy při diagnostice chyb v aplikaci.

Podrobnosti o trasování Application Insights

Kromě toho můžete v nabídce vlevo na stránce Přehled vybrat Mapa aplikace nebo vybrat ikonu Mapa aplikace , která vás přemístit na mapu aplikace zobrazující vaše dvě připojené služby.

Snímek obrazovky se zvýrazněnou mapou aplikace v levé nabídce

Mapa aplikace vám může pomoct lépe porozumět topologii vaší aplikace, zejména když začnete přidávat více různých služeb, které mezi sebou spoluprací. Poskytuje také základní data o úspěšnosti požadavků a může vám pomoct diagnostikovat požadavky, které selhaly, abyste zjistili, kde pravděpodobně dochází k problémům. Další informace o používání mapy aplikace najdete v tématu Mapa aplikace v Application Insights.

Přidání vlastní instrumentace do aplikace

Přestože Application Insights poskytuje od začátku spoustu telemetrie, možná budete chtít přidat další vlastní instrumentaci. Ta může vycházet z vašich obchodních potřeb nebo být určená k vylepšení diagnostiky v případě, že ve vaší aplikaci dochází k problémům. Application Insights má rozhraní API pro ingestování vlastních událostí a metrik, o kterém si můžete přečíst více tady.

Přidejme do souboru VoteDataController.cs (v části VotingData>Kontrolery) několik vlastních událostí, abychom mohli sledovat přidávání a odstraňování hlasů ze základního votesDictionary.

  1. Za ostatní příkazy using přidejte using Microsoft.ApplicationInsights;.
  2. Na začátku třídy za vytvořením objektu IReliableStateManager deklarujte nový objekt TelemetryClient: private TelemetryClient telemetry = new TelemetryClient();.
  3. Do funkce Put() přidejte událost, která potvrzuje přidání hlasu. Po dokončení transakce přímo před příkaz return OkResult přidejte telemetry.TrackEvent($"Added a vote for {name}");.
  4. Ve funkci Delete() je podmínka if/else na základě toho, jestli votesDictionary obsahuje hlasy pro danou možnost hlasování.
    1. Do příkazu if za metodu await tx.CommitAsync() přidejte událost, která potvrzuje odstranění hlasu: telemetry.TrackEvent($"Deleted votes for {name}");
    2. Do příkazu else před příkaz return přidejte událost, která ukazuje, že nedošlo k odstranění: telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");

Vaše funkce Put() a Delete() by po přidání událostí měly vypadat podobně jako v následujícím příkladu:

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

Až budete hotovi s prováděním změn, spusťte aplikaci, aby se sestavila a nasadila její nejnovější verze. Po dokončení nasazení aplikace přejděte na localhost:8080a přidejte a odstraňte některé možnosti hlasování. Pak se vraťte do prostředku Application Insights, abyste viděli trasování pro poslední spuštění (stejně jako předtím může trvat 1 až 2 minuty, než se trasování zobrazí v Application Insights). Pro všechny přidané a odstraněné hlasy by se měla kromě telemetrie odpovědi zobrazit také vlastní událost\*.

vlastní události

Další kroky

V tomto kurzu jste se naučili:

  • Nakonfigurovat Application Insights pro vaši aplikaci
  • Shromažďovat telemetrii odpovědí za účelem trasování komunikace založené na HTTP mezi službami
  • Používat funkci Mapa aplikace v Application Insights
  • Přidat vlastní události pomocí rozhraní API pro Application Insights

Teď, když jste pro aplikaci ASP.NET nastavili monitorování a diagnostiku, zkuste následující postup: