Seguimiento de dependencia en Application Insights

Nota:

La siguiente documentación se basa en la API clásica de Application Insights. El plan a largo plazo de Application Insights consiste en recopilar datos mediante OpenTelemetry. Para más información, consulte Habilitación de Azure Monitor OpenTelemetry para aplicaciones de .NET, Node.js, Python y Java.

Una dependencia es un componente al que la aplicación llama. Suele ser un servicio al que se llama mediante HTTP, una base de datos o un sistema de archivos. Application Insights mide la duración de las llamadas de dependencia, independientemente de si devuelven un error o no, junto con información adicional como el nombre de la dependencia. Puede investigar llamadas de dependencia específicas y relacionarlas a solicitudes y excepciones.

Dependencias con seguimiento automático

Los SDK de Application Insights para .NET y .NET Core se suministran con DependencyTrackingTelemetryModule, un módulo de telemetría que recopila dependencias automáticamente. Esta recopilación de dependencias se habilita automáticamente para aplicaciones de ASP.NET y ASP.NET Core cuando se configura según los documentos oficiales vinculados. El módulo DependencyTrackingTelemetryModule se incluye como el paquete NuGet Microsoft.ApplicationInsights.DependencyCollector. Aparece automáticamente cuando se usa cualquiera de los siguientes paquetes NuGet; Microsoft.ApplicationInsights.Web o Microsoft.ApplicationInsights.AspNetCore.

Actualmente, DependencyTrackingTelemetryModule hace un seguimiento automático de las siguientes dependencias:

Dependencias Detalles
HTTP/HTTPS Llamadas HTTP/HTTPS locales o remotas.
Llamadas WCF Solo hace un seguimiento automáticamente si se usan enlaces basados en HTTP.
SQL Llamadas realizadas con SqlClient. Consulte la sección Seguimiento avanzado de SQL para obtener una consulta SQL completa para capturar consultas SQL.
Azure Blob Storage, Table Storage o Queue Storage Llamadas realizadas con el cliente de Azure Storage.
SDK cliente de Azure Event Hubs Use el paquete más reciente: https://nuget.org/packages/Azure.Messaging.EventHubs.
SDK cliente de Azure Service Bus Use el paquete más reciente: https://nuget.org/packages/Azure.Messaging.ServiceBus.
Azure Cosmos DB Se realiza un seguimiento automático si se usa HTTP/HTTPS. El seguimiento de las operaciones en modo directo con TCP también se capturará automáticamente mediante el paquete de versión preliminar >= 3.33.0-preview. Para obtener más información, visite la documentación.

Si falta una dependencia o está usando un SDK diferente, asegúrese de que se encuentra en la lista de dependencias recopiladas automáticamente. Si la dependencia no se recopila automáticamente, puede hacer un seguimiento manual con una llamada a TrackDependency .

Configuración de seguimiento automático de dependencias en aplicaciones de consola

Para hacer un seguimiento automático de las dependencias de aplicaciones de consola de .NET, instale el paquete NuGet Microsoft.ApplicationInsights.DependencyCollector e inicialice DependencyTrackingTelemetryModule:

    DependencyTrackingTelemetryModule depModule = new DependencyTrackingTelemetryModule();
    depModule.Initialize(TelemetryConfiguration.Active);

En el caso de las aplicaciones de consola de .NET Core, TelemetryConfiguration.Active se ha quedado obsoleto. Consulte las instrucciones de la documentación del servicio de trabajo y la documentación de supervisión de ASP.NET Core.

Funcionamiento de la supervisión automática de dependencias

Las dependencias se recopilan automáticamente mediante una de las siguientes técnicas:

  • Se usa instrumentación del código de byte alrededor de determinados métodos. Use InstrumentationEngine desde StatusMonitor o una extensión de Azure App Service Web Apps.
  • Devoluciones de llamada EventSource.
  • Devoluciones de llamada DiagnosticSource en los SDK de .NET o .NET Core más recientes.

Seguimiento manual las dependencias

Los siguientes son ejemplos de las dependencias que no se recopilan automáticamente y requieren seguimiento manual:

  • Azure Cosmos DB se rastrea automáticamente solo si se usa HTTP/HTTPS. Application Insights no capturará automáticamente el modo TCP para las versiones del SDK anteriores a 2.22.0-Beta1.
  • Redis

Para las dependencias que el SDK no recopila automáticamente, puede realizar un seguimiento manual mediante la API de TrackDependency que utilizan los módulos de recolección automática estándar.

Ejemplo

Si compila el código con un ensamblado que no escribió usted mismo, podría cronometrar todas las llamadas al ensamblado. Este escenario le permitiría averiguar qué contribución hace a los tiempos de respuesta.

Para que estos datos se muestren en los gráficos de dependencia en Application Insights, envíelos mediante TrackDependency:


    var startTime = DateTime.UtcNow;
    var timer = System.Diagnostics.Stopwatch.StartNew();
    try
    {
        // making dependency call
        success = dependency.Call();
    }
    finally
    {
        timer.Stop();
        telemetryClient.TrackDependency("myDependencyType", "myDependencyCall", "myDependencyData",  startTime, timer.Elapsed, success);
    }

