Mappa delle applicazioni: valutare le applicazioni distribuiteApplication Map: Triage Distributed Applications

La mappa delle applicazioni consente di individuare i colli di bottiglia delle prestazioni o le aree sensibili agli errori in tutti i componenti dell'applicazione distribuita.Application Map helps you spot performance bottlenecks or failure hotspots across all components of your distributed application. Ogni nodo nella mappa rappresenta un componente dell'applicazione o le relative dipendenze e ha un indicatore KPI dell'integrità e uno stato degli avvisi.Each node on the map represents an application component or its dependencies; and has health KPI and alerts status. È possibile fare clic da qualsiasi componente per ottenere una diagnostica più dettagliata, ad esempio sugli eventi di Application Insights.You can click through from any component to more detailed diagnostics, such as Application Insights events. Se l'app usa i servizi di Azure, è possibile anche fare clic sulla diagnostica di Azure, ad esempio per consigli di Advisor su database SQL.If your app uses Azure services, you can also click through to Azure diagnostics, such as SQL Database Advisor recommendations.

Cos'è un componente?What is a Component?

I componenti sono parti dell'applicazione distribuita o di microservizi, distribuibili autonomamente.Components are independently deployable parts of your distributed/microservices application. Gli sviluppatori e i team delle operazioni hanno visibilità o accesso a livello di codice ai dati di telemetria generati dai componenti di queste applicazioni.Developers and operations teams have code-level visibility or access to telemetry generated by these application components.

  • I componenti sono diversi dalle dipendenze esterne "osservate" quali SQL, EventHub e così via, a cui il team o l'organizzazione potrebbero non avere accesso (codice o dati di telemetria).Components are different from "observed" external dependencies such as SQL, EventHub etc. which your team/organization may not have access to (code or telemetry).
  • I componenti vengono eseguiti su diverse istanze di ruolo, server o contenitore.Components run on any number of server/role/container instances.
  • I componenti possono essere chiavi di strumentazione di Application Insights diverse tra loro (anche in caso di sottoscrizioni diverse) oppure ruoli diversi che creano report per una sola chiave di strumentazione di 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. L'esperienza della mappa di anteprima mostra i componenti indipendentemente dalla loro configurazione.The preview map experience shows the components regardless of how they are set up.

Mappa delle applicazioni compositeComposite Application Map

È possibile visualizzare la topologia completa dell'applicazione con più livelli di componenti dell'applicazione correlati.You can see the full application topology across multiple levels of related application components. I componenti possono essere risorse di Application Insights diverse o ruoli diversi in una singola risorsa.Components could be different Application Insights resources, or different roles in a single resource. La mappa delle app consente di trovare i componenti seguendo le chiamate di dipendenza HTTP inviate tra i server con Application Insights SDK installato.The app map finds components by following HTTP dependency calls made between servers with the Application Insights SDK installed.

Questa esperienza inizia con la progressiva individuazione dei componenti.This experience starts with progressive discovery of the components. Quando si carica la mappa delle applicazioni per la prima volta, viene attivato un set di query per individuare i componenti correlati a questo componente.When you first load the application map, a set of queries is triggered to discover the components related to this component. Un pulsante nell'angolo superiore sinistro viene aggiornato con il numero di componenti dell'applicazione individuati.A button at the top-left corner will update with the number of components in your application as they are discovered.

Quando si fa clic sul pulsante per aggiornare i componenti della mappa, la mappa viene aggiornata con tutti i componenti individuati fino a quel momento.On clicking "Update map components", the map is refreshed with all components discovered until that point. A seconda della complessità dell'applicazione, l'operazione potrebbe richiedere un minuto per il caricamento.Depending on the complexity of your application, this may take a minute to load.

Se tutti i componenti sono ruoli all'interno di una singola risorsa di Application Insights, questo passaggio di individuazione non è necessario.If all of the components are roles within a single Application Insights resource, then this discovery step is not required. Il caricamento iniziale per tale applicazione includerà tutti i relativi componenti.The initial load for such an application will have all its components.

