Solución de problemas de Azure Diagnostics
En este artículo se proporciona información para la solución de problemas relacionados con el uso de Azure Diagnostics. Para más información sobre Azure Diagnostics, consulte Introducción a Azure Diagnostics.
Componentes lógicos
Los componentes son:
- Diagnostics Plugin Launcher (DiagnosticsPluginLauncher.exe): inicia la extensión de Diagnostics. Sirve como proceso de punto de entrada.
- Diagnostics Plug-in (DiagnosticsPlugin.exe): configura, inicia y administra la duración del agente de supervisión. Es el proceso principal que lanza el iniciador.
- Agente de supervisión (procesos de MonAgent*.exe): supervisa, recopila y transfiere los datos de diagnóstico.
Rutas de acceso de registro y de artefacto
Las rutas de acceso siguientes conducen a algunos registros y artefactos importantes. Nos remitimos a esta información a lo largo de este artículo.
Azure Cloud Services
Artefacto | Path |
---|---|
Archivo de configuración de Azure Diagnostics | %SystemDrive%\Packages\Plugins\Microsoft.Azure.Diagnostics.PaaSDiagnostics<version>\Config.txt |
Archivos de registro | C:\Logs\Plugins\Microsoft.Azure.Diagnostics.PaaSDiagnostics<version>\ |
Almacén local para los datos de diagnóstico | C:\Resources\Directory<CloudServiceDeploymentID>.<RoleName>.DiagnosticStore\WAD0107\Tables |
Archivo de configuración del agente de supervisión | C:\Resources\Directory<CloudServiceDeploymentID>.<RoleName>.DiagnosticStore\WAD0107\Configuration\MaConfig.xml |
Paquete de extensión de Azure Diagnostics | %SystemDrive%\Packages\Plugins\Microsoft.Azure.Diagnostics.PaaSDiagnostics<version> |
Ruta de acceso a la utilidad de recopilación de registros | %SystemDrive%\Packages\GuestAgent\ |
Archivo de registro de MonAgentHost | C:\Resources\Directory<CloudServiceDeploymentID>.<RoleName>.DiagnosticStore\WAD0107\Configuration\MonAgentHost.<seq_num>.log |
Máquinas virtuales
Artefacto | Path |
---|---|
Archivo de configuración de Azure Diagnostics | C:\Packages\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics<version>\RuntimeSettings |
Archivos de registro | C:\WindowsAzure\Logs\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics<DiagnosticsVersion>\ |
Almacén local para los datos de diagnóstico | C:\WindowsAzure\Logs\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics<DiagnosticsVersion>\WAD0107\Tables |
Archivo de configuración del agente de supervisión | C:\WindowsAzure\Logs\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics<DiagnosticsVersion>\WAD0107\Configuration\MaConfig.xml |
Archivo de estado | C:\Packages\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics<version>\Status |
Paquete de extensión de Azure Diagnostics | C:\Packages\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics<DiagnosticsVersion> |
Ruta de acceso a la utilidad de recopilación de registros | C:\WindowsAzure\Logs\WaAppAgent.log |
Archivo de registro de MonAgentHost | C:\WindowsAzure\Logs\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics<DiagnosticsVersion>\WAD0107\Configuration\MonAgentHost.<seq_num>.log |
Los datos métricos no aparecen en Azure Portal
Diagnostics proporciona una serie de datos métricos, que se pueden mostrar en Azure Portal. Si tiene problemas para ver los datos en el portal, consulte la tabla WADMetrics\*
de la cuenta de almacenamiento de Diagnostics para ver si los registros de métricas correspondientes están presentes y para asegurarse que el proveedor de recursos Microsoft.Insights esté registrado.
En este caso, el elemento PartitionKey
de la tabla se compone del id. de recursos, la máquina virtual o el conjunto de escalado de máquinas virtuales. RowKey
es el nombre de la métrica. También se conoce como nombre del contador de rendimiento.
Si el identificador de recurso es incorrecto, vaya a Configuración de diagnóstico>Métricas>ResourceId para ver si el identificador de recurso está definido correctamente.
Si no hay ningún dato para la métrica específica, compruebe la opción Configuración de diagnóstico>Contador de rendimiento para ver si se incluye la métrica (el contador de rendimiento). Los siguientes contadores se habilitan de forma predeterminada:
- \Procesador(_Total)% de tiempo del procesador
- \Memoria\Bytes disponibles
- \ASP.NET Applications(Total)\Requests/Sec [\Aplicaciones ASP.NET(Total)\Solicitudes/s]
- \ASP.NET Applications(Total)\Errors Total/Sec [\Aplicaciones ASP.NET(Total)\Total de errores/s]
- \ASP.NET\Requests Queued (\ASP.NET\Solicitudes en cola)
- \ASP.NET\Requests Rejected (\ASP.NET\Solicitudes rechazadas)
- \Processor(w3wp)% de tiempo del procesador
- \Process(w3wp)\Private Bytes [\Proceso(w3wp)\Bytes privados]
- \Process(WaIISHost)% de tiempo del procesador
- \Process(WaIISHost)\Private Bytes [\Proceso(WallSHost)\Bytes privados]
- \Process(WaWorkerHost)% de tiempo del procesador
- \Process(WaWorkerHost)\Private Bytes (\Proceso(WaWorkerHost)\Bytes privados)
- \Memory\Page Faults/sec (\Memoria\Errores de página/s)
- .NET CLR Memory(Global)% hora en GC
- \LogicalDisk(C:)\Disk Write Bytes/sec [\DiscoLógico(C:)\Bytes de escritura en disco/segundo]
- \LogicalDisk(C:)\Disk Read Bytes/sec [\DiscoLógico(C:)\Bytes de lectura en disco/s]
- \LogicalDisk(D:)\Disk Write Bytes/sec [\DiscoLógico(D:)\Bytes de escritura en disco/s]
- \LogicalDisk(D:)\Disk Read Bytes/sec [\DiscoLógico(D:)\Bytes de lectura en disco/s]
Si la configuración se ha establecido correctamente, pero todavía no puede ver los datos métricos, siga las instrucciones siguientes para solucionar cualquier problema que tenga.
Azure Diagnostics no se inicia
Examine los archivos DiagnosticsPluginLauncher.log y DiagnosticsPlugin.log en la ubicación de los archivos de registro proporcionada anteriormente, para ver por qué Azure Diagnostics no se pudo iniciar.
Si estos registros indican Monitoring Agent not reporting success after launch
, significa que hubo un error al iniciar MonAgentHost.exe. Examine los registros en la ubicación que se indicó para el archivo de registro MonAgentHost
en la sección anterior "Máquinas virtuales".
La última línea de los archivos de registro contiene el código de salida.
DiagnosticsPluginLauncher.exe Information: 0 : [4/16/2016 6:24:15 AM] DiagnosticPlugin exited with code 0
Si encuentra un código de salida negativo, consulte la tabla de códigos de salida en la sección Referencias.
Los datos de diagnóstico no se registran en Azure Storage
Determine si es que no aparece ningún dato o si solo aparecen algunos de ellos.
Registros de infraestructura de diagnóstico
Diagnostics registra todos los errores de los registros de infraestructura de diagnóstico. Asegúrese de que ha habilitado la captura de registros de infraestructura de diagnóstico en la configuración. A continuación, puede buscar rápidamente los errores más relevantes que aparezcan en la DiagnosticInfrastructureLogsTable
tabla de la cuenta de almacenamiento configurada.
No aparece ningún dato
La razón más común para que los datos de evento no aparezcan en absoluto, es que la información de la cuenta de almacenamiento se ha definido incorrectamente.
Solución: corrija la configuración de Diagnostics y vuelva a instalar esta extensión.
Si la cuenta de almacenamiento está configurada correctamente, conéctese a la máquina mediante acceso remoto y asegúrese de que DiagnosticsPlugin.exe y MonAgentCore.exe se están ejecutando. Si no se están ejecutando, siga los pasos que se indican en Azure Diagnostics no se inicia.
Si los procesos están en ejecución, vaya a ¿Se capturan los datos localmente? y siga las instrucciones que se detallan allí.
Si el problema persiste, pruebe lo siguiente:
- Desinstale el agente.
- Quite el directorio C:\WindowsAzure\Logs\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics.
- Vuelva a instalar el agente.
No están todos los datos
Si puede ver algunos datos pero no todos, significa que la colección de datos o la canalización de transferencia están configuradas correctamente. Siga las subsecciones que se muestran aquí para acotar el problema.
¿Está configurada la colección?
La configuración de diagnóstico contiene instrucciones que indican que se debe recopilar un tipo determinado de datos. Revise la configuración para comprobar que solo está buscando los datos que configuró para la colección.
¿Genera datos el host?
- Contadores de rendimiento: abra
perfmon
y compruebe el contador. - Registros de seguimiento: conéctese a la máquina virtual mediante Escritorio remoto y agregue
TextWriterTraceListener
al archivo de configuración de la aplicación. Para configurar el cliente de escucha de texto, consulte Creación e inicialización de clientes de escucha de seguimiento. Asegúrese de que el elemento<trace>
tenga<trace autoflush="true">
. Si no ve los registros de seguimiento que se generan, consulte la sección "Más información sobre los registros de seguimiento que faltan". - Seguimiento de eventos para seguimientos de Windows (ETW): conéctese a la máquina virtual mediante Escritorio remoto e instale la herramienta PerfView. En PerfView, ejecute Archivo>Comando de usuario>Escuchar etwprovder1>etwprovider2 etc. Tenga en cuenta que el comando Listen distingue mayúsculas de minúsculas y que no puede haber espacios entre la lista de proveedores de ETW separada por comas. Si no se puede ejecutar el comando, seleccione Registrar en la esquina inferior derecha de la herramienta Perfview para ver lo que se intentó ejecutar y cuál fue el resultado. Suponiendo que la entrada sea correcta, aparece una nueva ventana. En unos segundos verá seguimientos de ETW.
- Registros de eventos: conéctese a la máquina virtual mediante Escritorio remoto. Abra el Visor de eventos y asegúrese de que existen los eventos.
¿Se capturan los datos localmente?
A continuación, asegúrese de que los datos se capturen localmente. Los datos se almacenan localmente en archivos *.tsf en el almacén local de datos de diagnóstico. Diferentes tipos de registros se recopilan en diferentes archivos *.tsf. Los nombres son similares a los nombres de tablas de Azure Storage.
Por ejemplo, los contadores de rendimiento se recopilan en PerformanceCountersTable.tsf. Los registros de eventos se recopilan en WindowsEventLogsTable.tsf. Siga las instrucciones de la sección Extracción de registros locales para abrir los archivos de recopilación locales y asegúrese de que se recopilan en el disco.
Si no ve que los registros se recopilen localmente y ya ha comprobado que el host genera datos, es probable que tenga un problema de configuración. Revise las opciones de configuración.
Igualmente, revise la configuración que se generó para MonitoringAgent MaConfig.xml. Compruebe que haya una sección que describa el origen de los registros de interés y que no se pierda en la conversión entre la configuración de Diagnostics y la del agente de supervisión.
¿Se transfieren los datos?
Si ha comprobado que los datos se capturan localmente, pero sigue sin verlos en su cuenta de almacenamiento, siga estos pasos:
- Asegúrese de que haya proporcionado una cuenta de almacenamiento correcta y que no haya sustituido las claves de la cuenta de almacenamiento propuesta. Al usar Azure Cloud Services, en ocasiones los usuarios no actualizan
useDevelopmentStorage=true
. - Compruebe que la cuenta de almacenamiento proporcionada es correcta. Asegúrese de que no tenga restricciones de red que no permitan que los componentes alcancen los puntos de conexión de almacenamiento público. Una forma de hacerlo consiste en conectarse a la máquina mediante Escritorio remoto e intentar escribir algo en la misma cuenta de almacenamiento.
- Por último, puede ver qué errores notifica el agente de supervisión. El agente de supervisión escribe sus registros en maeventtable.tsf, que se encuentra en el almacén local de datos de diagnóstico. Siga las instrucciones de la sección Extracción de registros locales para abrir este archivo. A continuación, intente determinar si hay
errors
que indiquen la imposibilidad de leer archivos locales o de escribir en el almacenamiento.
Captura y archivado de registros
Si va a ponerse en contacto con el servicio técnico, lo primero que podrían pedirle es que recopilara registros de su máquina. Para ahorrar tiempo, hágalo usted mismo. Ejecute la utilidad CollectGuestLogs.exe
en la ruta de la utilidad de recopilación de registros. Se creará un archivo .zip que contiene todos los registros relevantes de Azure en la misma carpeta.
Tablas de datos de diagnóstico no encontradas
Las tablas de Azure Storage que contienen eventos de ETW se nombran mediante el código siguiente:
if (String.IsNullOrEmpty(eventDestination)) {
if (e == "DefaultEvents")
tableName = "WADDefault" + MD5(provider);
else
tableName = "WADEvent" + MD5(provider) + eventId;
}
else
tableName = "WAD" + eventDestination;
Este es un ejemplo:
<EtwEventSourceProviderConfiguration provider="prov1">
<Event id="1" />
<Event id="2" eventDestination="dest1" />
<DefaultEvents />
</EtwEventSourceProviderConfiguration>
<EtwEventSourceProviderConfiguration provider="prov2">
<DefaultEvents eventDestination="dest2" />
</EtwEventSourceProviderConfiguration>
"EtwEventSourceProviderConfiguration": [
{
"provider": "prov1",
"Event": [
{
"id": 1
},
{
"id": 2,
"eventDestination": "dest1"
}
],
"DefaultEvents": {
"eventDestination": "DefaultEventDestination",
"sinks": ""
}
},
{
"provider": "prov2",
"DefaultEvents": {
"eventDestination": "dest2"
}
}
]
Este código genera cuatro tablas:
Evento | Nombre de la tabla |
---|---|
proveedor="prov1" <Id. de evento="1" /> | WADEvent+MD5("prov1")+"1" |
proveedor ="prov1" <ID. de evento="2" eventDestination="dest1" /> | WADdest1 |
proveedor="prov1" <DefaultEvents /> | WADDefault+MD5("prov1") |
proveedor="prov2" <DefaultEvents eventDestination="dest2" /> | WADdest2 |
Referencias
Consulte las referencias siguientes.
Comprobación de la configuración de la extensión Diagnostics
La manera más fácil de comprobar la configuración de la extensión es ir a Azure Resource Explorer. A continuación, vaya a la máquina virtual o al servicio en la nube donde se encuentra la extensión Diagnostics (IaaSDiagnostics/PaaDiagnostics).
Como alternativa, puede conectarse a la máquina mediante Escritorio remoto y examinar el archivo de configuración de Diagnostics que se describe en la sección Ruta de acceso de artefactos de registro.
En cualquier caso, busque Microsoft.Azure.Diagnostics y, luego, el campo xmlCfg o WadCfg.
Si está buscando en alguna máquina virtual y está presente el campo WadCfg, significa que la configuración está en formato JSON. Si el campo xmlCfg existe, significa que la configuración se ha realizado en XML y está codificada en Base 64. Debe descodificarlo para ver el XML que cargó Diagnostics.
Para el rol de servicio en la nube, si elige la configuración del disco, los datos se codifican en base64. Debe descodificarlo para ver el XML que cargó Diagnostics.
Códigos de salida del complemento Azure Diagnostics
El complemento devuelve los siguientes códigos de salida:
Código de salida | Descripción |
---|---|
0 | Correcto. |
-1 | Error genérico. |
-2 | No se puede cargar el archivo rcf. Este error interno solo debería ocurrir si el iniciador del complemento del agente invitado se invoca manualmente de forma incorrecta en la máquina virtual. |
-3 | No se puede cargar el archivo de configuración de Diagnostics. Solución: Esto se debe a que un archivo de configuración no supera la validación del esquema. La solución es proporcionar un archivo de configuración que cumpla el esquema. |
-4 | Ya hay otra instancia de Diagnósticos del agente de supervisión que usa el directorio de recursos local. Solución: especifique un valor distinto para LocalResourceDirectory. |
-6 | El iniciador del complemento del agente invitado intentó iniciar Diagnostics con una línea de comandos no válida. Este error interno solo debería ocurrir si el iniciador del complemento del agente invitado se invoca manualmente de forma incorrecta en la máquina virtual. |
-10 | El complemento Diagnostics se cerró con una excepción no controlada. |
-11 | El agente invitado no pudo crear el proceso encargado de iniciar y supervisar al agente de supervisión. Solución: compruebe que hay disponibles recursos del sistema suficientes para iniciar nuevos procesos. |
-101 | Argumentos no válidos al llamar al complemento Diagnostics. Este error interno solo debería ocurrir si el iniciador del complemento del agente invitado se invoca manualmente de forma incorrecta en la máquina virtual. |
-102 | El proceso del complemento no se puede iniciar por sí solo. Solución: compruebe que hay disponibles recursos del sistema suficientes para iniciar nuevos procesos. |
-103 | El proceso del complemento no se puede iniciar por sí solo. En concreto, no se puede crear el objeto del registrador. Solución: compruebe que hay disponibles recursos del sistema suficientes para iniciar nuevos procesos. |
-104 | No se puede cargar el archivo rcf proporcionado por el agente invitado. Este error interno solo debería ocurrir si el iniciador del complemento del agente invitado se invoca manualmente de forma incorrecta en la máquina virtual. |
-105 | El complemento Diagnostics no puede abrir el archivo de configuración de Diagnostics. Este error interno solo debería ocurrir si el complemento Diagnostics se invoca manualmente de forma incorrecta en la máquina virtual. |
-106 | No se puede leer el archivo de configuración de Diagnostics. Esto se debe a que un archivo de configuración no supera la validación del esquema. |
-107 | El directorio de recursos pasado al agente de supervisión no es válido. Este error interno solo debería ocurrir si el agente de supervisión se invoca manualmente y de forma incorrecta en la máquina virtual. |
-108 | No se puede convertir el archivo de configuración de Diagnósticos al archivo de configuración del agente de supervisión. Este error interno solo debería ocurrir si el complemento Diagnostics se invoca manualmente con un archivo de configuración no válido. |
-110 | Error de configuración general de Diagnósticos. Este error interno solo debería ocurrir si el complemento Diagnostics se invoca manualmente con un archivo de configuración no válido. |
-111 | No se puede iniciar el agente de supervisión. Solución: compruebe que hay suficientes recursos del sistema disponibles. |
-112 | Error general. |
Extracción de registros locales
El agente de supervisión recopila registros y artefactos como archivos .tsf
. El archivo .tsf
no se puede leer pero puede convertirlo a .csv
de la manera siguiente:
<Azure diagnostics extension package>\Monitor\x64\table2csv.exe <relevantLogFile>.tsf
Un archivo nuevo llamado <relevantLogFile>.csv
se crea en la misma ruta de acceso que el archivo .tsf
correspondiente.
Nota
Solo debe ejecutar esta utilidad con el archivo .tsf
principal (por ejemplo, PerformanceCountersTable.tsf
). Los archivos complementarios (por ejemplo, PerformanceCountersTables_\*\*001.tsf
, PerformanceCountersTables_\*\*002.tsf
) se procesan automáticamente.
Más información sobre los registros de seguimiento que faltan
Nota
La información que se ofrece a continuación se aplica principalmente a Azure Cloud Services, a no ser que haya configurado DiagnosticsMonitorTraceListener
en una aplicación que se ejecute en la máquina virtual de infraestructura como servicio (IaaS).
- Asegúrese de que DiagnosticMonitorTraceListener esté configurado en el archivo web.config o app.config. De forma predeterminada se configura en los proyectos de servicios en la nube. Sin embargo, algunos clientes lo convierten en comentario, lo que hace que Diagnostics no recopile las instrucciones de seguimiento.
- Si no se escriben registros con el método OnStart o Run, asegúrese de que DiagnosticMonitorTraceListener se encuentre en app.config. De forma predeterminada está en web.config, pero eso solo se aplica al código que se ejecuta en w3wp.exe. Debido a ello, debe estar en app.config para que se capturen los seguimientos que se ejecutan en WaIISHost.exe.
- Asegúrese de que usa Diagnostics.Trace.TraceXXX en lugar de Diagnostics.Debug.WriteXXX. Las instrucciones de depuración se quitarán de una compilación de versión.
- Asegúrese de que el código compilado tenga realmente las líneas de Diagnostics.Trace. Use Reflector, ildasm o ILSpy para comprobarlo. Los comandos Diagnostics.Trace se quitan del binario compilado a menos que se use el símbolo de compilación condicional TRACE. Si usa MSBuild para compilar el proyecto, este es un problema habitual con el que se encontrará.
Problemas conocidos y mitigaciones
Los siguientes problemas conocidos tienen soluciones.
Dependencia de .NET 4.5
La extensión Azure Diagnostics para Windows tiene una dependencia en tiempo de ejecución de .NET Framework 4.5 o posterior. En el momento de escribir este artículo, todas las máquinas aprovisionadas de Azure Cloud Services y todas las imágenes oficiales basadas en máquinas virtuales de Azure tienen instalado .NET 4.5 o una versión superior.
Aun así, es posible encontrarse en una situación en la que intente ejecutar la extensión Azure Diagnostics para Windows en una máquina que no tenga .NET 4.5 o superior. Esta situación sucede cuando se crea la máquina a partir de una imagen o instantánea anterior, o cuando se proporciona un disco propio personalizado.
Por lo general, este problema se manifiesta como un código de salida 255 al ejecutar DiagnosticsPluginLauncher.exe. El error se produce debido a la siguiente excepción no controlada:
System.IO.FileLoadException: Could not load file or assembly 'System.Threading.Tasks, Version=1.5.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies
Mitigación: instale .NET 4.5 o una versión superior en la máquina.
Los datos de los contadores de rendimiento están disponibles en el almacenamiento, pero no se muestran en el portal
La experiencia del portal de las máquinas virtuales muestra de forma predeterminada determinados contadores de rendimiento. Si no ve los contadores de rendimiento y sabe que los datos se están generando porque están disponibles en el almacenamiento, compruebe lo siguiente:
Si los datos del almacenamiento tienen nombres de contadores en inglés. Los nombres de los contadores no están en inglés, ya que el gráfico de métricas del portal no podrá reconocerlos.
- Mitigación: cambie el idioma de la máquina a inglés en las cuentas del sistema. Para ello, seleccione Panel de control>Región>Administración>Copiar configuración. A continuación, anule la selección de la opción Welcome screen and system accounts para que el idioma personalizado no se aplique a la cuenta del sistema.
Si usa caracteres comodín (*) en los nombres de los contadores de rendimiento, el portal no podrá correlacionar el contador configurado y el recopilado cuando los contadores de rendimiento se envíen al receptor de Azure Storage.
- Mitigación: para asegurarse de que puede usar caracteres comodín y que tiene el portal expandido (*), enrute los contadores de rendimiento hacia el receptor de Azure Monitor.