Seguimiento de dependencias en Azure Application InsightsDependency Tracking in Azure Application Insights

Una dependencia es un componente al que la aplicación llama.A dependency is a component that is called by your application. Suele ser un servicio al que se llama mediante HTTP, una base de datos o un sistema de archivos.It's typically a service called using HTTP, or a database, or a file system. 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 y más.Application Insights measures the duration of dependency calls, whether its failing or not, along with additional information like name of dependency and so on. Puede investigar llamadas de dependencia específicas y relacionarlas a solicitudes y excepciones.You can investigate specific dependency calls, and correlate them to requests and exceptions.

Dependencias con seguimiento automáticoAutomatically tracked dependencies

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.Application Insights SDKs for .NET and .NET Core ships with DependencyTrackingTelemetryModule, which is a Telemetry Module that automatically collects dependencies. Esta recolección de dependencias se habilita automáticamente para las aplicaciones de ASP.NET y ASP.NET Core cuando se configuran según la documentación oficial vinculada. DependencyTrackingTelemetryModule se distribuye como este paquete NuGet y se incluye automáticamente cuando usa cualquiera de los paquetes NuGet Microsoft.ApplicationInsights.Web o Microsoft.ApplicationInsights.AspNetCore.This dependency collection is enabled automatically for ASP.NET and ASP.NET Core applications, when configured as per the linked official docs. DependencyTrackingTelemetryModule is shipped as this NuGet package, and is brought automatically when using either of the NuGet packages Microsoft.ApplicationInsights.Web or Microsoft.ApplicationInsights.AspNetCore.

DependencyTrackingTelemetryModule actualmente realiza un seguimiento automático de las siguientes dependencias:DependencyTrackingTelemetryModule currently tracks the following dependencies automatically:

DependenciasDependencies DetallesDetails
HTTP/HTTPSHttp/Https Llamadas HTTP/HTTPS locales o remotasLocal or Remote http/https calls
Llamadas WCFWCF calls Solo realiza un seguimiento automáticamente si se usan enlaces basados en HTTP.Only tracked automatically if Http-based bindings are used.
SQLSQL Llamadas realizadas con SqlClient.Calls made with SqlClient. Consulte esta sección para capturar consultas SQL.See this for capturing SQL query.
Azure Storage (blobs, tablas, colas)Azure storage (Blob, Table, Queue ) Llamadas realizadas con el cliente de Azure Storage.Calls made with Azure Storage Client.
SDK de cliente de EventHubEventHub Client SDK Versión 1.1.0 y posteriores.Version 1.1.0 and above.
SDK de cliente de Service BusServiceBus Client SDK Versión 3.0.0 y posteriores.Version 3.0.0 and above.
Azure Cosmos DBAzure Cosmos DB Se realiza un seguimiento automático solo si se usa HTTP/HTTPS.Only tracked automatically if HTTP/HTTPS is used. Application Insights no capturará el modo TCP.TCP mode won't be captured by Application Insights.

Si falta una dependencia o está usando un SDK diferente, asegúrese de que se encuentra en la lista de dependencias recopiladas automáticamente.If you're missing a dependency, or using a different SDK make sure it's in the list of auto-collected dependencies. Si la dependencia no se recopila automáticamente, todavía puede realizar un seguimiento manual con una llamada a TrackDependency .If the dependency isn't auto-collected, you can still track it manually with a track dependency call.

Configuración de seguimiento automático de dependencias en aplicaciones de consolaSetup automatic dependency tracking in Console Apps

Para hacer un seguimiento automático de las dependencias de aplicaciones de consola de .NET, instale el paquete de NuGet Microsoft.ApplicationInsights.DependencyCollector e inicialice DependencyTrackingTelemetryModule como se indica a continuación:To automatically track dependencies from .NET console apps, install the NuGet package Microsoft.ApplicationInsights.DependencyCollector, and initialize DependencyTrackingTelemetryModule as follows:

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

