Kurz: Monitorování a diagnostika aplikace Service Fabric pomocí Application Insights
Tento kurz je 5 . částí série. Provede vás kroky konfigurace monitorování a diagnostiky pro aplikaci ASP.NET Core spuštěnou v clusteru Azure Service Fabric pomocí Application Insights. Shromažďujete telemetrii z aplikace vyvinuté v první části série kurzů.
V tomto kurzu se naučíte:
- Nastavení prostředku Application Insights
- Přidání Application Insights do služeb aplikace
- Zobrazení telemetrie a mapy aplikací v Application Insights
- Přidání vlastní instrumentace do aplikace
V této sérii kurzů se dozvíte, jak:
- Sestavit aplikaci .NET pro Service Fabric
- Nasadit aplikaci do vzdáleného clusteru
- Přidat koncový bod HTTPS do front-end služby ASP.NET Core
- Konfigurace CI/CD pomocí Azure Pipelines
- Nastavení monitorování a diagnostiky pro aplikaci (tento kurz)
Požadavky
Než začnete s tímto kurzem:
- Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet.
- Nainstalujte Sadu Visual Studio 2019, včetně úlohy vývoje pro Azure a úlohy ASP.NET a vývoje webu.
- Nainstalujte sadu Service Fabric SDK.
Stažení ukázkové aplikace Voting
Pokud jste nevytvořili ukázkovou aplikaci Voting 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. Doporučujeme používat Application Insights pro monitorování a diagnostiku aplikací v Service Fabric.
Pokud chcete vytvořit prostředek Application Insights, přejděte na web Azure Portal. Vyberte Vytvořit prostředek. V nabídce portálu vyberte Monitorování a diagnostika. Ve sloupci Oblíbené služby Azure v části Application Insights vyberte Vytvořit.
Zadejte nebo vyberte hodnoty pro předplatné, skupinu prostředků a název. V části Oblast vyberte, kam se má cluster Service Fabric v budoucnu nasadit. V tomto kurzu nasadíme aplikaci do místního clusteru, takže oblast Azure není relevantní. U typu aplikace ponechte ASP.NET webovou aplikaci.
Pokud jste zadali nebo vybrali požadované informace, vyberte Vytvořit , abyste prostředek zřídili. Prostředek se nasadí přibližně za jednu minutu.
Přidání Application Insights do služeb aplikace
Otevřete Visual Studio 2019 pomocí možnosti Spustit jako správce (klikněte pravým tlačítkem myši na ikonu sady Visual Studio v nabídce Start ). Vyberte Soubor>otevřít>projekt nebo řešení a přejděte do hlasovací aplikace (buď vytvořené v některé části kurzu, nebo naklonované z GitHubu). Otevřete Voting.sln. Pokud se zobrazí výzva k obnovení balíčků NuGet aplikace, vyberte Ano.
Konfigurace Application Insights pro služby VotingWeb a VotingData:
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 můžete po kliknutí pravým tlačítkem myši na název služby vybrat Přidat a pak vybrat Telemetrie Application Insights.
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. Pokud chcete najít prostředek, přejděte v prostředku na existující prostředek Application Insights. Výběrem možnosti Zaregistrovat přidáte Application Insights do vaší služby.
Vyberte Dokončit.
Poznámka:
Nezapomeňte provést tento postup pro obě služby v aplikaci, abyste dokončili konfiguraci 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é můžete 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žíváme balíček NuGet Microsoft.ApplicationInsights.ServiceFabric.Native k získání informací o kontextu služby. 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.
Nastavení balíčku NuGet:
V Průzkumník řešení klikněte pravým tlačítkem na Řešení Voting a vyberte Spravovat balíčky NuGet pro řešení.
V dialogovém okně NuGet – Řešení vyberte Procházet. Zaškrtněte políčko Zahrnout předběžné verze.
Poznámka:
Možná budete muset nainstalovat balíček Microsoft.ServiceFabric.Diagnostics.Internal stejným způsobem, pokud nebyl před instalací balíčku Application Insights předinstalován.
Vyhledejte Microsoft.ApplicationInsights.ServiceFabric.Native a pak vyberte balíček NuGet.
V pravém podokně zaškrtněte políčko VotingWeb a zaškrtávací políčko VotingData . Vyberte volbu Instalovat.
V dialogovém okně Náhled změn vyberte OK a přijměte licenci. Balíčky NuGet se přidají do služeb.
Dále nastavte inicializátor telemetrie ve dvou službách. Otevřete VotingWeb.cs a VotingData.cs. V obou souborech kódu proveďte následující kroky:
Za existující
using
příkazy přidejte tyto dvausing
příkazy na začátek každého souboru:using Microsoft.ApplicationInsights.Extensibility; using Microsoft.ApplicationInsights.ServiceFabric;
V obou souborech přidejte v vnořeném příkazu nebo v části>
services
ConfigureServices
s ostatními deklarovanými singletonovými službami:CreateServiceReplicaListeners()
CreateServiceInstanceListeners()
return
.AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext))
Tento kód se přidá
Service Context
do telemetrie, abyste lépe porozuměli zdroji telemetrie v Application Insights. Váš vnořenýreturn
příkaz v VotingWeb.cs teď vypadá podobně jako v tomto příkladu: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();
V VotingData.cs teď váš kód vypadá podobně jako v tomto příkladu:
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, že UseApplicationInsights()
metoda je volána v VotingWeb.cs i VotingData.cs , jak je znázorněno v příkladech.
Poznámka:
Tato ukázková aplikace používá protokol HTTP ke komunikaci služeb. Pokud vyvíjíte aplikaci pomocí Service Fabric Service Remoting V2, přidejte do kódu také následující řádky ve stejném umístění:
ConfigureServices(services => services
...
.AddSingleton<ITelemetryModule>(new ServiceRemotingDependencyTrackingTelemetryModule())
.AddSingleton<ITelemetryModule>(new ServiceRemotingRequestTrackingTelemetryModule())
)
V tuto chvíli jste připraveni nasadit aplikaci. Vyberte Start (nebo F5). Visual Studio sestaví a zabalí aplikaci, nastaví místní cluster a nasadí aplikaci do clusteru.
Poznámka:
Pokud nemáte nainstalovanou aktuální verzi sady .NET Core SDK, může se zobrazit chyba sestavení.
Po nasazení aplikace přejděte do localhost:8080
umístění , kde je spuštěna jednostráková aplikace Voting Sample. Hlasujte pro několik různých položek podle vašeho výběru a vytvořte ukázková data a telemetrii. Například dezerty!
Některé možnosti hlasování můžete odebrat také po přidání několika hlasů.
Zobrazení telemetrie a mapy aplikací v Application Insights
Na webu Azure Portal přejděte k prostředku Application Insights.
Výběrem možnosti Přehled se vrátíte do podokna přehledu vašeho prostředku. Výběrem možnosti Hledat zobrazíte trasování, která přicházejí. Zobrazení trasování v Application Insights trvá několik minut. Pokud žádné trasování nevidíte, počkejte minutu a pak vyberte tlačítko Aktualizovat .
Posuňte se v okně hledání dolů, abyste zobrazili veškerou příchozí telemetrii, která je součástí Application Insights. Pro každou akci, kterou jste provedli v hlasovací aplikaci, by měl existovat odchozí požadavek PUT z VotingWebu (PUT Votes/Put [name]), příchozí požadavek PUT z VotingData (PUT VoteData /Put [name]) následovaný dvojicí požadavků GET pro aktualizaci zobrazených dat. Trasování závislostí pro protokol HTTP localhost
bude také k dispozici, protože tyto požadavky jsou požadavky HTTP. Tady je příklad toho, co vidíte pro přidání jednoho hlasu:
Pokud chcete zobrazit další podrobnosti, můžete vybrat trasování. Application Insights obsahuje užitečné informace o požadavku, včetně hodnot pro dobu odezvy a adresy URL požadavku. Vzhledem k tomu, že jste přidali NuGet specifický pro Service Fabric, získáte také data o vaší aplikaci v kontextu clusteru Service Fabric v části Vlastní data . Data zahrnují kontext služby, takže můžete zobrazit hodnoty PartitionID a ReplicaId zdroje požadavku a lépe izolovat problémy při diagnostice chyb v aplikaci.
Pokud chcete přejít na mapu aplikace, vyberte v nabídce prostředku v podokně Přehled mapu nebo vyberte ikonu Mapy aplikace. Mapa zobrazuje vaše dvě připojené služby.
Mapa aplikací vám může pomoct lépe porozumět topologii vaší aplikace, zejména když začnete přidávat služby, které spolupracují. Poskytuje také základní data o úspěšnosti požadavků a může vám pomoct diagnostikovat neúspěšný požadavek, abyste pochopili, kde se něco pokazilo. Další informace najdete v tématu Mapa aplikace v Application Insights.
Přidání vlastní instrumentace do aplikace
I když Application Insights poskytuje telemetrii, možná budete chtít přidat vlastní instrumentaci. Možná máte obchodní potřeby pro vlastní instrumentaci nebo chcete zlepšit diagnostiku, když se něco v aplikaci nepovedlo. Vlastní události a metriky můžete ingestovat pomocí rozhraní API Application Insights.
Dále přidejte do VoteDataController.cs (vControllers
VotingData
>) několik vlastních událostí ke sledování, kdy se přidávají a odstraňují hlasy z podkladového votesDictionary
souboru:
Přidejte
using Microsoft.ApplicationInsights;
na konec ostatníchusing
příkazů.Deklarujte novou hodnotu na
TelemetryClient
začátku třídy pod vytvořenímIReliableStateManager
:private TelemetryClient telemetry = new TelemetryClient();
.Put()
Do funkce přidejte událost, která potvrzuje, že je přidán hlas. Přidejtetelemetry.TrackEvent($"Added a vote for {name}");
po dokončení transakce přímo před příkaz returnOkResult
.V závislosti na podmínce, která
votesDictionary
obsahuje hlasy pro konkrétní volbu hlasování, je vDelete()
něm "if/else".- Přidejte událost, která potvrdí odstranění hlasu
if
v příkazu zaawait tx.CommitAsync()
:telemetry.TrackEvent($"Deleted votes for {name}");
- Přidejte událost, která před příkazem ukázala,
return
že odstranění neprobíhá velse
příkazu:telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");
- Přidejte událost, která potvrdí odstranění hlasu
Tady je příklad toho, jak Put()
vaše funkce Delete()
můžou vypadat po přidání událostí:
// 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();
}
}
}
Po dokončení těchto změn vyberte Spustit v aplikaci, aby se sestavil a nasadil nejnovější verzi. Po dokončení nasazení aplikace přejděte na localhost:8080
. Přidejte a odstraňte některé možnosti hlasování. Pak se vraťte k prostředku Application Insights, abyste viděli trasování pro nejnovější spuštění (zobrazení trasování v Application Insights trvá 1 až 2 minuty). U všech hlasů, které jste přidali a odstranili, by se teď měla zobrazit položka pro vlastní událost s přidruženou telemetrií odpovědí.
Související obsah
- Přečtěte si další informace o monitorování a diagnostice v Service Fabric.
- Zkontrolujte analýzu událostí Service Fabric pomocí Application Insights.
- Přečtěte si další informace o Application Insights.