Screenshot della mappa delle applicazioni

Uno dei principali obiettivi di questa esperienza è quello di consentire di visualizzare le topologie complesse con centinaia di componenti.One of the key objectives with this experience is to be able to visualize complex topologies with hundreds of components.

Fare clic su qualsiasi componente per visualizzare le informazioni dettagliate correlate e passare all'esperienza di valutazione delle prestazioni e degli errori per il componente.Click on any component to see related insights and go to the performance and failure triage experience for that component.

Riquadro a comparsa

Esaminare gli erroriInvestigate failures

Selezionare Esamina errori per aprire il riquadro Errori.Select investigate failures to launch the failures pane.

Screenshot del pulsante Esamina errori

Screenshot dell'esperienza Errori

Esaminare le prestazioniInvestigate performance

Per risolvere i problemi relativi alle prestazioni, selezionare Esamina prestazioni.To troubleshoot performance problems, select investigate performance.

Screenshot del pulsante Esamina prestazioni

Screenshot dell'esperienza Prestazioni

Vai ai dettagliGo to details

Selezionare Vai a dettagli per esplorare l'esperienza di transazione end-to-end, che può offrire visualizzazioni fino al livello dello stack di chiamate.Select go to details to explore the end-to-end transaction experience, which can offer views down to the call stack level.

Screenshot del pulsante Vai ai dettagli

Screenshot dei dettagli delle transazioni end-to-end

Visualizza in AnalisiView in Analytics

Per eseguire query ed esaminare ulteriormente i dati delle applicazioni, fare clic su Visualizza in Analisi.To query and investigate your applications data further, click view in analytics.

Screenshot del pulsante Visualizza in Analisi

Screenshot dell'esperienza di analisi

AvvisiAlerts

Per visualizzare gli avvisi attivi e le regole sottostanti che attivano gli avvisi, selezionare Avvisi.To view active alerts and the underlying rules that cause the alerts to be triggered, select alerts.

Screenshot del pulsante Avvisi

Screenshot dell'esperienza di analisi

Imposta il nome del ruolo CloudSet cloud role name

La mappa delle applicazioni usa la proprietà nome ruolo Cloud per identificare i componenti sulla mappa.Application Map uses the cloud role name property to identify the components on the map. Application Insights SDK aggiunge automaticamente la proprietà nome ruolo Cloud ai dati di telemetria emessi dai componenti.The Application Insights SDK automatically adds the cloud role name property to the telemetry emitted by components. Ad esempio, l'SDK aggiungerà un nome del sito Web o un nome del ruolo del servizio alla proprietà del nome del ruolo cloud.For example, the SDK will add a web site name or service role name to the cloud role name property. Tuttavia, vi sono casi in cui si desidera eseguire l'override del valore predefinito.However, there are cases where you may want to override the default value. Per eseguire l'override del nome del ruolo Cloud e modificare le informazioni visualizzate nella mappa delle applicazioni:To override cloud role name and change what gets displayed on the Application Map:

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

Scrivere personalizzata telemetryinitializer personalizzati come indicato di seguito.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";
            }
        }
    }
}

App ASP.NET: caricamento dell'inizializzatore nel TelemetryConfiguration attivoASP.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>

Un metodo alternativo per le app Web ASP.NET è creare un'istanza dell'inizializzatore nel codice, ad esempio in Global.aspx.cs: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());
    }

Nota

L'aggiunta di un inizializzatore utilizzando ApplicationInsights.config o l'utilizzo di TelemetryConfiguration.Active non è valida per ASP.NET Core applicazioni.Adding initializer using ApplicationInsights.config or using TelemetryConfiguration.Active is not valid for ASP.NET Core applications.

