Mapa aplikace: Třídění distribuovaných aplikacíApplication Map: Triage Distributed Applications

Mapa aplikace umožňuje přímé výkonnostní kritické body nebo selhání hotspotům pro všechny součásti distribuované aplikace.Application Map helps you spot performance bottlenecks or failure hotspots across all components of your distributed application. Každý uzel na mapě představuje určité součásti aplikace nebo její závislosti; a má stav klíčového ukazatele výkonu a výstrahy stavu.Each node on the map represents an application component or its dependencies; and has health KPI and alerts status. Můžete kliknutím z libovolné komponenty na podrobnější diagnostiku, jako jsou události služby Application Insights.You can click through from any component to more detailed diagnostics, such as Application Insights events. Pokud vaše aplikace používá služby Azure, můžete také kliknout prostřednictvím a Diagnostika Azure, jako je SQL Database Advisor doporučení.If your app uses Azure services, you can also click through to Azure diagnostics, such as SQL Database Advisor recommendations.

Co je komponenta?What is a Component?

Součásti jsou umožňují nezávislé nasazení částí aplikace distribuovat/mikroslužeb.Components are independently deployable parts of your distributed/microservices application. Vývojáři provozní týmy a týmy mají viditelnost na úrovni kódu nebo přístup k telemetrii generovanou těmito součásti aplikace.Developers and operations teams have code-level visibility or access to telemetry generated by these application components.

  • Komponenty se liší od "zjištěnou" externí závislosti, jako je SQL, atd centra událostí, které tým nebo organizace nemusí mít přístup k (kód nebo telemetrické údaje).Components are different from "observed" external dependencies such as SQL, EventHub etc. which your team/organization may not have access to (code or telemetry).
  • Komponenty jsou spuštěny na libovolný počet instancí role/server/kontejner.Components run on any number of server/role/container instances.
  • Součástí může být samostatný instrumentačních klíčů Application Insights (i v případě, že předplatná se liší) nebo různé role, generování sestav na jeden Instrumentační klíč Application Insights.Components can be separate Application Insights instrumentation keys (even if subscriptions are different) or different roles reporting to a single Application Insights instrumentation key. Mapování prostředí ve verzi preview se zobrazí komponenty bez ohledu na to, jak jsou nastavené.The preview map experience shows the components regardless of how they are set up.

Mapa kompozitní aplikaceComposite Application Map

Zobrazí se topologie celou aplikaci napříč několika úrovněmi souvisejících aplikací komponenty.You can see the full application topology across multiple levels of related application components. Součástí může být různé prostředky Application Insights nebo různé role v jediném prostředku.Components could be different Application Insights resources, or different roles in a single resource. Mapa aplikace vyhledá součásti podle následujícího volání závislostí protokolu HTTP mezi servery pomocí Application Insights SDK nainstalovat.The app map finds components by following HTTP dependency calls made between servers with the Application Insights SDK installed.

Toto prostředí začíná progresivní zjišťování komponent.This experience starts with progressive discovery of the components. Při prvním načtení mapy aplikace, se aktivuje sadu dotazů ke zjištění součásti související se tuto komponentu.When you first load the application map, a set of queries is triggered to discover the components related to this component. Tlačítko v levém horním se aktualizuje počet součástí v aplikaci při jejich zjištění.A button at the top-left corner will update with the number of components in your application as they are discovered.

Po kliknutí na tlačítko "Součásti mapy aktualizace", mapy aktualizují se všechny součásti zjištěny, dokud, které ukazují.On clicking "Update map components", the map is refreshed with all components discovered until that point. Podle složitosti vaší aplikace může to trvat minutu načíst.Depending on the complexity of your application, this may take a minute to load.

Pokud jsou všechny komponenty rolí v rámci jednoho prostředku Application Insights, pak tento krok zjišťování se nevyžaduje.If all of the components are roles within a single Application Insights resource, then this discovery step is not required. Počáteční načtení pro takové aplikace budou mít všechny jeho součásti.The initial load for such an application will have all its components.

Snímek obrazovky aplikace mapy

Jedním z klíčových cílů s toto prostředí je možné k vizualizaci komplexní topologie spolu se stovkami komponenty.One of the key objectives with this experience is to be able to visualize complex topologies with hundreds of components.

Klikněte na libovolné součásti najdete v článku související přehledy a přejít k výkonu a selhání prostředí pro třídění pro danou součást.Click on any component to see related insights and go to the performance and failure triage experience for that component.

