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, vea Habilitación de OpenTelemetry de Azure Monitor para aplicaciones de .NET, Node.js, Python y Java y nuestro plan de desarrollo de OpenTelemetry. La guía de migración está disponible para .NET, Node.jsy Python.
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
desdeStatusMonitor
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.
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.
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.
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
- Excepciones
- Datos del usuario y de la página
- Disponibilidad
- Configuración del seguimiento de dependencias personalizadas para Java.
- Configuración del seguimiento de dependencias personalizado para OpenCensus Python.
- Escritura de una telemetría de dependencia personalizada
- Consulte modelo de datos para los tipos y el modelo de datos de Application Insights.
- Consulte las plataformas compatibles con Application Insights.