App ASP.NET Core: caricamento dell'inizializzatore in TelemetryConfigurationASP.NET Core apps: Load initializer to the TelemetryConfiguration

Per ASP.NET Core applicazioni, l'aggiunta di una nuova TelemetryInitializer viene eseguita aggiungendola al contenitore di inserimento delle dipendenze, come illustrato di seguito.For ASP.NET Core applications, adding a new TelemetryInitializer is done by adding it to the Dependency Injection container, as shown below. Questa operazione viene eseguita nel metodo ConfigureServices della classe Startup.cs.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";

Metodo alternativo per 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

A partire da Application Insights Java SDK 2.5.0, è possibile specificare il nome del ruolo Cloud aggiungendo <RoleName> al file ApplicationInsights.xml, ad esempioStarting with Application Insights Java SDK 2.5.0, you can specify the cloud role name by adding <RoleName> to your ApplicationInsights.xml file, e.g.

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings" schemaVersion="2014-05-30">
   <InstrumentationKey>** Your instrumentation key **</InstrumentationKey>
   <RoleName>** Your role name **</RoleName>
   ...
</ApplicationInsights>

Se si usa Spring Boot con l'utilità di avvio Spring Boot di Application Insights, l'unica modifica necessaria consiste nell'impostare il nome personalizzato per l'applicazione nel file application.properties.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>

L'Starter Spring boot assegna automaticamente il nome del ruolo cloud al valore immesso per la proprietà spring.application.name.The Spring Boot starter will automatically assign cloud role name to the value you enter for the spring.application.name property.

JavaScript lato client/browserClient/browser-side JavaScript

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

Informazioni sul nome del ruolo Cloud nel contesto della mappa delle applicazioniUnderstanding cloud role name within the context of the Application Map

Per quanto concerne il nome del ruolo Cloud, può essere utile esaminare una mappa delle applicazioni con più nomi di ruolo Cloud presenti: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:

Screenshot della mappa delle applicazioni

Nella mappa delle applicazioni sopra ognuno dei nomi in caselle verdi sono presenti i valori del nome del ruolo Cloud per diversi aspetti di questa particolare applicazione distribuita.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. Per questa app, quindi, i ruoli sono costituiti da: 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.

Nel caso di questa app, ognuno di questi nomi di ruolo cloud rappresenta anche una risorsa Application Insights univoca diversa con le rispettive chiavi di strumentazione.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. Poiché il proprietario di questa applicazione ha accesso a ognuna di queste quattro risorse Application Insights diversi, la mappa delle applicazioni è in grado di unire una mappa delle relazioni sottostanti.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.

Per le definizioni ufficiali: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";

In alternativa, l' istanza del ruolo Cloud può essere utile per gli scenari in cui il nome del ruolo Cloud indica che il problema si trova nel front-end Web, ma è possibile che sia in esecuzione il front-end Web tra più server con carico bilanciato, in modo che sia possibile eseguire il drill-down di un livello più approfondito tramite le query kusto e sapere se il problema ha effetto su tutte le istanze o i server front-end Web oppure solo uno può essere estremamente importante.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.

Uno scenario in cui potrebbe essere necessario eseguire l'override del valore per l'istanza del ruolo cloud potrebbe essere se l'app è in esecuzione in un ambiente contenitore in cui semplicemente la conoscenza del singolo server potrebbe non essere sufficiente per individuare un determinato problema.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.

Per altre informazioni su come eseguire l'override della proprietà del nome del ruolo cloud con gli inizializzatori di telemetria, vedere aggiungere proprietà: ITelemetryInitializer.For more information about how to override the cloud role name property with telemetry initializers, see Add properties: ITelemetryInitializer.

Risoluzione dei problemiTroubleshooting

Se si verificano problemi nel far funzionare come previsto la mappa delle applicazioni, provare questa procedura:If you're having trouble getting Application Map to work as expected, try these steps:

GeneraleGeneral

  1. Assicurarsi di usare un SDK supportato ufficialmente.Make sure you're using an officially supported SDK. Gli SDK non supportati/community potrebbero non supportare la correlazione.Unsupported/community SDKs might not support correlation.

    Fare riferimento a questo articolo per un elenco degli SDK supportati.Refer to this article for a list of supported SDKs.

  2. Aggiornare tutti i componenti alla versione più recente dell'SDK.Upgrade all components to the latest SDK version.

  3. Se si usa Funzioni di Azure con C#, eseguire l'aggiornamento a Funzioni V2.If you're using Azure Functions with C#, upgrade to Functions V2.

  4. Verificare che il nome del ruolo Cloud sia configurato correttamente.Confirm cloud role name is correctly configured.

  5. Se non si presenta una dipendenza, assicurarsi che sia nell'elenco delle dipendenze raccolte automaticamente.If you're missing a dependency, make sure it's in the list of auto-collected dependencies. Se non lo è, si può comunque tenere traccia di essa manualmente con una chiamata per tenere traccia delle dipendenze.If not, you can still track it manually with a track dependency call.

Troppi nodi sulla mappaToo many nodes on the map

La mappa delle applicazioni costruisce un nodo applicazione per ogni nome di ruolo Cloud univoco presente nei dati di telemetria delle richieste e un nodo di dipendenza per ogni combinazione univoca di tipo, destinazione e nome del ruolo Cloud nei dati di telemetria delle dipendenze.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. Se nei dati di telemetria sono presenti più di 10.000 nodi, la mappa delle applicazioni non sarà in grado di recuperare tutti i nodi e i collegamenti, quindi la mappa sarà incompleta.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. In tal caso, durante la visualizzazione della mappa verrà visualizzato un messaggio di avviso.If this happens, a warning message will appear when viewing the map.

Inoltre, la mappa delle applicazioni supporta solo fino a 1000 nodi separati non raggruppati sottoposti a rendering in una sola volta.In addition, Application Map only supports up to 1000 separate ungrouped nodes rendered at once. La mappa delle applicazioni riduce la complessità visiva raggruppando le dipendenze che hanno lo stesso tipo e chiamanti, ma se i dati di telemetria hanno troppi nomi di ruolo Cloud univoci o troppi tipi di dipendenza, il raggruppamento non sarà sufficiente e la mappa non sarà in grado di rendering.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.

Per risolvere questo problema, è necessario modificare la strumentazione per impostare correttamente il nome del ruolo Cloud, il tipo di dipendenza e i campi della destinazione di dipendenza.To fix this, you'll need to change your instrumentation to properly set the cloud role name, dependency type, and dependency target fields.

  • La destinazione di dipendenza deve rappresentare il nome logico di una dipendenza.Dependency target should represent the logical name of a dependency. In molti casi è equivalente al nome del server o della risorsa della dipendenza.In many cases, it’s equivalent to the server or resource name of the dependency. Ad esempio, nel caso di dipendenze HTTP viene impostato sul nome host.For example, in the case of HTTP dependencies it is set to the hostname. Non deve contenere ID o parametri univoci che cambiano da una richiesta a un'altra.It should not contain unique IDs or parameters that change from one request to another.

  • Il tipo di dipendenza deve rappresentare il tipo logico di una dipendenza.Dependency type should represent the logical type of a dependency. Ad esempio, HTTP, SQL o BLOB di Azure sono tipi di dipendenza tipici.For example, HTTP, SQL or Azure Blob are typical dependency types. Non deve contenere ID univoci.It should not contain unique IDs.

  • Lo scopo del nome del ruolo Cloud è descritto nella sezione precedente.The purpose of cloud role name is described in the above section.

Commenti e suggerimenti del portalePortal feedback

Per inviare commenti e suggerimenti, usare l'apposita opzione del feedback.To provide feedback, use the feedback option.

Immagine MapLink-1

Passaggi successiviNext steps