Supervisión de máquinas virtuales con Azure Monitor: recopilación de datos

Este artículo forma parte de la guía Supervisión de máquinas virtuales y sus cargas de trabajo en Azure Monitor. Se describe cómo configurar la recopilación de datos una vez que haya implementado el agente de Azure Monitor en las máquinas virtuales híbridas y de Azure en Azure Monitor.

En este artículo se proporcionan instrucciones sobre cómo recopilar los tipos de telemetría más comunes de las máquinas virtuales. La configuración exacta que elija depende de las cargas de trabajo que ejecute en las máquinas. En cada sección se incluyen alertas de búsqueda de registros de ejemplo que puede usar con esos datos.

Nota

En este escenario se describe cómo implementar una supervisión completa del entorno de máquina virtual híbrida y de Azure. Para empezar a supervisar la primera máquina virtual de Azure, consulte Supervisión de máquinas virtuales de Azure.

Reglas de recopilación de datos

La recopilación de datos del agente de Azure Monitor se define mediante una o varias reglas de recopilación de datos (DCR) almacenadas en la suscripción de Azure y asociadas a las máquinas virtuales.

En el caso de las máquinas virtuales, las DCR definen datos como eventos y contadores de rendimiento para recopilar y especificar las áreas de trabajo de Log Analytics a las que se deben enviar los datos. La DCR también puede usar transformaciones para filtrar los datos no deseados y para agregar columnas calculadas. Una sola máquina se puede asociar a varias DCR y una sola DCR se puede asociar a varias máquinas. Las DCR se entregan a las máquinas a las que están asociadas donde se procesan mediante el agente de Azure Monitor.

Visualización de reglas de recopilación de datos

Puede ver las DCR en la suscripción de Azure en Reglas de recopilación de datos en el menú Supervisión de Azure Portal. Las DCR admiten otros escenarios de recopilación de datos en Azure Monitor, por lo que todas las DCR no necesariamente serán para las máquinas virtuales.

Screenshot that shows DCRs in the Azure portal.

Creación de reglas de recopilación de datos

Hay varios métodos para crear DCR en función del escenario de recopilación de datos. En algunos casos, Azure Portal le guía por la configuración. Otros escenarios requieren que edite una DCR directamente. Al configurar VM Insights, se crea automáticamente una DCR preconfigurada. En las secciones siguientes se identifican los datos comunes para recopilar y cómo configurar la recopilación de datos.

En algunos casos, es posible que tenga que editar una DCR existente para agregar funcionalidad. Por ejemplo, puede usar Azure Portal para crear una DCR que recopile eventos de Windows o Syslog. A continuación, quiere agregar una transformación a esa DCR para filtrar las columnas de los eventos que no desea recopilar.

A medida que el entorno madura y crece en complejidad, debe implementar una estrategia para organizar sus DCR para ayudar en su administración. Para obtener instrucciones sobre las distintas estrategias, consulte Procedimientos recomendados para la creación y administración de reglas de recopilación de datos en Azure Monitor.

Control de costos

Dado que el coste de Azure Monitor depende de la cantidad de datos que recopile, debe asegurarse de que no va a recopilar más datos de los que necesita para cumplir los requisitos de supervisión. La configuración es un equilibrio entre el presupuesto y la cantidad de información que desee en el funcionamiento de las máquinas virtuales.

Sugerencia

Para descubrir estrategias que le ayudarán a reducir los costes de Azure Monitor, consulte Optimización de costes y Azure Monitor.

Una máquina virtual típica genera entre 1 GB y 3 GB de datos por mes. Este tamaño de datos depende de la configuración de la máquina, de las cargas de trabajo que se ejecutan en ella y de la configuración de las DCR. Antes de configurar la recopilación de datos en todo el entorno de la máquina virtual, comience la recopilación en algunas máquinas representativas para predecir mejor los costes esperados cuando se implementan en todo el entorno. Use Información sobre el área de trabajo de Log Analytics o consultas de registro en Volumen de datos por equipo para determinar la cantidad de datos facturables recopilados para cada máquina y ajustarlos en consecuencia.