En el caso de las aplicaciones de consola de .NET Core TelemetryConfiguration.Active está obsoleto.For .NET Core console apps TelemetryConfiguration.Active is obsolete. Consulte las instrucciones de la documentación del servicio de trabajo y la documentación de supervisión de ASP.NET CoreRefer to the guidance in the worker service documentation and the ASP.NET Core monitoring documentation

Funcionamiento de la supervisión automática de dependenciasHow automatic dependency monitoring works?

Las dependencias se recopilan automáticamente mediante una de las siguientes técnicas:Dependencies are automatically collected by using one of the following techniques:

  • Se usa instrumentación del código de byte alrededor de determinados métodos.Using byte code instrumentation around select methods. (InstrumentationEngine de StatusMonitor o de la extensión de aplicación web de Azure)(InstrumentationEngine either from StatusMonitor or Azure Web App Extension)
  • Devoluciones de llamada de EventSourceEventSource callbacks
  • Devoluciones de llamada de DiagnosticSource (en los últimos SDK de .NET/.NET Core)DiagnosticSource callbacks (in the latest .NET/.NET Core SDKs)

Seguimiento manual las dependenciasManually tracking dependencies

Los siguientes son algunos ejemplos de las dependencias que no se recopilan automáticamente y, por lo tanto, requieren seguimiento manual.The following are some examples of dependencies, which aren't automatically collected, and hence require manual tracking.

  • Azure Cosmos DB se rastrea automáticamente solo si se usa HTTP/HTTPS.Azure Cosmos DB is tracked automatically only if HTTP/HTTPS is used. Application Insights no capturará el modo TCP.TCP mode won't be captured by Application Insights.
  • RedisRedis

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.For those dependencies not automatically collected by SDK, you can track them manually using the TrackDependency API that is used by the standard auto collection modules.

Por ejemplo, si compila el código con un ensamblado que no escribió usted mismo, podría cronometrar todas las llamadas al ensamblado para averiguar cómo contribuye a los tiempos de respuesta.For example, if you build your code with an assembly that you didn't write yourself, you could time all the calls to it, to find out what contribution it makes to your response times. Para que estos datos se muestren en los gráficos de dependencia en Application Insights, envíelos mediante TrackDependency.To have this data displayed in the dependency charts in Application Insights, send it using 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 aquí.Alternatively, TelemetryClient provides extension methods StartOperation and StopOperation which can be used to manually track dependencies, as shown here

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.If you want to switch off the standard dependency tracking module, remove the reference to DependencyTrackingTelemetryModule in ApplicationInsights.config for ASP.NET applications. Para las aplicaciones de ASP.NET Core, siga las instrucciones descritas aquí.For ASP.NET Core applications, follow instructions here.

Seguimiento de llamadas AJAX desde páginas webTracking AJAX calls from Web Pages

Para las páginas web, el SDK de JavaScript de Application Insights recopila automáticamente las llamadas AJAX como dependencias.For web pages, Application Insights JavaScript SDK automatically collects AJAX calls as dependencies.

Seguimiento de SQL avanzado para obtener la consulta SQL completaAdvanced SQL tracking to get full SQL Query

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.For SQL calls, the name of the server and database is always collected and stored as name of the collected DependencyTelemetry. Hay un campo adicional denominado "data", que puede contener el texto completo de la consulta SQL.There's an additional field called 'data', which can contain the full SQL query text.

En el caso de aplicaciones ASP.NET Core, ahora es necesario participar en la recopilación de texto SQL mediante:For ASP.NET Core applications, It is now required to opt-in to SQL Text collection by using

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.For ASP.NET applications, full SQL query text is collected with the help of byte code instrumentation, which requires using the instrumentation engine or by using the Microsoft.Data.SqlClient NuGet package instead of the System.Data.SqlClient library. A continuación, se describen los pasos específicos de la plataforma para habilitar la recopilación completa de consultas SQL:Platform specific steps to enable full SQL Query collection are described below:

