Mapa de aplicación: Evaluación de prioridades de las aplicaciones distribuidasApplication Map: Triage Distributed Applications

El mapa de aplicación le ayuda a detectar los cuellos de botella en el rendimiento o las zonas activas con error en todos los componentes de la aplicación distribuida.Application Map helps you spot performance bottlenecks or failure hotspots across all components of your distributed application. Cada nodo del mapa representa un componente de aplicación o sus dependencias, e incluye el KPI de mantenimiento y el estado de alerta.Each node on the map represents an application component or its dependencies; and has health KPI and alerts status. Puede hacer clic a través de cualquier componente para ver un diagnóstico más detallado, como los eventos de Application Insights.You can click through from any component to more detailed diagnostics, such as Application Insights events. Si su aplicación usa los servicios de Azure, también puede hacer clic por los diagnósticos de Azure, como las recomendaciones SQL Database Advisor.If your app uses Azure services, you can also click through to Azure diagnostics, such as SQL Database Advisor recommendations.

¿Qué es un componente?What is a Component?

Los componentes son partes que se pueden implementar independientemente de su aplicación de microservicios o distribuida.Components are independently deployable parts of your distributed/microservices application. Los equipos de operaciones y los desarrolladores pueden ver el código o acceder a la telemetría que generan estos componentes de la aplicación.Developers and operations teams have code-level visibility or access to telemetry generated by these application components.

  • Los componentes son diferentes de las dependencias externas "observadas", como SQL, EventHub, etc. a las que su equipo u organización no pueden acceder (código o telemetría).Components are different from "observed" external dependencies such as SQL, EventHub etc. which your team/organization may not have access to (code or telemetry).
  • Los componentes se ejecutan en cualquier número de instancias de rol, servidor o contenedor.Components run on any number of server/role/container instances.
  • Los componentes pueden ser claves de instrumentación de Application Insights independientes (incluso aunque las suscripciones sean diferentes) o diferentes roles que informan a una única clave de instrumentación de 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. La experiencia de mapa de versión preliminar muestra los componentes con independencia de cómo están configurados.The preview map experience shows the components regardless of how they are set up.

Mapa de aplicación compuestaComposite Application Map

Puede ver la topología de aplicación completa a lo largo de varios niveles de componentes de aplicación relacionados.You can see the full application topology across multiple levels of related application components. Los componentes podrían ser diferentes recursos de Application Insights o distintos roles de un único recurso.Components could be different Application Insights resources, or different roles in a single resource. Para encontrar componentes, el mapa de aplicación sigue las llamadas de dependencia HTTP entre los servidores con el SDK de Application Insights instalado.The app map finds components by following HTTP dependency calls made between servers with the Application Insights SDK installed.

Esta experiencia comienza con la detección progresiva de los componentes.This experience starts with progressive discovery of the components. La primera vez que carga el mapa de aplicación, se desencadena un conjunto de consultas para detectar los componentes relacionados con este componente.When you first load the application map, a set of queries is triggered to discover the components related to this component. Un botón en la esquina superior izquierda se actualiza con el número de componentes de la aplicación a medida que se detectan.A button at the top-left corner will update with the number of components in your application as they are discovered.

Al hacer clic en "Update map components" (Actualizar componentes del mapa), el mapa se actualiza con todos los componentes detectados hasta ese momento.On clicking "Update map components", the map is refreshed with all components discovered until that point. Según la complejidad de la aplicación, esta operación puede tardar un minuto en cargarse.Depending on the complexity of your application, this may take a minute to load.

Si todos los componentes son roles dentro de un único recurso de Application Insights, este paso de detección no es necesario.If all of the components are roles within a single Application Insights resource, then this discovery step is not required. La carga inicial para este tipo de aplicación tendrá todos sus componentes.The initial load for such an application will have all its components.

Captura de pantalla que muestra un ejemplo del mapa de aplicación.

Uno de los objetivos principales de la experiencia es poder visualizar topologías complejas con cientos de componentes.One of the key objectives with this experience is to be able to visualize complex topologies with hundreds of components.

Haga clic en cada componente para ver información detallada relacionada e ir a la experiencia de evaluación de prioridades de rendimiento y errores de ese componente.Click on any component to see related insights and go to the performance and failure triage experience for that component.

Control flotante

Investigar los erroresInvestigate failures

Seleccione Investigar los errores para iniciar el panel de errores.Select investigate failures to launch the failures pane.

Captura de pantalla del botón Investigar los errores

Captura de pantalla de la experiencia de errores

Investigar el rendimientoInvestigate performance

