Mapa aplikace: Třídění distribuovaných aplikací

Mapa aplikace pomáhá zjistit kritické body výkonu nebo hlavní místa selhání ve všech komponentách distribuované aplikace. Každý uzel na mapě představuje komponentu aplikace nebo její závislosti; a má stav klíčových ukazatelů výkonu a výstrah. Pokud chcete získat podrobnější diagnostiku, například události Přehledy aplikací, můžete vybrat libovolnou komponentu. Pokud vaše aplikace používá služby Azure, můžete také vybrat diagnostiku Azure, například doporučení SQL Database Advisoru.

Co je komponenta?

Komponenty jsou nezávisle nasazovatelné části distribuované aplikace nebo aplikace mikroslužeb. Vývojáři a provozní týmy mají viditelnost na úrovni kódu nebo přístup k telemetrii generovaným těmito komponentami aplikace.

  • Komponenty se liší od "pozorovaných" externích závislostí, jako jsou SQL, Event Hubs atd., ke kterým váš tým nebo organizace nemusí mít přístup (kód nebo telemetrie).
  • Komponenty běží na libovolném počtu instancí serveru, role nebo kontejneru.
  • Komponenty můžou být samostatné prostředky Přehledy aplikací (i když jsou předplatná odlišná) nebo různé role, které hlásí jeden prostředek Přehledy aplikace. Prostředí mapy náhledu zobrazuje komponenty bez ohledu na jejich nastavení.

Mapa složené aplikace

Můžete zobrazit úplnou topologii aplikací napříč několika úrovněmi souvisejících komponent aplikace. Komponenty můžou být různé aplikační Přehledy prostředky nebo různé role v jednom prostředku. Mapa aplikace najde komponenty podle následujících volání závislostí HTTP provedených mezi servery s nainstalovanou sadou Application Přehledy SDK.

Toto prostředí začíná progresivním zjišťováním komponent. Při prvním načtení mapy aplikace se aktivuje sada dotazů, která zjistí komponenty související s touto komponentou. Tlačítko v levém horním rohu se aktualizuje s počtem komponent ve vaší aplikaci při jejich zjištění.

Po kliknutí na Aktualizovat komponenty mapy se mapa aktualizuje se všemi zjištěnými komponentami až do tohoto bodu. V závislosti na složitosti aplikace to může trvat minutu.

Pokud jsou všechny komponenty role v rámci jednoho prostředku Přehledy aplikace, tento krok zjišťování se nevyžaduje. Počáteční zatížení takové aplikace bude mít všechny její součásti.

Screenshot shows an example of an application map.

Jedním z klíčových cílů tohoto prostředí je schopnost vizualizovat složité topologie se stovkami komponent.

Výběrem libovolné komponenty zobrazíte související přehledy a přejdete do prostředí pro určení výkonu a selhání pro danou komponentu.

Flyout

Zkoumání selhání

Výběrem možnosti Prošetřit selhání spusťte podokno selhání.

Screenshot of investigate failures button

Screenshot of failures experience

Zkoumání výkonu

Pokud chcete řešit problémy s výkonem, vyberte prozkoumat výkon.

Screenshot of investigate performance button

Screenshot of performance experience

Přejít na podrobnosti

Výběrem možnosti Přejít na podrobnosti prozkoumáte kompletní transakční prostředí, které může nabízet zobrazení na úrovni zásobníku volání.

Screenshot of go-to-details button

Screenshot of end-to-end transaction details

Zobrazení protokolů (Analýza)

Pokud chcete dotazovat a prozkoumat data aplikací, vyberte zobrazení v protokolech (Analytics).

Screenshot of view in analytics button

Screenshot of analytics experience. Line graph summarizing the average response duration of a request over the past 12 hours.

Výstrahy

Pokud chcete zobrazit aktivní výstrahy a podkladová pravidla, která způsobují aktivaci výstrah, vyberte výstrahy.

Screenshot of alerts button

Screenshot of analytics experience

Nastavení nebo přepsání názvu cloudové role

Mapa aplikace používá vlastnost názvu cloudové role k identifikaci komponent na mapě. Ruční nastavení nebo přepsání názvu cloudové role a změna toho, co se zobrazí na mapě aplikace:

Poznámka

Sada APPLICATION Přehledy SDK nebo agent automaticky přidá vlastnost názvu cloudové role do telemetrie generované komponentami v Azure App Service prostředí.

Napište vlastní telemetriiInitializer, jak je uvedeno níže.

using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.Extensibility;

namespace CustomInitializer.Telemetry
{
    public class MyTelemetryInitializer : ITelemetryInitializer
    {
        public void Initialize(ITelemetry telemetry)
        {
            if (string.IsNullOrEmpty(telemetry.Context.Cloud.RoleName))
            {
                //set custom role name here
                telemetry.Context.Cloud.RoleName = "Custom RoleName";
                telemetry.Context.Cloud.RoleInstance = "Custom RoleInstance";
            }
        }
    }
}

ASP.NET aplikací: Načtení inicializátoru do aktivní telemetrieConfiguration

V ApplicationInsights.config:

    <ApplicationInsights>
      <TelemetryInitializers>
        <!-- Fully qualified type name, assembly name: -->
        <Add Type="CustomInitializer.Telemetry.MyTelemetryInitializer, CustomInitializer"/>
        ...
      </TelemetryInitializers>
    </ApplicationInsights>

Alternativní metodou pro ASP.NET Webové aplikace je vytvoření instance inicializátoru v kódu, například v souboru Global.aspx.cs:

 using Microsoft.ApplicationInsights.Extensibility;
 using CustomInitializer.Telemetry;

    protected void Application_Start()
    {
        // ...
        TelemetryConfiguration.Active.TelemetryInitializers.Add(new MyTelemetryInitializer());
    }