PlataformaPlatform Pasos necesarios para obtener la consulta SQL completaStep(s) Needed to get full SQL Query
Aplicación web de AzureAzure Web App En el panel de control de la aplicación web abra la hoja de Application Insights y habilite los comandos SQL de .NETIn your web app control panel, open the Application Insights blade and enable SQL Commands under .NET
Servidor IIS (máquina virtual de Azure, del entorno local, entre otras).IIS Server (Azure VM, on-prem, and so on.) Use el paquete de NuGet Microsoft.Data.SqlClient o use el módulo Monitor de estado de PowerShell para instalar el motor de instrumentación y reiniciar IIS.Either use the Microsoft.Data.SqlClient NuGet package or use the Status Monitor PowerShell Module to install the Instrumentation Engine and restart IIS.
Servicio en la nube de AzureAzure Cloud Service Agregue una tarea de inicio para instalar StatusMonitor.Add startup task to install StatusMonitor
La aplicación se debe incorporar al SDK de ApplicationInsights en tiempo de compilación mediante la instalación de paquetes de NuGet para las aplicaciones de ASP.NET o ASP.NET Core.Your app should be onboarded to ApplicationInsights SDK at build time by installing NuGet packages for ASP.NET or ASP.NET Core applications
IIS ExpressIIS Express Use el paquete NuGet Microsoft.Data.SqlClient.Use the Microsoft.Data.SqlClient NuGet package.
Trabajos web de AzureAzure Web Jobs Use el paquete NuGet Microsoft.Data.SqlClient.Use the Microsoft.Data.SqlClient NuGet package.

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 lo siguiente:In addition to the platform specific steps above, you must also explicitly opt-in to enable SQL command collection by modifying the applicationInsights.config file with the following:

<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".In the above cases, the correct way of validating that instrumentation engine is correctly installed is by validating that the SDK version of collected DependencyTelemetry is 'rddp'. Un valor "rdddsd" o "rddf" indica que las dependencias se recopilan a través de las devoluciones de llamada de DiagnosticSource o EventSource y, por lo tanto, no se puede capturar la consulta SQL completa.'rdddsd' or 'rddf' indicates dependencies are collected via DiagnosticSource or EventSource callbacks, and hence full SQL query won't be captured.

Dónde encontrar los datos de dependenciaWhere to find dependency data

  • Asignación de aplicación visualiza las dependencias entre la aplicación y los componentes colindantes.Application Map visualizes dependencies between your app and neighboring components.
  • Diagnósticos de transacción muestra los datos de servidor unificados correlacionados.Transaction Diagnostics shows unified, correlated server data.
  • La pestaña Exploradores muestra las llamadas AJAX de los exploradores de los usuarios.Browsers tab shows AJAX calls from your users' browsers.
  • Haga clic en las solicitudes lentas o con errores para comprobar sus llamadas de dependencia.Click through from slow or failed requests to check their dependency calls.
  • Análisis puede utilizarse para consultar los datos de dependencia.Analytics can be used to query dependency data.

Diagnóstico de solicitudes lentasDiagnose slow requests

Cada evento de solicitud está asociado a las llamadas de dependencia, las excepciones y otros eventos de los que se realiza un seguimiento mientras la aplicación procesa la solicitud.Each request event is associated with the dependency calls, exceptions, and other events that are tracked while your app is processing the request. Por lo tanto, si algunas solicitudes no tienen un buen rendimiento, puede averiguar si se debe a respuestas lentas de una dependencia.So if some requests are doing badly, you can find out whether it's because of slow responses from a dependency.

Seguimiento de solicitudes en dependenciasTracing from requests to dependencies

Abra la pestaña Rendimiento y vaya a la pestaña Dependencias en la parte superior junto a las operaciones.Open the Performance tab and navigate to the Dependencies tab at the top next to operations.