Evalúe los datos recopilados y filtre los que cumplan los siguientes criterios para reducir los costes. Cada origen de datos que recopile puede tener un método diferente para filtrar los datos no deseados. Consulte las secciones siguientes para obtener los detalles de cada uno de los orígenes de datos comunes.

  • No se usa para alertas.
  • No se conoce ningún valor forense o de diagnóstico.
  • No es necesario para los reguladores.
  • No se usa en ningún panel o libro.

También puede usar transformaciones para implementar un filtrado más granular y también para filtrar los datos de las columnas que proporcionan poco valor. Por ejemplo, puede tener un evento de Windows que sea valioso para las alertas, pero que incluya columnas con datos redundantes o excesivos. Puede crear una transformación que permita recopilar el evento pero que elimine estos datos excesivos.

Filtre los datos tanto como sea posible antes de enviarlos a Azure Monitor para evitar un posible cargo por filtrar demasiados datos mediante transformaciones. Use las transformaciones para filtrar registros usando lógicas complejas y para filtrar columnas con datos que no necesita.

Recopilación de datos predeterminada

Azure Monitor realiza automáticamente la siguiente recopilación de datos sin necesidad de ninguna configuración adicional.

Métricas de la plataforma

Las métricas de la plataforma para máquinas virtuales de Azure incluyen métricas de host importantes, como el uso de CPU, red y disco. Pueden ser:

Registro de actividades

El registro de actividad se recopila automáticamente. Incluye la actividad reciente de la máquina, como los cambios de configuración y cuándo se detuvo e inició. Puede ver las métricas de la plataforma y el registro de actividad recopilados para cada host de máquina virtual en Azure Portal.

Puede ver el registro de actividad de una máquina individual o para todos los recursos de una suscripción. Cree una configuración de diagnóstico para enviar estos datos a la misma área de trabajo de Log Analytics que usa el agente de Azure Monitor para analizarlos con los demás datos de supervisión recopilados para la máquina virtual. No hay ningún coste por la ingesta o retención de datos del registro de actividad.

Información de disponibilidad de máquinas virtuales en Azure Resource Graph

Con Azure Resource Graph, puede usar el mismo lenguaje de consulta Kusto que se usa en las consultas de registro para consultar los recursos de Azure a gran escala con filtrado, agrupación y ordenación complejos por propiedades de recursos. Puede usar anotaciones de estado de máquina virtual en Resource Graph para el análisis detallado del tiempo de inactividad y la atribución de errores.

Para obtener más información sobre qué datos se recopilan y cómo verlos, consulte Supervisión de máquinas virtuales con Azure Monitor: análisis de datos de supervisión.

VM Insights

Al habilitar VM Insights, se crea una DCR con el prefijo MSVMI- que recopila la siguiente información. Puede usar esta misma DCR con otras máquinas en lugar de crear una nueva para cada máquina virtual.

  • Los contadores de rendimiento comunes para el sistema operativo cliente se envían a la tabla InsightsMetrics del área de trabajo de Log Analytics. Los nombres de contador se normalizan para usar el mismo nombre común, independientemente del tipo de sistema operativo. Para obtener una lista de los contadores de rendimiento que se recopilan, consulte Cómo realizar una consulta de registros de VM Insights.

  • Si ha especificado procesos y dependencias que se van a recopilar, se rellenan las tablas siguientes:

    • VMBoundPort: tráfico para los puertos de servidor abiertos en la máquina
    • VMComputer: datos de inventario de la máquina
    • VMConnection: tráfico para conexiones entrantes y salientes hacia la máquina y desde esta
    • VMProcess: procesos que se ejecutan en la máquina

De manera predeterminada, VM Insights no habilitará la recopilación de procesos y dependencias para ahorrar costes de ingesta de datos. Estos datos son necesarios para la característica de asignación y también implementa el agente de dependencia en la máquina. Habilite esta colección si desea usar esta característica.

Recopilación de eventos de Windows y Syslog

El sistema operativo y las aplicaciones de las máquinas virtuales suelen escribir en el registro de eventos de Windows o Syslog. Puede crear una alerta en cuanto se encuentre un único evento o esperar una serie de eventos coincidentes dentro de un período de tiempo determinado. También puede recopilar eventos para análisis posteriores, como identificar tendencias concretas a lo largo del tiempo o para realizar la solución de problemas después de que se produzca un problema.