Como alternativa, TelemetryClient proporciona los métodos de extensión StartOperation y StopOperation que pueden usarse para realizar un seguimiento manual de las dependencias, tal como se muestra en Seguimiento de dependencias de salida.

Si desea desactivar el módulo de seguimiento de dependencia estándar, quite la referencia a DependencyTrackingTelemetryModule en ApplicationInsights.config para las aplicaciones de ASP.NET. Para aplicaciones de ASP.NET Core, siga las instrucciones en Application Insights para aplicaciones de ASP.NET Core.

Seguimiento de llamadas AJAX desde páginas web

Para las páginas web, el SDK de JavaScript de Application Insights recopila automáticamente las llamadas AJAX como dependencias.

Seguimiento de SQL avanzado para obtener la consulta SQL completa

Nota

Azure Functions requiere una configuración independiente para habilitar la recopilación de texto de SQL. Para obtener más información, consulte Habilitación de la recopilación de consultas SQL.

Para las llamadas SQL, el nombre del servidor y la base de datos siempre se recopilan y almacenan como el nombre de la DependencyTelemetry recopilada. Otro campo denominado datos, puede contener el texto completo de la consulta SQL.

En el caso de aplicaciones de ASP.NET Core, ahora es necesario participar en la recopilación de texto SQL mediante:

services.ConfigureTelemetryModule<DependencyTrackingTelemetryModule>((module, o) => { module. EnableSqlCommandTextInstrumentation = true; });

En el caso de las aplicaciones de ASP.NET, se recopila texto de la consulta SQL completa con la ayuda de la instrumentación de código de bytes, que requiere el uso del motor de instrumentación o puede realizarse mediante el paquete NuGet Microsoft.Data.SqlClient, en lugar de la biblioteca System.Data.SqlClient. En la siguiente tabla, se describen los pasos específicos de la plataforma para habilitar la recopilación completa de consultas SQL.

Plataforma Pasos necesarios para obtener la consulta SQL completa
Web Apps en Azure App Service En el panel de control de la aplicación web, abra el panel de Application Insights y habilite los comandos SQL de .NET.
Servidor IIS (Azure Virtual Machines, local, etc.) Use el paquete de NuGet Microsoft.Data.SqlClient o use el módulo de PowerShell del agente de Application Insights para instalar el motor de instrumentación y reiniciar IIS.
Azure Cloud Services Agregue una tarea de inicio para instalar StatusMonitor.
La aplicación se debe incorporar al SDK de ApplicationInsights en tiempo de compilación mediante la instalación de paquetes NuGet para las aplicaciones de ASP.NET o ASP.NET Core.
IIS Express Use el paquete NuGet Microsoft.Data.SqlClient.
WebJobs en Azure App Service Use el paquete NuGet Microsoft.Data.SqlClient.

Además de los pasos específicos de la plataforma anteriores, también debe optar explícitamente por habilitar la colección de comandos SQL al modificar el archivo applicationInsights.config con el código siguiente:

<TelemetryModules>
  <Add Type="Microsoft.ApplicationInsights.DependencyCollector.DependencyTrackingTelemetryModule, Microsoft.AI.DependencyCollector">
    <EnableSqlCommandTextInstrumentation>true</EnableSqlCommandTextInstrumentation>
  </Add>

En los casos anteriores, la forma correcta de validar que el motor de instrumentación está instalado correctamente es comprobar que la versión de SDK de la DependencyTelemetry recopilada sea rddp. EL uso de rdddsd o rddf indica que las dependencias se recogen a través de las devoluciones de llamada de DiagnosticSource o EventSource, por lo que no se capturará la consulta SQL completa.

Dónde encontrar los datos de dependencia

  • Asignación de aplicación visualiza las dependencias entre la aplicación y los componentes colindantes.
  • Diagnósticos de transacción muestra los datos de servidor unificados correlacionados.
  • La pestaña Exploradores muestra las llamadas AJAX de los exploradores de los usuarios.
  • Seleccione las solicitudes lentas o con errores para comprobar sus llamadas de dependencia.
  • Análisis puede utilizarse para consultar los datos de dependencia.

Diagnóstico de solicitudes lentas

Cada evento de solicitud está asociado a las llamadas de dependencia, las excepciones y otros eventos de los que se realiza un seguimiento mientras se procesa la solicitud. Por lo tanto, si algunas solicitudes no tienen un buen rendimiento, puede averiguar si se debe a respuestas lentas de una dependencia.

Seguimiento de solicitudes en dependencias

Seleccione la pestaña Rendimiento de la izquierda y la pestaña Dependencias en la parte superior.

Seleccione un nombre de dependencia de la sección General. Después de seleccionar una dependencia, a la derecha aparecerá un gráfico con la distribución de duraciones de esa dependencia.

Screenshot that shows the Dependencies tab open to select a Dependency Name in the chart.