Para solucionar problemas de rendimiento haga clic en Investigar el rendimiento.To troubleshoot performance problems, select investigate performance.

Captura de pantalla del botón Investigar el rendimiento

Captura de pantalla de la experiencia de rendimiento

Ir a los detallesGo to details

Haga clic en Ir a los detalles para explorar una experiencia de transacción completa, que puede ofrecer las vistas hasta el nivel de la pila de llamadas.Select go to details to explore the end-to-end transaction experience, which can offer views down to the call stack level.

Captura de pantalla del botón Ir a los detalles

Captura de pantalla de los detalles de una transacción completa

Visualización de Registros (Analytics)View Logs (Analytics)

Para consultar e investigar aún más los datos de aplicaciones, haga clic en Ver en Registros (Analytics) .To query and investigate your applications data further, click view in Logs (Analytics).

Captura de pantalla del botón Ver en Analytics

Captura de pantalla de la experiencia con Analytics.

AlertasAlerts

Para ver las alertas activas y las reglas subyacentes que provocan el desencadenamiento de estas, haga clic en Alertas.To view active alerts and the underlying rules that cause the alerts to be triggered, select alerts.

Captura de pantalla del botón de alertas

Captura de pantalla de la experiencia con Analytics

Establecimiento o reemplazo del nombre del rol en la nubeSet or override cloud role name

El mapa de aplicación usa la propiedad nombre de rol en la nube para identificar los componentes en el mapa.Application Map uses the cloud role name property to identify the components on the map. Para establecer o reemplazar manualmente el nombre de rol en la nube y cambiar lo que se muestra en el mapa de aplicación:To manually set or override cloud role name and change what gets displayed on the Application Map:

Nota

El Agente o SDK de Application Insights agregan de forma automática la propiedad de nombre de rol en la nube a la telemetría emitida por los componentes en un entorno de Azure App Service.The Application Insights SDK or Agent automatically adds the cloud role name property to the telemetry emitted by components in an Azure App Service environment.

Escriba un elemento TelemetryInitializer personalizado como el siguiente.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";
            }
        }
    }
}

Aplicaciones ASP.NET: cargue el inicializador en el elemento TelemetryConfiguration activo.ASP.NET apps: Load initializer to the active TelemetryConfiguration

En ApplicationInsights.config:In ApplicationInsights.config :

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

Un método alternativo para las aplicaciones web de ASP.NET consiste en crear una instancia del inicializador en el código, por ejemplo, en 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

La adición del inicializador mediante ApplicationInsights.config o TelemetryConfiguration.Active no es válida para las aplicaciones de ASP.NET Core.Adding initializer using ApplicationInsights.config or using TelemetryConfiguration.Active is not valid for ASP.NET Core applications.

Aplicaciones de ASP.NET Core: cargue el inicializador en el elemento TelemetryConfiguration.ASP.NET Core apps: Load initializer to the TelemetryConfiguration

Para aplicaciones de ASP.NET Core, la adición de un nuevo elemento TelemetryInitializer se realiza agregándolo al contenedor de inserción de dependencias, como se muestra a continuación.For ASP.NET Core applications, adding a new TelemetryInitializer is done by adding it to the Dependency Injection container, as shown below. Esto se hace en el método ConfigureServices de la clase 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>();
}

Comprensión del nombre de rol en la nube dentro del contexto del mapa de aplicaciónUnderstanding cloud role name within the context of the Application Map

Para comprender el nombre de rol en la nube, puede ser útil consultar un mapa de aplicación que tenga presentes varios nombres de rol en la nube: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:

Captura de pantalla de mapa de aplicación

En el mapa de aplicación de arriba, cada uno de los nombres de los cuadros verdes son valores de nombre de rol en la nube para distintos aspectos de esta aplicación distribuida.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. Por lo que, para esta aplicación, sus roles constan de: Authentication, acmefrontend, Inventory Management y Payment Processing Worker Role.So for this app its roles consist of: Authentication, acmefrontend, Inventory Management, a Payment Processing Worker Role.

En el caso de esta aplicación, cada uno de esos nombres de rol en la nube también representa un único recurso de Application Insights diferente con sus propias claves de instrumentación.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. Puesto que el propietario de esta aplicación tiene acceso a cada uno de estos cuatro recursos de Application Insights, el mapa de aplicación es capaz de unir un mapa de las relaciones subyacentes.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.

Para las definiciones oficiales: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";