Para obtener instrucciones sobre cómo crear una DCR para recopilar eventos de Windows y Syslog, consulte Recopilación de eventos y contadores de rendimiento de máquinas virtuales con el agente de Azure Monitor. Puede crear rápidamente una DCR mediante los registros de eventos de Windows más comunes y los filtros de instalaciones de Syslog por nivel de evento.

Para un filtrado más detallado por criterios, como el identificador de evento, puede crear un filtro personalizado mediante consultas XPath. Para filtrar aún más los datos recopilados, edite la DCR para agregar una transformación.

Use las instrucciones siguientes como punto de partida recomendado para la recopilación de eventos. Modifique la configuración de la DCR para filtrar los eventos innecesarios y agregue otros eventos en función de sus requisitos.

Source Estrategia
Eventos de Windows Recopile al menos eventos críticos, de error y de advertencia para que los registros del sistema y de la aplicación admitan alertas. Agregue eventos de información para analizar tendencias y admitir la solución de problemas. Los eventos detallados rara vez son útiles y normalmente no se deben recopilar.
Eventos Syslog Recopile al menos eventos LOG_WARNING para cada instalación para admitir las alertas. Agregue eventos de información para analizar tendencias y admitir la solución de problemas. Los eventos LOG_DEBUG rara vez son útiles y normalmente no se deben recopilar.

Consultas de registros de ejemplo: eventos de Windows

Consultar Descripción
Event Todos los eventos de Windows
Event | where EventLevelName == "Error" Todos los eventos de Windows con gravedad de error
Event | summarize count() by Source Contador de eventos de Windows por origen
Event | where EventLevelName == "Error" | summarize count() by Source Contador de eventos de error de Windows por origen

Consultas de registros de ejemplo: eventos de Syslog

Consultar Descripción
Syslog Todos los registros de Syslog
Syslog | where SeverityLevel == "error" Todos los registros de Syslog con gravedad de error
Syslog | summarize AggregatedValue = count() by Computer Número de registros de Syslog por equipo
Syslog | summarize AggregatedValue = count() by Facility Número de registros de Syslog por recurso

Recopilación de contadores de rendimiento

Los datos de rendimiento del cliente se pueden enviar a métricas de Azure Monitor o a los registros de Azure Monitor, y normalmente los enviará a ambos destinos. Si ha habilitado VM Insights, se recopila un conjunto común de contadores de rendimiento en Registros para admitir sus gráficos de rendimiento. No puede modificar este conjunto de contadores, pero puede crear otras DCR para recopilar contadores adicionales y enviarlos a diferentes destinos.

Hay varias razones por las que desea crear una DCR para recopilar el rendimiento de los invitados:

  • No está usando VM Insights, por lo que los datos de rendimiento del cliente aún no se recopilan.
  • Recopile otros contadores de rendimiento que VM Insights no recopila.
  • Recopile contadores de rendimiento de otras cargas de trabajo que se ejecutan en el cliente.
  • Envíe datos de rendimiento a las métricas de Azure Monitor, donde puede usarlos con el explorador de métricas y las alertas de métricas.

Para obtener instrucciones sobre cómo crear una DCR para recopilar contadores de rendimiento, consulte Recopilación de eventos y contadores de rendimiento de máquinas virtuales con el agente de Azure Monitor. Puede crear rápidamente una DCR mediante los contadores más comunes. Para un filtrado más detallado por criterios, como el identificador de evento, puede crear un filtro personalizado mediante consultas XPath.

Nota

Puede optar por combinar el rendimiento y la recopilación de eventos en la misma DCR.

Destination Descripción
Métricas Las métricas de host se envían automáticamente a las métricas de Azure Monitor. Puede usar una DCR para recopilar métricas de cliente para que se puedan analizar junto con el explorador de métricas o usarse con alertas de métricas. Estos datos se almacenan durante 93 días.
Registros Los datos de rendimiento almacenados en los registros de Azure Monitor se pueden almacenar durante períodos prolongados. Los datos se pueden analizar junto con los datos de eventos mediante consultas de registro con log Analytics o alertas de búsqueda de registros. También puede correlacionar los datos mediante una lógica compleja entre varias máquinas, regiones y suscripciones.

Los datos de rendimiento se envían a las tablas siguientes:
- VM Insights: InsightsMetrics
- Otros datos de rendimiento: Perf

