Ejercicio: Enumeración de máquinas virtuales activas recientemente que dejaron de enviar registros

Completado

Aquí, escribirá consultas KQL para recuperar y transformar datos de la tabla Heartbeat con el fin de obtener información sobre el estado de las máquinas de su entorno.

1. Establecimiento de objetivos

El primer objetivo del análisis de registros es asegurarse de que obtiene datos sobre todas las máquinas virtuales activas de la red. Quiere identificar las máquinas que dejan de enviar datos para asegurarse de que tiene plena visibilidad para todas las máquinas virtuales activas.

Para determinar qué máquinas han dejado de enviar datos, necesita información sobre:

  • Todas las máquinas que han registrado datos recientemente, pero que no han registrado datos según lo previsto en los últimos minutos.
  • Para hacer un análisis más profundo, es útil saber qué agente de máquina virtual se ejecuta en cada máquina.

2. Evaluación de los registros

Azure Monitor utiliza el agente de Azure Monitor para recopilar datos sobre la actividad y los procesos del sistema operativo que se ejecutan en máquinas virtuales.

Nota:

Algunas de las máquinas más antiguas de su entorno siguen utilizando los agentes heredados de Log Analytics para Windows y Linux, que están en desuso en Azure Monitor.

El agente de Azure Monitor y el agente de Log Analytics envían datos de estado de las máquinas virtuales a la tabla Heartbeat una vez por minuto.

Vamos a ejecutar una sencilla consulta take 10 en la tabla Heartbeat para ver el tipo de datos que contiene cada una de sus columnas:

Haga clic para ejecutar la consulta en el entorno de demostración de Log Analytics

Heartbeat
| take 10

Las columnas TimeGenerated, Computer, Category y OSType tienen datos pertinentes para nuestro análisis.

Screenshot that shows the results of a take 10 query on the Heartbeat table with the TimeGenerated, Computer, Category, and OSType columns highlighted.

Ahora vamos a evaluar cómo podemos usar estos datos y qué operaciones de KQL pueden ayudar a extraer y transformar los datos:

Columna Descripción Objetivo del análisis Operaciones de KQL relacionadas
TimeGenerated Indica cuándo generó la máquina virtual cada registro.
  • Identificar las máquinas activas recientemente.
  • Buscar el último registro generado para cada máquina y comprobar si se generó en los últimos minutos.
  • where TimeGenerated >ago(48h)
  • summarize max(TimeGenerated)
  • max_TimeGenerated < ago(5m)
Para obtener más información, vea Operador where, Operador summarize, ago() y max() (función de agregación).
Computer Identificador único de la máquina.
  • Resumir los resultados por máquina.
  • Agrupar las máquinas por versiones distintas del agente.
  • summarize by Computer
  • summarize ComputersList=make_set(Computer)
Para obtener más información, vea Operador summarize y make_set() (función de agregación).
Category Tipo de agente:
  • Azure Monitor Agent o
  • Direct Agent, que representa los agentes de Log Analytics. El agente de Log Analytics para Windows también se denomina MMA. El agente de Log Analytics para Linux también se denomina OMS.