Kontextová nabídka

Prověřit chybyInvestigate failures

Vyberte vyšetřování chyb ke spuštění v podokně selhání.Select investigate failures to launch the failures pane.

Snímek obrazovky prošetřit selhání tlačítko

Snímek obrazovky selhání prostředí

Vyšetřování výkonuInvestigate performance

Chcete-li vyřešit problémy s výkonem, vyberte vyšetřování výkonu.To troubleshoot performance problems, select investigate performance.

Snímek obrazovky zkoumání výkonu tlačítko

Snímek obrazovky výkon

Přejít na podrobnostiGo to details

Vyberte přejděte na podrobnosti prozkoumat prostředí začátku do konce transakce, které může nabídnout zobrazení až na úroveň zásobníku volání.Select go to details to explore the end-to-end transaction experience, which can offer views down to the call stack level.

Snímek obrazovky tlačítko Přejít na podrobnosti

Snímek obrazovky podrobností transakcí začátku do konce

Zobrazit v AnalyticsView in Analytics

Pro dotazování a prozkoumání dalších dat aplikací, klikněte na tlačítko zobrazit v analytics.To query and investigate your applications data further, click view in analytics.

Snímek obrazovky zobrazení v tlačítko analytics

Snímek obrazovky s analytics prostředí

UpozorněníAlerts

Chcete-li zobrazit aktivní výstrahy a základní pravidla, které způsobují upozornění aktivovat, vyberte výstrahy.To view active alerts and the underlying rules that cause the alerts to be triggered, select alerts.

Snímek obrazovky tlačítka pro výstrahy

Snímek obrazovky s analytics prostředí

Sada název cloudové roleSet cloud role name

Mapa aplikace používá název cloudové role vlastnost k identifikaci komponenty na mapě.Application Map uses the cloud role name property to identify the components on the map. Vlastnost názvu role cloud sadu SDK Application Insights automaticky přidá do telemetrických dat, protože ho vygeneroval komponenty.The Application Insights SDK automatically adds the cloud role name property to the telemetry emitted by components. Sada SDK se například přidat název webového serveru nebo název role služby pro vlastnost název cloudové role.For example, the SDK will add a web site name or service role name to the cloud role name property. Existují však případy, kde můžete chtít potlačit výchozí hodnotu.However, there are cases where you may want to override the default value. Název cloudové role přepsat a změňte, co zobrazí na mapě aplikace:To override cloud role name and change what gets displayed on the Application Map:

.NET/.NET Core.NET/.NET Core

Napište vlastní TelemetryInitializer, jak je uvedeno níže.Write custom TelemetryInitializer as below.

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 apps: Inicializátor zatížení pro aktivní TelemetryConfigurationASP.NET apps: Load initializer to the active TelemetryConfiguration

In ApplicationInsights.config :In ApplicationInsights.config :

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

K vytvoření instance inicializátoru v kódu, například v souboru Global.aspx.cs je alternativní metoda pro ASP.NET Web apps:An alternate method for ASP.NET Web apps is to instantiate the initializer in code, for example in Global.aspx.cs:

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

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

Poznámka

Přidáváním inicializátoru pomocí ApplicationInsights.config nebo pomocí TelemetryConfiguration.Active není platný pro aplikace ASP.NET Core.Adding initializer using ApplicationInsights.config or using TelemetryConfiguration.Active is not valid for ASP.NET Core applications.

Aplikace ASP.NET Core: Inicializační výraz zatížení TelemetryConfigurationASP.NET Core apps: Load initializer to the TelemetryConfiguration

Pro ASP.NET Core aplikace, přidání nového TelemetryInitializer se provádí tak, že přidáte do kontejneru injektáž závislostí, jak je znázorněno níže.For ASP.NET Core applications, adding a new TelemetryInitializer is done by adding it to the Dependency Injection container, as shown below. To se provádí v ConfigureServices metodu vaše Startup.cs třídy.This is done in ConfigureServices method of your Startup.cs class.

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

Node.jsNode.js

var appInsights = require("applicationinsights");
appInsights.setup('INSTRUMENTATION_KEY').start();
appInsights.defaultClient.context.tags["ai.cloud.role"] = "your role name";
appInsights.defaultClient.context.tags["ai.cloud.roleInstance"] = "your role instance";