Consultas de registros de ejemplo

En los ejemplos siguientes se usa la tabla Perf con datos de rendimiento personalizados. Para obtener más información sobre los datos de rendimiento recopilados por VM Insights, consulte Consulta de registros de VM Insights.

Consultar Descripción
Perf Todos los datos de rendimiento
Perf | where Computer == "MyComputer" Todos los datos de rendimiento de un equipo concreto
Perf | where CounterName == "Current Disk Queue Length" Todos los datos de rendimiento de un contador concreto
Perf | where ObjectName == "Processor" and CounterName == "% Processor Time" and InstanceName == "_Total" | summarize AVGCPU = avg(CounterValue) by Computer Uso medio de CPU en todos los equipos
Perf | where CounterName == "% Processor Time" | summarize AggregatedValue = max(CounterValue) by Computer Uso máximo de CPU en todos los equipos
Perf | where ObjectName == "LogicalDisk" and CounterName == "Current Disk Queue Length" and Computer == "MyComputerName" | summarize AggregatedValue = avg(CounterValue) by InstanceName Longitud media de cola de disco actual en todas las instancias de un equipo dado
Perf | where CounterName == "Disk Transfers/sec" | summarize AggregatedValue = percentile(CounterValue, 95) by Computer Percentil 95 de transferencias de disco por segundo en todos los equipos
Perf | where CounterName == "% Processor Time" and InstanceName == "_Total" | summarize AggregatedValue = avg(CounterValue) by bin(TimeGenerated, 1h), Computer Promedio por hora de uso de CPU en todos los equipos
Perf | where Computer == "MyComputer" and CounterName startswith_cs "%" and InstanceName == "_Total" | summarize AggregatedValue = percentile(CounterValue, 70) by bin(TimeGenerated, 1h), CounterName Percentil 70 por hora de cada contador de porcentaje % para un equipo concreto
Perf | where CounterName == "% Processor Time" and InstanceName == "_Total" and Computer == "MyComputer" | summarize ["min(CounterValue)"] = min(CounterValue), ["avg(CounterValue)"] = avg(CounterValue), ["percentile75(CounterValue)"] = percentile(CounterValue, 75), ["max(CounterValue)"] = max(CounterValue) by bin(TimeGenerated, 1h), Computer Promedio, mínimo, máximo y percentil 75 por hora de uso de CPU de un equipo específico
Perf | where ObjectName == "MSSQL$INST2:Databases" and InstanceName == "master" Todos los datos de rendimiento del objeto de rendimiento de la base de datos para la base de datos maestra (master) de la instancia de SQL Server con nombre INST2.
Perf | where TimeGenerated >ago(5m) | where ObjectName == "Process" and InstanceName != "_Total" and InstanceName != "Idle" | where CounterName == "% Processor Time" | summarize cpuVal=avg(CounterValue) by Computer,InstanceName | join (Perf| where TimeGenerated >ago(5m)| where ObjectName == "Process" and CounterName == "ID Process" | summarize arg_max(TimeGenerated,*) by ProcID=CounterValue ) on Computer,InstanceName | sort by TimeGenerated desc | summarize AvgCPU = avg(cpuVal) by InstanceName,ProcID Promedio de CPU durante los últimos 5 minutos para cada identificador de proceso.

Recopilación de registros de texto

Algunas aplicaciones escriben eventos en un registro de texto almacenado en la máquina virtual. Cree una tabla personalizada y DCR para recopilar estos datos. Defina la ubicación del registro de texto, su configuración detallada y el esquema de la tabla personalizada. La ingesta y retención de estos datos en el área de trabajo tiene un coste.

Consultas de registros de ejemplo

Los nombres de columna que se usan aquí son solo ejemplos. Lo más probable es que los nombres de columna del registro sean diferentes.

Consultar Descripción
MyApp_CL | summarize count() by code Contar el número de eventos por código.
MyApp_CL | where status == "Error" | summarize AggregatedValue = count() by Computer, bin(TimeGenerated, 15m) Crear una regla de alerta en cualquier evento de error.

Recopilación de registros de IIS

