Sdílet prostřednictvím


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:

Požadavky

Než začnete s tímto kurzem:

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.

Snímek obrazovky, který ukazuje, jak vytvořit nový prostředek Application Insights

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.

Snímek obrazovky znázorňující atributy prostředků Application Insights

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:

  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.

    Snímek obrazovky znázorňující konfiguraci služeb 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.

  2. Vyberte Začínáme.

  3. 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.

    Snímek obrazovky, který ukazuje, jak zaregistrovat Application Insights

  4. 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:

  1. 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í.

  2. 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.

  3. Vyhledejte Microsoft.ApplicationInsights.ServiceFabric.Native a pak vyberte balíček NuGet.

  4. V pravém podokně zaškrtněte políčko VotingWeb a zaškrtávací políčko VotingData . Vyberte volbu Instalovat.

    Snímek obrazovky znázorňující sadu Application Insights SDK v NuGetu

  5. V dialogovém okně Náhled změn vyberte OK a přijměte licenci. Balíčky NuGet se přidají do služeb.

  6. 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:

    1. Za existující using příkazy přidejte tyto dva using příkazy na začátek každého souboru:

      using Microsoft.ApplicationInsights.Extensibility;
      using Microsoft.ApplicationInsights.ServiceFabric;
      
    2. V obou souborech přidejte v vnořeném příkazu nebo v části>servicesConfigureServices 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:8080umí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!

Snímek obrazovky znázorňující příklad hlasování pro typy dezertů

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 .

Snímek obrazovky znázorňující zobrazení trasování ve službě Application Insights

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:

Snímek obrazovky znázorňující trasování ukázkových požadavků v Application Insights

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.

Snímek obrazovky znázorňující podrobnosti trasování Application Insights

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.

Snímek obrazovky se zvýrazněnou mapou aplikace v nabídce prostředků

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 (vControllersVotingData>) několik vlastních událostí ke sledování, kdy se přidávají a odstraňují hlasy z podkladového votesDictionarysouboru:

  1. Přidejte using Microsoft.ApplicationInsights; na konec ostatních using příkazů.

  2. Deklarujte novou hodnotu na TelemetryClient začátku třídy pod vytvořením IReliableStateManager: private TelemetryClient telemetry = new TelemetryClient();.

  3. Put() Do funkce přidejte událost, která potvrzuje, že je přidán hlas. Přidejte telemetry.TrackEvent($"Added a vote for {name}"); po dokončení transakce přímo před příkaz return OkResult .

  4. V závislosti na podmínce, která votesDictionary obsahuje hlasy pro konkrétní volbu hlasování, je v Delete()něm "if/else".

    1. Přidejte událost, která potvrdí odstranění hlasu if v příkazu za await tx.CommitAsync(): telemetry.TrackEvent($"Deleted votes for {name}");
    2. Přidejte událost, která před příkazem ukázala, return že odstranění neprobíhá v else příkazu:telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");

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í.

Snímek obrazovky znázorňující vlastní události