Solucionar problemas de habilitación de Application Insights Snapshot Debugger o ver instantáneas
Si habilitó Snapshot Debugger de Application Insights en la aplicación, pero no puede ver las instantáneas para las excepciones, puede usar estas instrucciones para solucionar problemas.
Puede haber muchas razones diferentes de por qué no se generan las instantáneas. Para identificar algunas de las posibles causas comunes, puede comenzar comprobando el estado de las instantáneas.
Escenarios no admitidos
Escenarios en los que no se admite Snapshot Collector:
Escenario | Efectos secundarios | Recomendación |
---|---|---|
Al usar el SDK de Snapshot Collector en la aplicación directamente (.csproj) y ha habilitado la opción avanzada Interop. | El SDK de Application Insights local (incluida la telemetría de Snapshot Collector) se pierde, por lo tanto, no hay instantáneas disponibles. La aplicación podría bloquearse al inicio con System.ArgumentException: telemetryProcessorTypedoes not implement ITelemetryProcessor .Para obtener más información sobre la característica Interop de Application Insights, consulte la documentación. |
Si usa la opción avanzada Interop, use la inserción de Snapshot Collector sin código (habilitada a través de Azure Portal). |
Asegúrese de que está usando el punto de conexión de Snapshot Debugger adecuado
Actualmente, las únicas regiones que requieren modificaciones en el punto final son Azure Government y Microsoft Azure operado por 21Vianet.
En el caso de App Service y las aplicaciones que usan el SDK de Application Insights, tiene que actualizar la cadena de conexión mediante los reemplazos admitidos para Snapshot Debugger:
Propiedad de cadena de conexión | Nube del Gobierno de EE. UU. | Nube de China |
---|---|---|
SnapshotEndpoint | https://snapshot.monitor.azure.us |
https://snapshot.monitor.azure.cn |
Para más información sobre otros reemplazos de conexión, consulte la documentación de Application Insights.
En Function App, tiene que actualizar el archivo host.json
mediante los reemplazos admitidos:
Propiedad | Nube del Gobierno de EE. UU. | Nube de China |
---|---|---|
AgentEndpoint | https://snapshot.monitor.azure.us |
https://snapshot.monitor.azure.cn |
Ejemplo del archivo host.json
actualizado con el punto de conexión del agente en la nube del Gobierno de EE. UU.:
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingExcludedTypes": "Request",
"samplingSettings": {
"isEnabled": true
},
"snapshotConfiguration": {
"isEnabled": true,
"agentEndpoint": "https://snapshot.monitor.azure.us"
}
}
}
}
Uso de la comprobación de estado de instantáneas
Algunos problemas comunes provocan que no se muestre la opción Abrir instantánea de depuración. Por ejemplo, el uso de una instancia de Snapshot Collector no actualizada, el hecho de alcanzar el límite diario de carga o, quizás, la tardanza de la instantánea en cargarse. Use la comprobación de estado de instantáneas para solucionar problemas comunes.
Hay un vínculo en el panel de excepción de la vista de seguimiento de un extremo a otro que le lleva a la comprobación de estado de instantáneas.
La interfaz interactiva, similar a un chat, busca problemas comunes y le guía para corregirlos.
Si no se soluciona el problema, consulte los siguientes pasos de solución de problemas de forma manual.
Comprobar la clave de instrumentación
Asegúrese de que está usando la clave de instrumentación correcta en la aplicación publicada. Por lo general, la clave de instrumentación se lee desde el archivo ApplicationInsights.config. Compruebe que el valor es igual que la clave de instrumentación para el recurso de Application Insights que ve en el portal.
Nota:
El 31 de marzo de 2025 finalizará la compatibilidad con la ingesta de claves de instrumentación. La ingesta de claves de instrumentación seguirá funcionando, pero la característica ya no recibirá actualizaciones ni soporte técnico. Transición a las cadenas de conexión para aprovechar las nuevas funcionalidades.
Comprobación de la configuración de cliente TLS/SSL (ASP.NET)
Si tiene una aplicación ASP.NET que está hospedada en Azure App Service o en IIS en una máquina virtual, la aplicación podría no conectarse al servicio Snapshot Debugger porque falta un protocolo de seguridad SSL.
El punto de conexión de Snapshot Debugger requiere la versión 1.2 de TLS. El conjunto de protocolos de seguridad de SSL es una de las peculiaridades habilitadas por el valor httpRuntime targetFramework
en la sección system.web
de web.config
.
Si httpRuntime targetFramework
es 4.5.2 o inferior, TLS 1.2 no se incluye de forma predeterminada.
Nota
El valor httpRuntime targetFramework
es independiente de la plataforma de destino que se usa al compilar la aplicación.
Para comprobar la configuración, abra el archivo web.config y busque la sección system.web. Asegúrese de que el targetFramework
de httpRuntime
esté establecido en 4.6 o superior.
<system.web>
...
<httpRuntime targetFramework="4.7.2" />
...
</system.web>
Nota:
Al modificar el valor httpRuntime targetFramework
, se cambian las peculiaridades del entorno de ejecución de la aplicación y se pueden producir otros cambios sutiles en el comportamiento. Asegúrese de probar exhaustivamente la aplicación después de realizar este cambio. Para obtener una lista completa de cambios de compatibilidad, vea Cambios de redestinación.
Nota:
Si el targetFramework
es 4.7 o superior, Windows determina los protocolos disponibles. En Azure App Service, está disponible TLS 1.2. Sin embargo, si usa su propia máquina virtual, es posible que tenga que habilitar TLS 1.2 en el sistema operativo.
Escenarios de sobrecarga del Snapshot Debugger
Snapshot Debugger está diseñado para su uso en entornos de producción. La configuración predeterminada incluye límites de velocidad para minimizar el impacto en las aplicaciones.
Sin embargo, puede experimentar una pequeña sobrecarga de CPU, memoria y E/S asociada a Snapshot Debugger, como en los escenarios siguientes.
Cuando se produce una excepción en la aplicación:
La creación de una firma para el tipo de problema y la decisión de si crear una instantánea agrega una sobrecarga de memoria y CPU pequeña.
Si la deoptimización está habilitada, hay una sobrecarga para volver a JITting el método que produjo la excepción. Esto se produce la próxima vez que se ejecute el método. Dependiendo del tamaño del método, podría suponer entre 1 ms y 100 ms de tiempo de CPU.
Si el controlador de excepciones decide crear una instantánea:
La creación de la instantánea de proceso tarda aproximadamente medio segundo (P50 = 0,3 s, P90 = 1,2 s, P95 = 1,9 s) durante el cual se pausa el subproceso que produjo la excepción. No se bloquean otros subprocesos.
Convertir la instantánea del proceso en un minivolcado y cargarlo en Application Insights lleva varios minutos.
- Convertir: P50 = 63 s, P90 = 187 s, P95 = 275 s.
- Carga: P50 = 31 s, P90 = 75 s, P95 = 98 s.
Esto se hace en el cargador de instantáneas, que se ejecuta en un proceso independiente. El proceso del cargador de instantáneas se ejecuta con una prioridad de CPU normal inferior y usa E/S de prioridad baja.
El minivolcado se escribe primero en el disco y la cantidad de espacio en disco es aproximadamente la misma que el conjunto de trabajo del proceso original. Escribir el minivolcado puede inducir errores de página a medida que se lee la memoria.
El minivolcado se comprime durante la carga, que consume CPU y memoria en el proceso del cargador de instantáneas. La sobrecarga de CPU, memoria y disco es proporcional al tamaño de la instantánea del proceso. El cargador de instantáneas procesa instantáneas en serie.
Cuando se llama a TrackException
:
Snapshot Debugger comprueba si la excepción es nueva o si se creó una instantánea para ella. Esto agrega una pequeña sobrecarga de CPU.
Versiones preliminares de .NET Core
Si usa una versión preliminar de .NET Core o las referencias de aplicación del SDK de Application Insights directa o indirectamente a través de un ensamblado dependiente, siga las instrucciones que encontrará en Habilitación de Snapshot Debugger en otros entornos.
Comprobación de la página de estado de la extensión de sitio de los servicios de diagnóstico
Si Snapshot Debugger se ha habilitado a través del panel de Application Insights en el portal, es que se ha habilitado mediante la extensión de sitio de los servicios de diagnóstico.
Nota
La instalación sin código de Application Insights Snapshot Debugger sigue la directiva de compatibilidad de .NET Core. Para más información sobre los entornos de ejecución admitidos, consulte Directiva de compatibilidad de .NET Core.
Puede comprobar la página de estado de esta extensión si va a la siguiente dirección URL: https://{site-name}.scm.azurewebsites.net/DiagnosticServices
Nota
Tenga en cuenta que el dominio del vínculo de la página de estado variará en función de la nube.
Este dominio es el mismo que el sitio de administración de Kudu para App Service. La página de estado muestra el estado de instalación de los agentes Generador de perfiles de .NET y Snapshot Collector. Si se produjo un error inesperado, se muestra cómo corregirlo.
Puede usar el sitio de administración de Kudu de App Service para obtener la dirección URL base de esta página de estado:
- Abra la aplicación App Service en Azure Portal.
- Haga clic en Herramientas avanzadas o busque Kudu.
- Seleccione Ir.
- Una vez que esté en el sitio de administración de Kudu, en la dirección URL, anexe el valor
/DiagnosticServices
y presione Entrar. Termina así:https://<kudu-url>/DiagnosticServices
Actualización a la versión más reciente del paquete NuGet
En función de cómo se haya habilitado Snapshot Debugger, consulte las siguientes opciones:
Si se habilitó Snapshot Debugger con el panel Application Insights en el portal, la aplicación ya debería estar ejecutando el paquete NuGet más reciente.
Si se habilitó Snapshot Debugger mediante la inclusión del paquete NuGet Microsoft.ApplicationInsights.SnapshotCollector, use el administrador de paquetes NuGet de Visual Studio para asegurarse de que usa la versión más reciente de
Microsoft.ApplicationInsights.SnapshotCollector
.
Para obtener las actualizaciones y correcciones de errores más recientes, consulte las notas de la versión.
Comprobar los registros de usuario de carga
Después de crear una instantánea, se crea un archivo de minivolcado (.dmp) en el disco. Un proceso de usuario de carga independiente crea ese archivo de minivolcado y lo carga, junto con los archivos PDB asociados, en el almacenamiento de Snapshot Debugger de Application Insights. Después de cargar correctamente el minivolcado, se elimina del disco. Los archivos de registro del proceso de usuario de carga se conservan en el disco. En un entorno de App Service, puede encontrar estos registros en D:\Home\LogFiles
. Use el sitio de administración de Kudu para App Service para buscar estos archivos de registro.
- Abra la aplicación App Service en Azure Portal.
- Haga clic en Herramientas avanzadas o busque Kudu.
- Seleccione Ir.
- En la lista desplegable Consola de depuración, seleccione CMD.
- Seleccione LogFiles.
Debería ver al menos un archivo con un nombre que comienza con Uploader_
o SnapshotUploader_
y una extensión .log
. Seleccione el icono adecuado para descargar los archivos de registro o abrirlos en un explorador.
El nombre de archivo incluye un sufijo único que identifica la instancia de App Service. Si la instancia de App Service se hospeda en más de un equipo, hay archivos de registro independientes para cada equipo. Cuando el usuario de carga detecta un nuevo archivo de minivolcado, se registra en el archivo de registro. Este es un ejemplo de una instantánea y una carga correctas:
SnapshotUploader.exe Information: 0 : Received Fork request ID 139e411a23934dc0b9ea08a626db16c5 from process 6368 (Low pri)
DateTime=2018-03-09T01:42:41.8571711Z
SnapshotUploader.exe Information: 0 : Creating minidump from Fork request ID 139e411a23934dc0b9ea08a626db16c5 from process 6368 (Low pri)
DateTime=2018-03-09T01:42:41.8571711Z
SnapshotUploader.exe Information: 0 : Dump placeholder file created: 139e411a23934dc0b9ea08a626db16c5.dm_
DateTime=2018-03-09T01:42:41.8728496Z
SnapshotUploader.exe Information: 0 : Dump available 139e411a23934dc0b9ea08a626db16c5.dmp
DateTime=2018-03-09T01:42:45.7525022Z
SnapshotUploader.exe Information: 0 : Successfully wrote minidump to D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp
DateTime=2018-03-09T01:42:45.7681360Z
SnapshotUploader.exe Information: 0 : Uploading D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp, 214.42 MB (uncompressed)
DateTime=2018-03-09T01:42:45.7681360Z
SnapshotUploader.exe Information: 0 : Upload successful. Compressed size 86.56 MB
DateTime=2018-03-09T01:42:59.6184651Z
SnapshotUploader.exe Information: 0 : Extracting PDB info from D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp.
DateTime=2018-03-09T01:42:59.6184651Z
SnapshotUploader.exe Information: 0 : Matched 2 PDB(s) with local files.
DateTime=2018-03-09T01:42:59.6809606Z
SnapshotUploader.exe Information: 0 : Stamp does not want any of our matched PDBs.
DateTime=2018-03-09T01:42:59.8059929Z
SnapshotUploader.exe Information: 0 : Deleted D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp
DateTime=2018-03-09T01:42:59.8530649Z
Nota:
El ejemplo anterior procede de la versión 1.2.0 del paquete NuGet de Microsoft.ApplicationInsights.SnapshotCollector
. En versiones anteriores, el proceso de usuario de carga se llama MinidumpUploader.exe
y el registro está menos detallado.
En el ejemplo anterior, la clave de instrumentación es c12a605e73c44346a984e00000000000
. Este valor debe coincidir con la clave de instrumentación de la aplicación.
El minivolcado está asociado a una instantánea con el identificador 139e411a23934dc0b9ea08a626db16c5
. Puede usar este id. más adelante para buscar el registro de excepciones asociado en Application Insights Analytics.
El usuario de carga busca nuevos archivos PDB una vez cada 15 minutos. Este es un ejemplo:
SnapshotUploader.exe Information: 0 : PDB rescan requested.
DateTime=2018-03-09T01:47:19.4457768Z
SnapshotUploader.exe Information: 0 : Scanning D:\home\site\wwwroot for local PDBs.
DateTime=2018-03-09T01:47:19.4457768Z
SnapshotUploader.exe Information: 0 : Local PDB scan complete. Found 2 PDB(s).
DateTime=2018-03-09T01:47:19.4614027Z
SnapshotUploader.exe Information: 0 : Deleted PDB scan marker : D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\6368.pdbscan
DateTime=2018-03-09T01:47:19.4614027Z
Para las aplicaciones que no están hospedadas en App Service, los registros de usuario de carga están en la misma carpeta que los minivolcados: %TEMP%\Dumps\<ikey>
(donde <ikey>
es la clave de instrumentación).
Solución de problemas de Cloud Services
En Cloud Services, la carpeta temporal predeterminada puede ser demasiado pequeña para contener los archivos de minivolcado, dando lugar a la pérdida de instantáneas.
El espacio necesario depende del espacio de trabajo total de la aplicación y el número de instantáneas simultáneas.
El espacio de trabajo de un rol web ASP.NET de 32 bits está normalmente entre 200 y 500 MB. Debe disponer del espacio necesario para al menos dos instantáneas simultáneas.
Por ejemplo, si la aplicación usa 1 GB de espacio de trabajo total, debe asegurarse de que hay al menos 2 GB de espacio en disco para almacenar las instantáneas.
Siga estos pasos para configurar el rol del servicio en la nube con un recurso local dedicado para las instantáneas.
Agregue un nuevo recurso local a su servicio en la nube editando el archivo de definición (.csdef) del servicio en la nube. En el ejemplo siguiente se define un recurso llamado
SnapshotStore
con un tamaño de 5 GB.<LocalResources> <LocalStorage name="SnapshotStore" cleanOnRoleRecycle="false" sizeInMB="5120" /> </LocalResources>
Modifique el código de inicio del rol para agregar una variable de entorno que apunte al recurso local
SnapshotStore
. En roles de trabajo, el código se debe agregar al métodoOnStart
del rol:public override bool OnStart() { Environment.SetEnvironmentVariable("SNAPSHOTSTORE", RoleEnvironment.GetLocalResource("SnapshotStore").RootPath); return base.OnStart(); }
En roles web (ASP.NET), el código se debe agregar al método
Application_Start
de la aplicación web:using Microsoft.WindowsAzure.ServiceRuntime; using System; namespace MyWebRoleApp { public class MyMvcApplication : System.Web.HttpApplication { protected void Application_Start() { Environment.SetEnvironmentVariable("SNAPSHOTSTORE", RoleEnvironment.GetLocalResource("SnapshotStore").RootPath); // TODO: The rest of your application startup code } } }
Actualice el archivo ApplicationInsights.config del rol para reemplazar la ubicación de la carpeta temporal utilizada por
SnapshotCollector
<TelemetryProcessors> <Add Type="Microsoft.ApplicationInsights.SnapshotCollector.SnapshotCollectorTelemetryProcessor, Microsoft.ApplicationInsights.SnapshotCollector"> <!-- Use the SnapshotStore local resource for snapshots --> <TempFolder>%SNAPSHOTSTORE%</TempFolder> <!-- Other SnapshotCollector configuration options --> </Add> </TelemetryProcessors>
Invalidación de la carpeta Instantáneas
Cuando se inicia Snapshot Collector, intenta encontrar una carpeta del disco que sea adecuada para ejecutar el proceso del cargador de instantáneas. La carpeta elegida se conoce como carpeta de instantáneas.
Snapshot Collector comprueba unas cuantas ubicaciones conocidas, asegurándose de que tiene permisos para copiar los archivos binarios del cargador de instantáneas. Se usaron las siguientes variables de entorno:
- Fabric_Folder_App_Temp
- LOCALAPPDATA
- APPDATA
- TEMP
Si no se puede encontrar una carpeta adecuada, Snapshot Collector envía un error que dice "Could not find a suitable shadow copy folder." (No se pudo encontrar una carpeta de instantáneas adecuada).
Si se produce un error en la copia, Snapshot Collector envía un error ShadowCopyFailed
.
Si no se puede iniciar el cargador, Snapshot Collector enviará un error UploaderCannotStartFromShadowCopy
. El cuerpo del mensaje normalmente incluye System.UnauthorizedAccessException
. Este error se suele producir porque la aplicación se ejecuta en una cuenta con permisos reducidos. La cuenta tiene permiso para escribir en la carpeta de instantáneas, pero no tiene permiso para ejecutar código.
Dado que estos errores suelen producirse durante el inicio, suelen ir seguidos de un error de ExceptionDuringConnect
que indica que el Usuario de carga no se pudo iniciar.
Para resolver estos errores, puede especificar la carpeta de copia de instantáneas manualmente a través de la opción de configuración ShadowCopyFolder
. Por ejemplo, use ApplicationInsights.config:
<TelemetryProcessors>
<Add Type="Microsoft.ApplicationInsights.SnapshotCollector.SnapshotCollectorTelemetryProcessor, Microsoft.ApplicationInsights.SnapshotCollector">
<!-- Override the default shadow copy folder. -->
<ShadowCopyFolder>D:\SnapshotUploader</ShadowCopyFolder>
<!-- Other SnapshotCollector configuration options -->
</Add>
</TelemetryProcessors>
O bien, si usa appsettings.json con una aplicación .NET Core:
{
"ApplicationInsights": {
"InstrumentationKey": "<your instrumentation key>"
},
"SnapshotCollectorConfiguration": {
"ShadowCopyFolder": "D:\\SnapshotUploader"
}
}
Usar la búsqueda de Application Insights para buscar excepciones con instantáneas
Cuando se crea una instantánea, la excepción iniciada se etiqueta con un identificador de instantánea. Ese id. de instantánea se incluye como una propiedad personalizada cuando se notifica la excepción a Application Insights. Mediante la búsqueda de Application Insights, puede buscar todos los registros con la propiedad personalizada ai.snapshot.id
.
- Vaya al recurso de Application Insights en Azure Portal.
- Seleccione Search.
- En el cuadro de texto Buscar, escriba
ai.snapshot.id
y presione Entrar.
Si esta búsqueda no devuelve ningún resultado, es que no se ha informado de ninguna instantánea a Application Insights en el intervalo de tiempo seleccionado.
Para buscar un identificador de instantánea específico en los registros de usuario de carga, escriba ese identificador en el cuadro Buscar. Si no se encuentran los registros de una instantánea que sabe que se cargó, siga estos pasos:
Compruebe que está viendo el recurso de Application Insights correcto comprobando la clave de instrumentación.
Mediante la marca de tiempo del registro del usuario de carga, ajuste el filtro de intervalo de tiempo de la búsqueda para cubrir ese intervalo de tiempo.
Si sigue sin ver una excepción con ese id. de instantánea, significa que el registro de la excepción no se ha notificado a Application Insights. Esta situación puede ocurrir si se bloqueó la aplicación después de que tomó la instantánea, pero antes de notificar el registro de excepción. En este caso, compruebe los registros de App Service en Diagnose and solve problems
para ver si hay reinicios inesperados o excepciones no controladas.
Edición de reglas de firewall o proxy de red
Si la aplicación se conecta a Internet a través de un proxy o un firewall, es posible que tenga que actualizar las reglas para comunicarse con el servicio de Snapshot Debugger.
Las direcciones IP que se usan en Snapshot Debugger de Application Insights se incluyen en la etiqueta de servicio de Azure Monitor. Para obtener más información, consulte la documentación sobre las etiquetas de servicio.
¿Hay algún costes de facturación al usar instantáneas?
No hay cargos en su suscripción específicos para Snapshot Debugger. Los archivos de instantáneas recopilados se almacenan por separado de la telemetría recopilada por los SDK de Application Insights y no hay cargos por la ingesta o el almacenamiento de instantáneas.