IIS que se ejecuta en máquinas Windows escribe registros en un archivo de texto. Configure la recopilación de registros de IIS mediante la Recopilación de registros de IIS con el agente de Azure Monitor. La ingesta y retención de estos datos en el área de trabajo tiene un coste.

Los registros del registro de IIS se almacenan en la tabla W3CIISLog del área de trabajo de Log Analytics. La ingesta y retención de estos datos en el área de trabajo tiene un coste.

Consultas de registros de ejemplo

Consultar Descripción
W3CIISLog | where csHost=="www.contoso.com" | summarize count() by csUriStem Cuente las entradas de registro de IIS por dirección URL para el host www.contoso.com.
W3CIISLog | summarize sum(csBytes) by Computer Revisar el total de bytes recibidos por cada máquina IIS.

Supervisión de un servicio o demonio

Para supervisar el estado de un servicio Windows o demonio de Linux, habilite la solución Seguimiento de cambios e inventario en Azure Automation.

Azure Monitor no tiene capacidad para supervisar el estado de un servicio o demonio. Hay algunos métodos posibles que se pueden usar, como buscar eventos en el registro de eventos de Windows, pero este método no es confiable. También puede buscar el proceso asociado al servicio que se ejecuta en la máquina en la tabla VMProcess que ha rellenado VM Insights. Esta tabla solo se actualiza cada hora, lo que normalmente no es suficiente si desea usar estos datos para alertas.

Nota

La solución Change Tracking and Analysis es diferente de la característica Change Analysis en la información de máquinas virtuales. Esta característica está en versión preliminar pública y aún no se incluye en este escenario.

Para las diferentes opciones para habilitar la solución Change Tracking en las máquinas virtuales, consulte Habilitar Seguimiento de cambios e inventario. Esta solución incluye métodos para configurar máquinas virtuales a escala. Tiene que crear una cuenta de Azure Automation para admitir la solución.

Al habilitar el Seguimiento de cambios e inventario, se crean dos tablas nuevas en el área de trabajo de Log Analytics. Use estas tablas para las consultas de registros y las reglas de alertas de búsqueda de registros.

Tabla Descripción
ConfigurationChange Cambios en los datos de configuración de invitado
ConfigurationData Último estado notificado para los datos de configuración de invitado

Consultas de registros de ejemplo

  • Enumerar todos los servicios y demonios que se han iniciado recientemente.

    ConfigurationChange
    | where ConfigChangeType == "Daemons" or ConfigChangeType == "WindowsServices"
    | where SvcState == "Running"
    | sort by Computer, SvcName
    
  • Alerta cuando se detiene un servicio específico. Use esta consulta en una regla de alertas de búsqueda de registros.

    ConfigurationData
    | where SvcName == "W3SVC" 
    | where SvcState == "Stopped"
    | where ConfigDataType == "WindowsServices"
    | where SvcStartupType == "Auto"
    | summarize AggregatedValue = count() by Computer, SvcName, SvcDisplayName, SvcState, bin(TimeGenerated, 15m)
    
  • Alerta cuando se detiene uno de un conjunto de servicios. Use esta consulta en una regla de alertas de búsqueda de registros.

    let services = dynamic(["omskd","cshost","schedule","wuauserv","heathservice","efs","wsusservice","SrmSvc","CertSvc","wmsvc","vpxd","winmgmt","netman","smsexec","w3svc","sms_site_vss_writer","ccmexe","spooler","eventsystem","netlogon","kdc","ntds","lsmserv","gpsvc","dns","dfsr","dfs","dhcp","DNSCache","dmserver","messenger","w32time","plugplay","rpcss","lanmanserver","lmhosts","eventlog","lanmanworkstation","wnirm","mpssvc","dhcpserver","VSS","ClusSvc","MSExchangeTransport","MSExchangeIS"]);
    ConfigurationData
    | where ConfigDataType == "WindowsServices"
    | where SvcStartupType == "Auto"
    | where SvcName in (services)
    | where SvcState == "Stopped"
    | project TimeGenerated, Computer, SvcName, SvcDisplayName, SvcState
    | summarize AggregatedValue = count() by Computer, SvcName, SvcDisplayName, SvcState, bin(TimeGenerated, 15m)
    

Supervisión de un puerto

La supervisión de puertos comprueba que una máquina está escuchando en un puerto determinado. Aquí se describen dos estrategias posibles para la supervisión de puertos.

