Mapa aplikace: Hodnocení 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á klíčový ukazatel výkonu a stav upozornění. Můžete proklikejte z jakékoli komponenty na podrobnější diagnostiku, jako jsou například události Přehledy aplikace. Pokud vaše aplikace používá služby Azure, můžete také kliknout na diagnostiku Azure, například SQL Database Advisoru.

Co je komponenta?

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

  • Komponenty se liší od "pozorovaných" externích závislostí, jako jsou SQL, EventHub 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 mohou být samostatné instrumentační Přehledy služby Application Přehledy (i když se liší předplatná) nebo různými rolemi, které se hlásí jednomu instrumentačnímu klíči Přehledy aplikace. Prostředí náhledu mapy zobrazuje komponenty bez ohledu na to, jak jsou nastavené.

Mapa složené aplikace

Můžete zobrazit úplnou topologii aplikace napříč několika úrovněmi souvisejících komponent aplikace. Komponenty mohou být různé Přehledy prostředky nebo různé role v jednom prostředku. Mapa aplikace vyhledá komponenty podle 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ů ke zjištění komponent souvisejících s touto komponentou. Tlačítko v levém horním rohu se aktualizuje o počet komponent ve vaší aplikaci, jakmile se objeví.

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

Pokud jsou všechny součásti role v rámci jednoho prostředku application Přehledy, pak tento krok zjišťování není povinný. Počáteční zatížení takové aplikace bude mít všechny jeho komponenty.

Snímek obrazovky s příkladem mapy aplikace

Jedním z klíčových cílů tohoto prostředí je možnost vizualizovat komplexní topologie se stovkami komponent.

Kliknutím na libovolnou komponentu zobrazíte související přehledy a přejděte do prostředí pro hodnocení výkonu a selhání pro komponentu.

Informační rámeček

Prošetřovat selhání

Výběrem možnosti Prozkoumat selhání spusťte podokno selhání.

Snímek obrazovky s tlačítkem Prozkoumat selhání

Snímek obrazovky s prostředím pro selhání

Prozkoumání výkonu

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

Snímek obrazovky s tlačítkem Prozkoumat výkon

Snímek obrazovky s výkonem

Přejít na podrobnosti

Vyberte Přejít k podrobnostem a prozkoumejte prostředí pro koncové transakce, které může nabízet zobrazení až na úroveň zásobníku volání.

Snímek obrazovky s tlačítkem přejít k podrobnostem

Snímek obrazovky s podrobnostmi o koncové transakci

Zobrazení protokolů (analýza)

Pokud chcete data aplikací dále dotazovat a zkoumat, klikněte na Zobrazit v části Protokoly (Analýza).

Snímek obrazovky s tlačítkem Zobrazení v analýze

Snímek obrazovky s analytickým prostředím Line graph summariing the average response duration of a request over the past 12 hours.

Výstrahy

Pokud chcete zobrazit aktivní výstrahy a základní pravidla, která způsobí aktivaci výstrah, vyberte výstrahy.

Snímek obrazovky s tlačítkem Upozornění

Snímek obrazovky s analytickým prostředím

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 k telemetrii vygenerované 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í konfigurace telemetrie

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ých aplikací 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í nebo using není ApplicationInsights.config TelemetryConfiguration.Active pro ASP.NET Core platné.

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

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

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

Vysvětlení názvu cloudové role v kontextu mapy aplikace

Pokud se chcete zamyslet nad názvem cloudové role, může být užitečné podívat se na mapu aplikace s několika názvy cloudových rolí:

Snímek obrazovky mapy aplikace

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

V případě této aplikace představuje každý z těchto názvů cloudových rolí také jiný jedinečný prostředek služby Application Přehledy 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ů application Přehledy, dokáže mapa aplikace spojit mapu podkladový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";

Instance cloudové role může být užitečná také pro scénáře, kdy název cloudové role říká, že problém je někde ve webovém front-endu, ale můžete mít spuštěný webový front-end napříč několika servery s vyrovnáváním zatížení, aby bylo možné přejít na podrobnější vrstvu prostřednictvím dotazů Kusto a vědět, jestli problém ovlivňuje všechny webové front-endové servery nebo instance nebo jen jeden může být mimořádně důležitý.

Scénář, ve kterém můžete chtít přepsat hodnotu instance cloudové role, může být v případě, že je vaše aplikace spuštěná v kontejnerizovaném prostředí, kde pouze znalost jednotlivých serverů nemusí být k nalezení daného problému dostatečným informacím.

Další informace o tom, jak přepsat vlastnost názvu role cloudu pomocí inicializátorů telemetrie, najdete v tématu Přidání vlastností: ITelemetryInitializer.

Řešení potíží

Pokud máte potíže s tím, aby mapa aplikace fungovala podle očekávání, vyzkoušejte tyto 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 nástroj Azure Functions 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 aplikace vytvoří uzel aplikace pro každý jedinečný název cloudové role přítomný v telemetrii vašich požadavků a uzel závislosti pro každou jedinečnou kombinaci názvu typu, cíle a 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 kompletní. Pokud k tomu dojde, zobrazí se při prohlížení mapy zpráva upozornění.

Kromě toho mapa aplikace podporuje až 1 000 samostatných nevyskupovaných uzlů vykreslených najednou. Mapa aplikace snižuje vizuální složitost seskupením závislostí, které mají stejný typ a volající, ale pokud telemetrie obsahuje příliš mnoho jedinečných názvů cloudových rolí nebo příliš mnoho typů závislostí, seskupení nebude dostatečné a mapa se nebude moci vykreslit.

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

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

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

  • Účel názvu cloudové role je popsaný v části výše.

Zpětná vazba na portálu

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

Obrázek MapLink-1

Další kroky

  • Další informace o tom, jak korelace funguje v application Přehledy, najdete v článku o korelaci telemetrie.
  • Diagnostické prostředí celé transakce koreluje telemetrii na straně serveru ze všech vašich aplikací Přehledy monitorovaných komponent do jednoho zobrazení.
  • Informace o pokročilých scénářích korelace v ASP.NET Core a ASP.NET najdete v článku Sledování vlastních operací.