Seleccione el botón Ejemplos en la parte inferior derecha. A continuación, haga clic en un ejemplo para ver los detalles de transacción de un extremo a otro.

Screenshot that shows selecting a sample to see the end-to-end transaction details.

Generación de un perfil del sitio activo

El generador de perfiles de Application Insights realiza un seguimiento de las llamadas HTTP a los sitios activos y muestra qué funciones del código tardan más tiempo en ejecutarse.

Error en las solicitudes

Las solicitudes con error también podrían estar asociadas a llamadas a dependencias con errores.

Seleccione la pestaña Errores a la izquierda y, a continuación, la pestaña Dependencias en la parte superior.

Screenshot that shows selecting the failed requests chart.

Aquí verá el recuento de dependencias con errores. Para obtener más información sobre una repetición errónea, seleccione un nombre de dependencia en la tabla inferior. Seleccione el botón Dependencias situado en la parte inferior derecha para ver los detalles de transacción de un extremo a otro.

Registros (Analytics)

Puede realizar un seguimiento de las dependencias en el lenguaje de consulta de Kusto. Estos son algunos ejemplos.

  • Búsqueda de llamadas de dependencia con errores:

    
        dependencies | where success != "True" | take 10
    
  • Búsqueda de llamadas AJAX:

    
        dependencies | where client_Type == "Browser" | take 10
    
  • Búsqueda de llamadas de dependencia asociadas a solicitudes:

    
        dependencies
        | where timestamp > ago(1d) and  client_Type != "Browser"
        | join (requests | where timestamp > ago(1d))
          on operation_Id  
    
  • Búsqueda de llamadas AJAX asociadas a vistas de página:

    
        dependencies
        | where timestamp > ago(1d) and  client_Type == "Browser"
        | join (browserTimings | where timestamp > ago(1d))
          on operation_Id
    

Preguntas más frecuentes

Esta sección proporciona respuestas a preguntas comunes.

¿Qué método usa el recopilador de dependencias para informar sobre las llamadas con error a las dependencias?

Las llamadas de dependencia con error tendrán el campo success establecido en False. El módulo DependencyTrackingTelemetryModule no notifica ExceptionTelemetry. El modelo de datos completo para la dependencia se describe en Modelo de datos de telemetría de Application Insights.

¿Cómo calculo la latencia de ingesta para mi telemetría de dependencia?

Use este código:

dependencies
| extend E2EIngestionLatency = ingestion_time() - timestamp 
| extend TimeIngested = ingestion_time()

Cómo determino la hora en la que se inició la llamada de dependencia?

En la vista de consulta de Log Analytics, timestamp representa el momento en que se inició la llamada a TrackDependency(), que se produjo inmediatamente después de recibir la respuesta de la llamada de dependencia. Para calcular la hora de inicio de la llamada de dependencia, debería tomar timestamp y restarle el valor de duration registrado para la llamada de dependencia.

¿Incluye el seguimiento de dependencias en Application Insights los cuerpos de respuesta de registro?

El seguimiento de dependencias en Application Insights no incluye cuerpos de respuesta de registro, ya que generaría demasiada telemetría para la mayoría de las aplicaciones.

SDK de código abierto

Como todos los SDK de Application Insights, el módulo de recolección de dependencias también es de código abierto. Puede leer y contribuir al código o notificar sobre problemas en el repositorio oficial de GitHub.

Recopilación automática de dependencias

A continuación encontrará la lista de las llamadas de dependencia admitida actualmente que se detectan automáticamente como dependencias sin requerir ninguna modificación adicional en el código de la aplicación. Estas dependencias se visualizan en el Mapa de aplicación de Application Insights y las vistas de Diagnóstico de transacciones. Si la dependencia no se encuentra en la siguiente lista, todavía puede realizar un seguimiento manual con una llamada a TrackDependency .

.NET

Marcos de trabajo de aplicaciones Versiones
WebForms de ASP.NET 4.5+
ASP.NET MVC 4+
WebAPI de ASP.NET 4.5+
ASP.NET Core 1.1+
Bibliotecas de comunicaciones
HttpClient 4.5+, .NET Core 1.1+
SqlClient .NET Core 1.0+, NuGet 4.3.0
Microsoft.Data.SqlClient 1.1.0: versión estable más reciente. (Consulte la siguiente nota).
SDK de cliente de Event Hubs 1.1.0
SDK de cliente de Service Bus 7.0.0
Clientes de Storage
ADO.NET 4.5+

Nota:

Hay un problema conocido con versiones anteriores de Microsoft.Data.SqlClient. Se recomienda usar la versión 1.1.0 o posterior para mitigar este problema. Entity Framework Core no necesariamente se distribuye con la versión estable más reciente de Microsoft.Data.SqlClient, por lo que se recomienda confirmar que está usando al menos la versión 1.1.0 para evitar este problema.

Java

Consulte la lista de dependencias recopiladas automáticamente de Java para Application Insights.

Node.js

Una lista de los módulos compatible más recientes se mantiene aquí.

JavaScript

Bibliotecas de comunicaciones Versiones
XMLHttpRequest All

Pasos siguientes