Tablas de agentes de dependencias

Si usa VM Insights con la opción Recopilación de procesos y dependencias habilitada, puede usar VMConnection y VMBoundPort para analizar las conexiones y los puertos de la máquina. La tabla VMBoundPort se actualiza cada minuto con cada proceso que se ejecuta en el equipo y el puerto en el que escucha. Puede crear una alerta de búsqueda de registros similar a la alerta de latido que falta para buscar procesos que se han detenido o para alertar cuando la máquina no escucha en un puerto determinado.

  • Revise el recuento de los puertos abiertos en las máquinas virtuales para evaluar qué máquinas virtuales tienen vulnerabilidades de configuración y seguridad.

    VMBoundPort
    | where Ip != "127.0.0.1"
    | summarize by Computer, Machine, Port, Protocol
    | summarize OpenPorts=count() by Computer, Machine
    | order by OpenPorts desc
    
  • Enumere los puertos vinculados en las máquinas virtuales para evaluar qué máquinas virtuales tienen vulnerabilidades de configuración y seguridad.

    VMBoundPort
    | distinct Computer, Port, ProcessName
    
  • Analizar la actividad de red por puerto para determinar cómo se configura la aplicación o el servicio.

    VMBoundPort
    | where Ip != "127.0.0.1"
    | summarize BytesSent=sum(BytesSent), BytesReceived=sum(BytesReceived), LinksEstablished=sum(LinksEstablished), LinksTerminated=sum(LinksTerminated), arg_max(TimeGenerated, LinksLive) by Machine, Computer, ProcessName, Ip, Port, IsWildcardBind
    | project-away TimeGenerated
    | order by Machine, Computer, Port, Ip, ProcessName
    
  • Revisar las tendencias de bytes enviados y recibidos para las máquinas virtuales.

    VMConnection
    | summarize sum(BytesSent), sum(BytesReceived) by bin(TimeGenerated,1hr), Computer
    | order by Computer desc
    | render timechart
    
  • Usar errores de conexión a lo largo del tiempo para determinar si la tasa de errores es estable o está cambiando.

    VMConnection
    | where Computer == <replace this with a computer name, e.g. 'acme-demo'>
    | extend bythehour = datetime_part("hour", TimeGenerated)
    | project bythehour, LinksFailed
    | summarize failCount = count() by bythehour
    | sort by bythehour asc
    | render timechart
    
  • Vincular tendencias de estado para analizar el comportamiento y el estado de conexión de una máquina.

    VMConnection
    | where Computer == <replace this with a computer name, e.g. 'acme-demo'>
    | summarize  dcount(LinksEstablished), dcount(LinksLive), dcount(LinksFailed), dcount(LinksTerminated) by bin(TimeGenerated, 1h)
    | render timechart
    

Administrador de conexiones

La característica Connection Monitor de Network Watcher se usa para probar las conexiones a un puerto en una máquina virtual. Una prueba comprueba que la máquina está escuchando en el puerto y que es accesible en la red.

Connection Manager requiere la extensión Network Watcher en la máquina cliente que inicia la prueba. No es necesario instalarla en la máquina que se está probando. Para obtener más información, consulte Tutorial: Supervisión de la comunicación de red mediante Azure Portal.

Hay un coste adicional por Connection Manager. Para más información, consulte Precios de Network Watcher.

Ejecución de un proceso en una máquina local

La supervisión de algunas cargas de trabajo requiere un proceso local. Un ejemplo es un script de PowerShell que se ejecuta en la máquina local para conectarse a una aplicación y recopilar o procesar datos. Puede usar Hybrid Runbook Worker, que forma parte de Azure Automation, para ejecutar un script de PowerShell local. No hay ningún cargo directo por Hybrid Runbook Worker, pero hay un coste por cada runbook que use.

El runbook puede acceder a cualquier recurso de la máquina local para recopilar los datos necesarios. No puede enviar datos directamente a Azure Monitor ni crear una alerta. Para crear una alerta, haga que el runbook escriba una entrada en un registro personalizado. Después, configure ese registro que Azure Monitor recopilará. Cree una regla de alertas de búsqueda de registros que se active en esa entrada de registro.

Pasos siguientes