Como alternativa, la instancia de rol en la nube puede ser muy útil para escenarios donde el nombre de rol en la nube indica que el problema se encuentra en algún lugar en el front-end web, pero puede que ejecute el front-end web en varios servidores de carga equilibrada, por lo que poder profundizar a un nivel más profundo a través de las consultas de Kusto y saber si el problema afecta a todos los servidores o instancias de front-end web o solo a uno puede ser muy 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.

Un escenario en el que podría querer reemplazar el valor de la instancia de rol en la nube podría ser si la aplicación se ejecutara en un entorno en contenedor donde simplemente conocer el servidor individual no sería suficiente información para localizar un problema determinado.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.

Para obtener más información sobre cómo reemplazar la propiedad de nombre de rol en la nube con inicializadores de telemetría, vea Agregar propiedades: ITelemetryInitializer.For more information about how to override the cloud role name property with telemetry initializers, see Add properties: ITelemetryInitializer.

Solución de problemasTroubleshooting

Si tiene dificultades para conseguir que el mapa de aplicación funcione según lo esperado, siga estos pasos:If you're having trouble getting Application Map to work as expected, try these steps:

GeneralGeneral

  1. Asegúrese de que usa un SDK oficialmente compatible.Make sure you're using an officially supported SDK. Es posible que los SDK no compatibles o de la comunidad no admitan la correlación.Unsupported/community SDKs might not support correlation.

    Consulte este artículo para obtener una lista de los SDK compatibles.Refer to this article for a list of supported SDKs.

  2. Actualice todos los componentes a la versión más reciente del SDK.Upgrade all components to the latest SDK version.

  3. Si usa Azure Functions con C#, actualice a Functions V2.If you're using Azure Functions with C#, upgrade to Functions V2.

  4. Confirme que el nombre de rol en la nube está configurado correctamente.Confirm cloud role name is correctly configured.

  5. Si falta una dependencia, asegúrese de que se encuentra en la lista de dependencias recopiladas automáticamente.If you're missing a dependency, make sure it's in the list of auto-collected dependencies. De lo contrario, todavía puede realizar su seguimiento de forma manual con una llamada de seguimiento de dependencia.If not, you can still track it manually with a track dependency call.

Hay demasiados nodos en el mapaToo many nodes on the map

El mapa de aplicación construye un nodo de aplicación para cada nombre de rol en la nube único presente en la telemetría de solicitud y un nodo de dependencia para cada combinación única de tipo, destino y nombre de rol en la nube en la telemetría de dependencia.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. Si hay más de 10 000 nodos en la telemetría, el mapa de aplicación no podrá capturar todos los nodos y vínculos, por lo que la asignación será 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. Si ocurre esto, aparecerá un mensaje de advertencia al visualizar el mapa.If this happens, a warning message will appear when viewing the map.

Además, el mapa de aplicación solo admite hasta 1000 nodos sin agrupar independientes representados a la vez.In addition, Application Map only supports up to 1000 separate ungrouped nodes rendered at once. El mapa de aplicación reduce la complejidad visual agrupando las dependencias que tengan el mismo tipo y llamadores, pero si la telemetría tiene demasiados nombres de rol en la nube únicos o demasiados tipos de dependencia, esa agrupación será insuficiente y el mapa no se podrá representar.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.

Para solucionar este problema, deberá cambiar la instrumentación para establecer correctamente el nombre de rol en la nube, el tipo de dependencia y los campos de destino de dependencia.To fix this, you'll need to change your instrumentation to properly set the cloud role name, dependency type, and dependency target fields.

  • El destino de dependencia debe representar el nombre lógico de una dependencia.Dependency target should represent the logical name of a dependency. En muchos casos, es equivalente al nombre del servidor o del recurso de la dependencia.In many cases, it's equivalent to the server or resource name of the dependency. Por ejemplo, en el caso de las dependencias HTTP se establece en el nombre de host.For example, in the case of HTTP dependencies it is set to the hostname. No debe contener id. exclusivos o parámetros que cambian de una solicitud a otra.It should not contain unique IDs or parameters that change from one request to another.

  • El tipo de dependencia debe representar el tipo lógico de una dependencia.Dependency type should represent the logical type of a dependency. Por ejemplo, HTTP, SQL o Azure Blob son tipos de dependencia típicos.For example, HTTP, SQL or Azure Blob are typical dependency types. No debe contener id. exclusivos.It should not contain unique IDs.

  • El propósito de nombre de rol en la nube se describe en la sección anterior.The purpose of cloud role name is described in the above section.

Comentarios del portalPortal feedback

Para proporcionar comentarios, use la opción de comentarios.To provide feedback, use the feedback option.

Imagen MapLink-1

Pasos siguientesNext steps