Alternativní metoda pro Node.jsAlternate method for Node.js

var appInsights = require("applicationinsights");
appInsights.setup('INSTRUMENTATION_KEY').start();

appInsights.defaultClient.addTelemetryProcessor(envelope => {
    envelope.tags["ai.cloud.role"] = "your role name";
    envelope.tags["ai.cloud.roleInstance"] = "your role instance"
});

JavaJava

Pokud používáte Spring Boot s Application Insights Spring Boot starter, je pouze požadovaná změna nastavit váš vlastní název aplikace v souboru application.properties souboru.If you use Spring Boot with the Application Insights Spring Boot starter, the only required change is to set your custom name for the application in the application.properties file.

spring.application.name=<name-of-app>

Spring Boot starter automaticky přiřadí název cloudové role zadaná pro vlastnost spring.application.name hodnota.The Spring Boot starter will automatically assign cloud role name to the value you enter for the spring.application.name property.

Další informace o Javě korelace a jak nakonfigurovat roli v cloudových procesech název rezervovat aplikace bez SpringBoot to části na korelace.For further information on Java correlation and how to configure cloud role name for non-SpringBoot applications checkout this section on correlation.

JavaScript a prohlížeči klientůClient/browser-side JavaScript

appInsights.queue.push(() => {
appInsights.context.addTelemetryInitializer((envelope) => {
  envelope.tags["ai.cloud.role"] = "your role name";
  envelope.tags["ai.cloud.roleInstance"] = "your role instance";
});
});

Principy název cloudové role v rámci kontextu Mapa aplikaceUnderstanding cloud role name within the context of the Application Map

Pokud je to jak uvažovat o název cloudové role, může být užitečné podívat se na mapu aplikace, která má více rolí cloud názvů k dispozici:As far as how to think about cloud role name, it can be helpful to look at an Application Map that has multiple cloud role names present:

Snímek obrazovky aplikace mapy

V mapě aplikace nad jednotlivé názvy v zelené polí jsou cloudové hodnoty název role pro různé aspekty této konkrétní distribuované aplikace.In the Application Map above each of the names in green boxes are cloud role name values for different aspects of this particular distributed application. Takže pro tuto aplikaci jeho role se skládají z: Authentication, acmefrontend, Inventory Management, Payment Processing Worker Role.So for this app its roles consist of: Authentication, acmefrontend, Inventory Management, a Payment Processing Worker Role.

V případě této aplikace každý z těchto názvů rolí cloud také představuje jiný jedinečný prostředek Application Insights s vlastními klíči instrumentace.In the case of this app each of those cloud role names also represents a different unique Application Insights resource with their own instrumentation keys. Protože vlastníka této aplikace má přístup ke každé z těchto čtyř nesourodé prostředky Application Insights, mapa aplikace je možné spojit dohromady mapu základní relace.Since the owner of this application has access to each of those four disparate Application Insights resources, Application Map is able to stitch together a map of the underlying relationships.