Identificar el agente que se ejecuta en la máquina. Para simplificar los resultados y facilitar el análisis posterior, como el filtrado, haga lo siguiente:
  • Cambie el nombre de la columna a AgentType (AgentType=Category).
  • Cambie el valor de Direct Agent a MMA para las máquinas Windows (AgentType= iif(AgentType == "Direct Agent" and OSType =="Windows", "MMA", AgentType).
  • Cambie el valor de Direct Agent a OMS para las máquinas Linux (AgentType= iif(AgentType == "Direct Agent" and OSType =="Linux", "OMS", AgentType).
Para obtener más información, vea iff() y Operador == (igual a).
OSType Tipo de sistema operativo que se ejecuta en la máquina virtual. Identificar el tipo de agentes de Log Analytics, que son diferentes para Windows y Linux. summarize by... OSType
Para obtener más información, vea Operador summarize.
Version Número de versión del agente que supervisa la máquina virtual. Identificar la versión del agente de cada máquina. Cambie el nombre de la columna a AgentVersion (AgentVersion=Version).

3. Escritura de la consulta

Escriba una consulta que muestre una lista de las máquinas que han estado activas en las últimas 48 horas, pero que no han registrado datos en la tabla Heartbeat en los últimos cinco minutos.

  1. Recupere todos los registros de las últimas 48 horas:

    Haga clic para ejecutar la consulta en el entorno de demostración de Log Analytics

    Heartbeat // The table you’re querying
    | where TimeGenerated >ago(48h) // Time range for the query - in this case, logs generated in the past 48 hours
    

    El conjunto de resultados de esta consulta incluye registros de todas las máquinas que enviaron datos de registro en las últimas 48 horas. Es probable que estos resultados incluyan numerosos registros por cada máquina activa.

    Screenshot that shows the results of a query on the Heartbeat table for all records generated in the past 48 hours.

    Para saber qué máquinas no han enviado registros recientemente, solo necesita el último registro enviado por cada máquina.

  2. Busque el último registro generado por cada máquina y haga un resumen por equipo, tipo de agente y sistema operativo:

    Haga clic para ejecutar la consulta en el entorno de demostración de Log Analytics

    Heartbeat // The table you’re querying
    | where TimeGenerated >ago(48h) // Time range for the query - in this case, logs generated in the past 48 hours
    | summarize max(TimeGenerated) by Computer, AgentType=Category, OSType // Retrieves the last record generated by each computer and provides information about computer, agent type, and operating system
    

    Ahora tiene un registro de cada máquina que registró datos en las últimas 48 horas: el último registro que envió cada máquina.

    En la línea summarize, ha cambiado el nombre de la columna Category a AgentType, que describe mejor la información que está examinando en la columna para este análisis.

    Screenshot that shows the results of a query for the last log generated by each machine.

  3. Para ver qué máquinas no han enviado registros en los últimos cinco minutos, aplique un filtro para quitar todos los registros generados en los últimos cinco minutos:

    Haga clic para ejecutar la consulta en el entorno de demostración de Log Analytics

    Heartbeat // The table you’re querying
    | where TimeGenerated >ago(48h) // Time range for the query - in this case, logs generated in the past 48 hours
    | summarize max(TimeGenerated) by Computer, AgentType=Category, OSType // Retrieves the last record generated by each computer and provides information about computer, agent type, and operating system
    | where max_TimeGenerated < ago(5m) // Filters away all records generated in the last five minutes
    

    El conjunto de resultados de esta consulta incluye el último registro generado por todas las máquinas que registraron datos en las últimas 48 horas, pero no incluye los registros generados en los últimos cinco minutos. Dicho de otro modo, cualquier máquina que haya registrado datos en los últimos cinco minutos no está incluida en el conjunto de resultados.

    Screenshot that shows the results of a query that filters away all records generated in the last five minutes.

    Ahora tiene los datos que está buscando: una lista de todas las máquinas que han registrado datos en las últimas 48 horas, pero no han registrado datos según lo previsto en los últimos cinco minutos. El conjunto de resultados está formado por el conjunto de equipos que desea investigar más.

  4. Modifique los resultados de la consulta para presentar la información con más claridad.

    Por ejemplo, puede organizar los registros por la hora a la que se generaron (del más antiguo al más reciente) para ver qué equipos han pasado más tiempo sin registrar datos.

    El valor Direct Agent en la columna AgentType indica que el agente de Log Analytics se está ejecutando en la máquina. Dado que el agente de Log Analytics para Windows también se denomina MMA y el agente para Linux también se denomina OMS, cambiar el valor Direct Agent a MMA para las máquinas Windows y a OMS para las máquinas Linux simplifica los resultados y facilita un análisis posterior, como el filtrado.

    Haga clic para ejecutar la consulta en el entorno de demostración de Log Analytics

    Heartbeat // The table you’re querying
    | where TimeGenerated >ago(48h) // Time range for the query - in this case, logs generated in the past 48 hours 
    | summarize max(TimeGenerated) by Computer,AgentType=Category, OSType // Retrieves the last record generated by each computer and provides information about computer, agent type, and operating system
    | where max_TimeGenerated < ago(5m) // Filters away all records generated in the last five minutes
    | extend AgentType= iif(AgentType == "Direct Agent" and OSType =="Windows", "MMA", AgentType) // Changes the AgentType value from "Direct Agent" to "MMA" for Windows machines
    | extend AgentType= iif(AgentType == "Direct Agent" and OSType =="Linux", "OMS", AgentType) // Changes the AgentType value from "Direct Agent" to "OMS" for Linux machines
    | order by max_TimeGenerated asc // Sorts results by max_TimeGenerated from oldest to newest
    | project-reorder max_TimeGenerated,Computer,AgentType,OSType  // Reorganizes the order of columns in the result set
    

    Sugerencia

    Use max_TimeGenerated para poner en correlación el último latido de la máquina que dejó de generar informes con los registros de máquina u otros eventos del entorno que hayan tenido lugar más o menos a la vez. La correlación de los registros de esta manera puede ayudar a encontrar la causa principal del problema que está investigando.

    Screenshot that shows the results of a query that changes the AgentType values to MMA for Windows machines and to OMS for Linux machines.

Desafío: Agrupar máquinas supervisando el agente y la versión del agente

Saber qué agentes y qué versiones de los agentes se ejecutan en las máquinas puede ayudarle a analizar la causa principal de los problemas e identificar las máquinas que es necesario actualizar a un nuevo agente o a una nueva versión del agente.

¿Se le ocurren un par de ajustes rápidos que puede hacerle a la consulta que ha desarrollado en la sección anterior para obtener esta información?

Considere lo siguiente:

  • ¿Qué otra información necesita extraer de los registros?
  • ¿Qué operación de KQL puede usar para agrupar las máquinas por la versión del agente que están ejecutando?

Solución:

  1. Copie las cinco primeras líneas de la consulta y agregue la columna Version a la línea summarize de la consulta para extraer información de la versión del agente:

    Haga clic para ejecutar la consulta en el entorno de demostración de Log Analytics

    Heartbeat // The table you’re querying
    | where TimeGenerated >ago(48h) // Time range for the query - in this case, logs generated in the past 48 hours 
    | summarize max(TimeGenerated) by Computer,AgentType=Category, OSType, Version // Retrieves the last record generated by each computer and provides information about computer, agent type, operating system, and agent version 
    | extend AgentType= iif(AgentType == "Direct Agent" and OSType =="Windows", "MMA", AgentType) // Changes the AgentType value from "Direct Agent" to "MMA" for Windows machines
    | extend AgentType= iif(AgentType == "Direct Agent" and OSType =="Linux", "OMS", AgentType) // Changes the AgentType value from "Direct Agent" to "OMS" for Linux machines
    

    Screenshot that shows the results of the first five lines of the query we've built up in this exercise, with the Version column added to the Summarize line to add agent version information to the results.

  2. Cambie el nombre de la columna Version a AgentVersion para mayor claridad, agregue otra línea summarize para buscar combinaciones únicas del tipo de agente, la versión del agente y el tipo de sistema operativo, y use la función de agregado make_set() de KQL para mostrar una lista de todos los equipos que ejecutan cada combinación de tipo de agente y versión del agente:

    Haga clic para ejecutar la consulta en el entorno de demostración de Log Analytics

    Heartbeat // The table you’re querying
    | where TimeGenerated >ago(48h) // Time range for the query - in this case, logs generated in the past 48 hours 
    | summarize max(TimeGenerated) by Computer,AgentType=Category, OSType, Version // Retrieves the last record generated by each computer and provides information about computer, agent type, operating system, and agent version 
    | extend AgentType= iif(AgentType == "Direct Agent" and OSType =="Windows", "MMA", AgentType) // Changes the AgentType value from "Direct Agent" to "MMA" for Windows machines
    | extend AgentType= iif(AgentType == "Direct Agent" and OSType =="Linux", "OMS", AgentType) // Changes the AgentType value from "Direct Agent" to "OMS" for Linux machines
    | summarize ComputersList=make_set(Computer) by AgentVersion=Version, AgentType, OSType // Summarizes the result set by unique combination of agent type, agent version, and operating system, and lists the set of all machines running the specific agent version
    

    Ahora tiene los datos que busca: una lista de combinaciones únicas de tipo de agente y versión del agente, y el conjunto de todas las máquinas activas recientemente que ejecutan una versión específica de cada agente.

    Screenshot that shows the results of a query that creates a list of all machines running each unique combination of agent type, agent version, and operating system.