Haga clic en un nombre de dependencia de la sección general.Click on a Dependency Name under overall. Después de seleccionar una dependencia, a la derecha se mostrará un gráfico con la distribución de duraciones de esa dependencia.After you select a dependency a graph of that dependency's distribution of durations will show up on the right.

En la pestaña Rendimiento, haga clic en la pestaña Dependencia en la parte superior y, a continuación, en un nombre de dependencia en el gráfico

Haga clic en el botón azul Ejemplos en la parte inferior derecha y, a continuación, en un ejemplo para ver los detalles de transacción completos.Click on the blue Samples button on the bottom right and then on a sample to see the end-to-end transaction details.

Haga clic en un ejemplo para ver los detalles de transacción completos

Generación de un perfil del sitio activoProfile your live site

¿Quiere saber en qué se invierte el tiempo?No idea where the time goes? 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.The Application Insights profiler traces HTTP calls to your live site and shows you the functions in your code that took the longest time.

Error en las solicitudesFailed requests

Las solicitudes con error también podrían estar asociadas a llamadas a dependencias con errores.Failed requests might also be associated with failed calls to dependencies.

Podemos ir a la pestaña Errores a la izquierda y, a continuación, hacer clic en la pestaña Dependencias en la parte superior.We can go to the Failures tab on the left and then click on the dependencies tab at the top.

Haga clic en el gráfico de las solicitudes con error.

Aquí podrá ver el recuento de dependencias con errores.Here you will be able to see the failed dependency count. Para obtener más detalles sobre una repetición con error, pruebe a hacer clic en el nombre de una dependencia en la tabla inferior.To get more details about a failed occurrence trying clicking on a dependency name in the bottom table. Puede hacer clic en el botón azul Dependencias situado en la parte inferior derecha para obtener los detalles de transacción completos.You can click on the blue Dependencies button at the bottom right to get the end-to-end transaction details.

Registros (Analytics)Logs (Analytics)

Puede realizar un seguimiento de las dependencias en el lenguaje de consulta de Kusto.You can track dependencies in the Kusto query language. Estos son algunos ejemplos.Here are some examples.

  • Búsqueda de llamadas de dependencia con errores:Find any failed dependency calls:

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

    dependencies | where client_Type == "Browser" | take 10
  • Búsqueda de llamadas de dependencia asociadas a solicitudes:Find dependency calls associated with requests:

    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:Find AJAX calls associated with page views:

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

Preguntas más frecuentesFrequently asked questions

¿Qué método usa el recopilador de dependencias para informar sobre las llamadas con error a las dependencias?How does automatic dependency collector report failed calls to dependencies?

  • Las llamadas de dependencia con error tendrán el campo "success" establecido en False.Failed dependency calls will have 'success' field set to False. DependencyTrackingTelemetryModule no notifica sobre ExceptionTelemetry.DependencyTrackingTelemetryModule does not report ExceptionTelemetry. El modelo de datos completo para las dependencias se describe aquí.The full data model for dependency is described here.

¿Cómo calculo la latencia de ingesta para mi telemetría de dependencia?How do I calculate ingestion latency for my dependency telemetry?

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

Cómo determino la hora en la que se inició la llamada de dependencia?How do I determine the time the dependency call was initiated?

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.In the Log Analytics query view timestamp represents the moment the TrackDependency() call was initiated which occurs immediately after the dependency call response is received. 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.To calculate the time when the dependency call began, you would take timestamp and subtract the recorded duration of the dependency call.

SDK de código abiertoOpen-source SDK

Como todos los SDK de Application Insights, el módulo de recolección de dependencias también es de código abierto.Like every Application Insights SDK, dependency collection module is also open-source. Puede leer y contribuir al código o notificar sobre problemas en el repositorio oficial de GitHub.Read and contribute to the code, or report issues at the official GitHub repo.

Pasos siguientesNext steps