Mapa de aplicación: Evaluación de prioridades de las aplicaciones distribuidas

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. Cada nodo del mapa representa un componente de aplicación o sus dependencias, e incluye el KPI de mantenimiento y el estado de alerta. Puede hacer clic a través de cualquier componente para ver un diagnóstico más detallado, como los eventos de Application Insights. 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.

¿Qué es un componente?

Los componentes son partes que se pueden implementar independientemente de su aplicación de microservicios o distribuida. 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.

  • 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).
  • Los componentes se ejecutan en cualquier número de instancias de rol, servidor o contenedor.
  • 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. La experiencia de mapa de versión preliminar muestra los componentes con independencia de cómo están configurados.

Mapa de aplicación compuesta

Puede ver la topología de aplicación completa a lo largo de varios niveles de componentes de aplicación relacionados. Los componentes podrían ser diferentes recursos de Application Insights o distintos roles de un único recurso. Para encontrar componentes, el mapa de aplicación sigue las llamadas de dependencia HTTP entre los servidores con el SDK de Application Insights instalado.

Esta experiencia comienza con la detección progresiva de los componentes. La primera vez que carga el mapa de aplicación, se desencadena un conjunto de consultas para detectar los componentes relacionados con este componente. 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.

Al hacer clic en "Update map components" (Actualizar componentes del mapa), el mapa se actualiza con todos los componentes detectados hasta ese momento. Según la complejidad de la aplicación, esta operación puede tardar un minuto en cargarse.

Si todos los componentes son roles dentro de un único recurso de Application Insights, este paso de detección no es necesario. La carga inicial para este tipo de aplicación tendrá todos sus componentes.

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.

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.

Control flotante

Investigar los errores

Seleccione Investigar los errores para iniciar el panel de errores.

Captura de pantalla del botón Investigar los errores

Captura de pantalla de la experiencia de errores

Investigar el rendimiento

Para solucionar problemas de rendimiento haga clic en Investigar el rendimiento.

Captura de pantalla del botón Investigar el rendimiento

Captura de pantalla de la experiencia de rendimiento

Ir a los detalles

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.

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)

Para consultar e investigar aún más los datos de aplicaciones, haga clic en Ver en Registros (Analytics) .

Captura de pantalla del botón Ver en Analytics

Captura de pantalla de la experiencia de análisis. Gráfico de líneas que resume la duración media de respuesta de una solicitud en las últimas 12 horas.

Alertas

Para ver las alertas activas y las reglas subyacentes que provocan el desencadenamiento de estas, haga clic en Alertas.

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 nube

El mapa de aplicación usa la propiedad nombre de rol en la nube para identificar los componentes en el mapa. Para establecer o reemplazar manualmente el nombre de rol en la nube y cambiar lo que se muestra en el mapa de aplicación:

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.

Escriba un elemento TelemetryInitializer personalizado como el siguiente.

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.

En 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:

 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.

Aplicaciones de ASP.NET Core: cargue el inicializador en el elemento TelemetryConfiguration.

Para aplicaciones de ASP.NET Core, la adición de un nuevo elemento se realiza agregándolo al contenedor de inserción de dependencias, como se muestra a continuación. Esto se hace en el método ConfigureServices de la clase Startup.cs.

 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ón

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:

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. Por lo que, para esta aplicación, sus roles constan de: Authentication, acmefrontend, Inventory Management y 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. 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.

Para las definiciones oficiales:

   [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.

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.

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.

Solución de problemas

Si tiene dificultades para conseguir que el mapa de aplicación funcione según lo esperado, siga estos pasos:

General

  1. Asegúrese de que usa un SDK oficialmente compatible. Es posible que los SDK no compatibles o de la comunidad no admitan la correlación.

    Consulte este artículo para obtener una lista de los SDK compatibles.

  2. Actualice todos los componentes a la versión más reciente del SDK.

  3. Si usa Azure Functions con C#, actualice a Functions V2.

  4. Confirme que el nombre de rol en la nube está configurado correctamente.

  5. Si falta una dependencia, asegúrese de que se encuentra en la lista de dependencias recopiladas automáticamente. De lo contrario, todavía puede realizar su seguimiento de forma manual con una llamada de seguimiento de dependencia.

Hay demasiados nodos en el mapa

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. 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. Si ocurre esto, aparecerá un mensaje de advertencia al visualizar el mapa.

Además, el mapa de aplicación solo admite hasta 1000 nodos sin agrupar independientes representados a la vez. 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.

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.

  • El destino de dependencia debe representar el nombre lógico de una dependencia. En muchos casos, es equivalente al nombre del servidor o del recurso de la dependencia. Por ejemplo, en el caso de las dependencias HTTP se establece en el nombre de host. No debe contener id. exclusivos o parámetros que cambian de una solicitud a otra.

  • El tipo de dependencia debe representar el tipo lógico de una dependencia. Por ejemplo, HTTP, SQL o Azure Blob son tipos de dependencia típicos. No debe contener id. exclusivos.

  • El propósito de nombre de rol en la nube se describe en la sección anterior.

Comentarios del portal

Para proporcionar comentarios, use la opción de comentarios.

Imagen MapLink-1

Pasos siguientes