Pro oficiální definice:For the official definitions:

   [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";

Alternativně instance cloudové role může být užitečné pro scénáře, ve kterém název cloudové role zjistíte problém je chyba někde webového front-endu, ale může být spuštěn webového front-endu napříč více s vyrovnáváním zatížení serverů tak nebudou moct zobrazit podrobnosti ve vrstvě hlubší pomocí dotazů Kusto a vědět, pokud je tento problém vliv na všechny front-endové servery pro/instance webové nebo pouze jedna může být velmi důležité.Alternatively, cloud role instance can be helpful for scenarios where cloud role name tells you the problem is somewhere in your web front-end, but you might be running your web front-end across multiple load-balanced servers so being able to drill in a layer deeper via Kusto queries and knowing if the issue is impacting all web front-end servers/instances or just one can be extremely important.

Scénář, kde můžete chtít přepsat hodnotu pro instanci role cloud může být, pokud vaše aplikace běží v prostředí kontejnerizovaných kde stačí vědět, jednotlivých server nemusí být dostatek informací k vyhledání daného problému.A scenario where you might want to override the value for cloud role instance could be if your app is running in a containerized environment where just knowing the individual server might not be enough information to locate a given issue.

Další informace o tom, jak přepsat vlastnosti název cloudové role s inicializátory telemetrická data, najdete v části přidat vlastnosti: ITelemetryInitializer.For more information about how to override the cloud role name property with telemetry initializers, see Add properties: ITelemetryInitializer.

Řešení potížíTroubleshooting

Pokud máte problémy dostat se mapa aplikace fungovat podle očekávání, proveďte následující kroky:If you're having trouble getting Application Map to work as expected, try these steps:

ObecnéGeneral

  1. Ujistěte se, že používáte oficiálně podporovanou sadu SDK.Make sure you're using an officially supported SDK. Nepodporované nebo komunitní sady SDK nemusí podporovat korelaci.Unsupported/community SDKs might not support correlation.

    Projít tento článku seznam podporovaných sad SDK.Refer to this article for a list of supported SDKs.

  2. Všechny součásti upgradujte na nejnovější verzi sady SDK.Upgrade all components to the latest SDK version.

  3. Pokud používáte Azure Functions s C#, proveďte upgrade na funkce V2.If you're using Azure Functions with C#, upgrade to Functions V2.

  4. Potvrďte název cloudové role je správně nakonfigurovaný.Confirm cloud role name is correctly configured.

  5. Pokud vám chybí závislost, ujistěte se, že je v seznamu automaticky shromažďovaných závislostí.If you're missing a dependency, make sure it's in the list of auto-collected dependencies. Pokud ne, můžete ji stále najít ručně pomocí volání TrackDependency.If not, you can still track it manually with a track dependency call.

Příliš mnoho uzly na mapěToo many nodes on the map

Mapa aplikace vytvoří do uzlu aplikace pro každý jedinečné cloudové název role k dispozici v žádosti o telemetrii a uzel závislosti pro každou jedinečnou kombinaci typu, cíl a název cloudové role v telemetrii závislostí.Application Map constructs an application node for each unique cloud role name present in your request telemetry and a dependency node for each unique combination of type, target, and cloud role name in your dependency telemetry. Pokud existuje víc než 10 000 uzly v telemetrii, mapa aplikace nebude možné načíst všechny uzly a odkazy, takže vaše mapa nebudou úplné.If there are more than 10,000 nodes in your telemetry, Application Map will not be able to fetch all the nodes and links, so your map will be incomplete. Pokud k tomu dojde, zobrazí se zpráva upozornění při zobrazení na mapě.If this happens, a warning message will appear when viewing the map.

Mapa aplikace navíc podporuje jenom až 1 000 samostatné neseskupení uzly vykreslovány najednou.In addition, Application Map only supports up to 1000 separate ungrouped nodes rendered at once. Mapa aplikace pro snížení složitosti visual prostřednictvím seskupování závislosti, které mají stejný typ a volající, ale pokud telemetrických dat má příliš mnoho názvů rolí jedinečná Cloudová nebo příliš mnoho typy závislostí, tuto skupinu, budou mít dostatek a mapy nebude moci vykreslení.Application Map reduces visual complexity by grouping dependencies together that have the same type and callers, but if your telemetry has too many unique cloud role names or too many dependency types, that grouping will be insufficient, and the map will be unable to render.

To pokud chcete napravit, budete muset změnit váš Instrumentační správně nastavit název cloudové role, typ závislosti a závislosti cílového pole.To fix this, you'll need to change your instrumentation to properly set the cloud role name, dependency type, and dependency target fields.

  • Logický název závislost by měla představovat cíle závislosti.Dependency target should represent the logical name of a dependency. V mnoha případech je ekvivalentní k serveru nebo název prostředku závislosti.In many cases, it’s equivalent to the server or resource name of the dependency. Například v případě závislosti protokolu HTTP je nastavený na název hostitele.For example, in the case of HTTP dependencies it is set to the hostname. Neměl by obsahovat jedinečné ID nebo parametry, které se mění z jednoho požadavku na jiný.It should not contain unique IDs or parameters that change from one request to another.

  • Typ závislosti by měla představovat logický typ závislosti.Dependency type should represent the logical type of a dependency. Závislost typické typy jsou například HTTP, SQL nebo objektů Blob v Azure.For example, HTTP, SQL or Azure Blob are typical dependency types. Neměl by obsahovat jedinečné identifikátory.It should not contain unique IDs.

  • Účel název cloudové role je popsán v nad části.The purpose of cloud role name is described in the above section.

Portálu zpětné vazbyPortal feedback

Pokud chcete poskytnout zpětnou vazbu, použijte možnost zpětnou vazbu.To provide feedback, use the feedback option.

Obrázek MapLink 1

Další postupNext steps