Poznámka

Přidání inicializátoru pomocí ApplicationInsights.config nebo použití TelemetryConfiguration.Active není platné pro ASP.NET Core aplikace.

ASP.NET Core aplikací: Načtení inicializátoru do telemetrieConfiguration

V případě ASP.NET Core aplikací je přidání nového TelemetryInitializer provedeno přidáním do kontejneru injektáže závislostí, jak je znázorněno níže. To se provádí v ConfigureServices metodě vaší Startup.cs třídy.

 using Microsoft.ApplicationInsights.Extensibility;
 using CustomInitializer.Telemetry;
 public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<ITelemetryInitializer, MyTelemetryInitializer>();
}

Principy názvu cloudové role v kontextu mapy aplikace

Pokud jde o název cloudové role, může být užitečné se podívat na mapu aplikace, která má více názvů cloudových rolí:

Application Map Screenshot

V mapě aplikace nad jednotlivými názvy v zelených polích jsou hodnoty názvů rolí cloudu pro různé aspekty této konkrétní distribuované aplikace. Pro tuto aplikaci se tedy její role skládají z: Authentication, acmefrontend, Inventory Management, a Payment Processing Worker Role.

V případě této aplikace každá z těchto názvů rolí cloudu představuje také jiný jedinečný prostředek Přehledy aplikace s vlastními instrumentačními klíči. Vzhledem k tomu, že vlastník této aplikace má přístup ke každému z těchto čtyř různorodých prostředků Přehledy aplikací, je mapa aplikace schopna spojit mapu základních relací.

Pro oficiální definice:

   [Description("Name of the role the application is a part of. Maps directly to the role name in azure.")]
    [MaxStringLength("256")]
    705: string      CloudRole = "ai.cloud.role";

    [Description("Name of the instance where the application is running. Computer name for on-premises, instance name for Azure.")]
    [MaxStringLength("256")]
    715: string      CloudRoleInstance = "ai.cloud.roleInstance";

Případně může být instance cloudové role užitečná pro scénáře, kdy název cloudové role říká, že problém je někde na webovém front-endu, ale možná spouštíte webový front-end na více serverech s vyrovnáváním zatížení, abyste mohli přejít k vrstvě hlouběji prostřednictvím dotazů Kusto a zjistit, jestli problém ovlivňuje všechny webové front-endové servery nebo instance nebo jenom jeden, může být důležitý.

Scénář, ve kterém byste mohli chtít přepsat hodnotu instance cloudové role, může být situace, kdy je vaše aplikace spuštěná v kontejnerizovaném prostředí, kde stačí vědět, že jednotlivý server nemusí být dostatek informací k vyhledání daného problému.

Další informace o přepsání vlastnosti názvu cloudové role inicializátory telemetrie naleznete v tématu Přidání vlastností: ITelemetryInitializer.

Řešení potíží

Pokud máte potíže s fungováním mapy aplikace podle očekávání, vyzkoušejte následující kroky:

Obecné

  1. Ujistěte se, že používáte oficiálně podporovanou sadu SDK. Nepodporované nebo komunitní sady SDK nemusí podporovat korelaci.

    Seznam podporovaných sad SDK najdete v tomto článku.

  2. Upgradujte všechny komponenty na nejnovější verzi sady SDK.

  3. Pokud používáte Azure Functions s jazykem C#, upgradujte na Functions v2.

  4. Ověřte, že je název cloudové role správně nakonfigurovaný.

  5. Pokud vám chybí závislost, ujistěte se, že je v seznamu automaticky shromažďovaných závislostí. Pokud ne, můžete ji stále najít ručně pomocí volání TrackDependency.

Příliš mnoho uzlů na mapě

Mapa aplikací vytváří uzel aplikace pro každý jedinečný název cloudové role, který se nachází v telemetrii požadavků, a uzel závislosti pro každou jedinečnou kombinaci typu, cíle a názvu cloudové role v telemetrii závislostí. Pokud telemetrie obsahuje více než 10 000 uzlů, mapa aplikace nebude moct načíst všechny uzly a odkazy, takže mapa nebude neúplná. Pokud k tomu dojde, při prohlížení mapy se zobrazí zpráva s upozorněním.

Mapa aplikací navíc podporuje pouze 1 000 samostatných neseskupených uzlů vykreslovaných najednou. Mapa aplikací snižuje vizuální složitost seskupením závislostí, které mají stejný typ a volající, ale pokud vaše telemetrie obsahuje příliš mnoho jedinečných názvů cloudových rolí nebo příliš mnoho typů závislostí, bude seskupení nedostatečné a mapa se nebude moct vykreslit.

Pokud chcete tento problém vyřešit, budete muset změnit instrumentaci, abyste správně nastavili název cloudové role, typ závislosti a cílová pole závislostí.

  • Cíl závislostí by měl představovat logický název závislosti. V mnoha případech je ekvivalentem názvu serveru nebo prostředku závislosti. Například v případě závislostí HTTP je nastavený na název hostitele. Neměl by obsahovat jedinečná ID ani parametry, které se mění z jednoho požadavku na jiný.

  • Typ závislosti by měl představovat logický typ závislosti. Například HTTP, SQL nebo Azure Blob jsou typické typy závislostí. Neměl by obsahovat jedinečná ID.

  • Účel názvu cloudové role je popsaný v předchozí části.

Zpětná vazba k portálu

Pokud chcete poskytnout zpětnou vazbu, použijte možnost zpětné vazby.

MapLink-1 image

Další kroky