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:
- Pokud nemáte předplatné Azure, vytvořte si bezplatný účet.
- Nainstalujte Visual Studio 2019 a nainstalujte úlohy Vývoj pro Azure a ASP.NET a vývoj pro web .
- Nainstalujte sadu Service Fabric SDK.
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.
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.
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ě:
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.
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 ...
Vyberte Začínáme.
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.
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:
- 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í....
- 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.
Vyhledejte
Microsoft.ApplicationInsights.ServiceFabric.Native
a vyberte příslušný balíček NuGet.Na pravé straně zaškrtněte dvě políčka vedle dvou služeb v aplikaci VotingWeb a VotingData a vyberte Nainstalovat.
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.
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:
- 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;
- 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:8080
strá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.
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.
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:
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.
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.
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.
- Za ostatní příkazy using přidejte
using Microsoft.ApplicationInsights;
. - Na začátku třídy za vytvořením objektu IReliableStateManager deklarujte nový objekt TelemetryClient:
private TelemetryClient telemetry = new TelemetryClient();
. - 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}");
. - Ve funkci Delete() je podmínka if/else na základě toho, jestli votesDictionary obsahuje hlasy pro danou možnost hlasování.
- Do příkazu if za metodu await tx.CommitAsync() přidejte událost, která potvrzuje odstranění hlasu:
telemetry.TrackEvent($"Deleted votes for {name}");
- 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");
- Do příkazu if za metodu await tx.CommitAsync() přidejte událost, která potvrzuje odstranění hlasu:
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:8080
a 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\*.
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:
- Další zkoumání monitorování a diagnostiky v Service Fabric
- Analýza událostí Service Fabric pomocí Application Insights
- Další informace o Application Insights najdete v dokumentaci k Application Insights.