Ejercicio: Resumen de estadísticas de espacio libre por equipo

Completado

Aquí, recuperará y transformará los datos de la tabla Perf, mediante consultas de KQL, para analizar el espacio libre de los equipos que registran datos en el área de trabajo de Log Analytics.

1. Establecimiento de objetivos

Recuerde que el equipo de TI ha observado problemas recurrentes relacionados con un espacio libre insuficiente en las máquinas virtuales.

Para analizar el uso de espacio libre de las máquinas que se ejecutan en el entorno de TI, necesita información sobre:

  • Espacio disponible total en cada máquina.
  • Porcentaje de espacio usado en cada máquina.

2. Evaluación de los registros

Como vimos en el ejercicio anterior, la tabla Perf proporciona información sobre el rendimiento de los componentes de hardware, los sistemas operativos y las aplicaciones.

Hemos observado que la columna ObjectName de la Perf tabla enumera los nombres de todos los objetos que se supervisan y la columna CounterName contiene los nombres de los distintos contadores de rendimiento que recopila Azure Monitor. También vimos que ambas columnas contienen muchos valores, muchos de los cuales aparecen varias veces.

Vamos a ejecutar una consulta en la tabla Perf para enumerar valores ObjectName distintivos:

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

Perf // The table you’re querying
| distinct ObjectName // Lists distinct ObjectName values

El conjunto de resultados de esta consulta incluye todos los valores ObjectName que se encuentran actualmente en la tabla:

Screenshot that shows the results of the Distinct Object Name query on the Perf table with the Logical Disk values highlighted.

En nuestro escenario, estamos interesados en analizar máquinas virtuales, por lo que los objetos que queremos examinar son LogicalDisk y Logical Disk (para supervisar la memoria en una máquina física, examinaría el objeto memory). La razón por la que hay dos objetos con nombre similar es que LogicalDisk es el nombre del objeto en los registros de Windows mientras que Logical Disk se usa en los registros de Linux.

Para enumerar los nombres distintivos de los contadores que recopila Azure Monitor para los objetos LogicalDisk y Logical Disk, ejecute:

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

Perf // The table you’re querying  
| where ObjectName == "LogicalDisk" or // The object name used in Windows records
ObjectName == "Logical Disk" // The object name used in Linux records
| distinct CounterName // Lists distinct CounterName values

El conjunto de resultados de esta consulta incluye todos los contadores de rendimiento recopilados para los objetos LogicalDisk y Logical Disk:

Screenshot that shows the results of a query that lists the distinct names of the counters Azure Monitor collects for the LogicalDisk (written as one word) and Logical Disk (written as two words) objects.

Los contadores de rendimiento que proporcionan información sobre el espacio libre y usado son % Used Space, % Free Space y Free Megabytes. Tenemos dos contadores similares (% Free Space y % Used Space) recopilados de registros de Windows y Linux, respectivamente.

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. Defina el ámbito de tiempo del análisis. where TimeGenerated > ago(1d)
Para obtener más información, consulte ago(),Operador where y Operadores numéricos.
Computer Equipo desde el que se recopiló el evento. Asocie el uso de CPU a un equipo específico. summarize... by Computer
Para obtener más información, vea Operador summarize.
ObjectName Contiene los nombres de todos los objetos para los que la tabla contiene datos de rendimiento. Para su análisis, está interesado en los objetos LogicalDisk y Logical Disk. Supervise los discos lógicos en máquinas virtuales. where ObjectName == "LogicalDisk" or ObjectName == "Logical Disk"
Para obtener más información, consulte Operador where y Operador == (igual que).
CounterName Contiene los nombres de todos los contadores de rendimiento de la tabla.
  • Supervise los contadores relacionados con el espacio libre.
  • Cambie el nombre de % Used Space a % Free Space (en paralelo, convierta el CounterValue relacionado)
.
where CounterName == "Free Megabytes" or CounterName =="% Free Space" or CounterName == "% Used Space"
Para simplificar los resultados y facilitar el análisis posterior:
  • Cambie % Used Space a % Free Space (CounterName = iff(CounterName=="% Used Space", "% Free Space", CounterName)).
  • Cambie Free Megabytes a OverallFreeSpaceInGB (CounterName= iff(CounterName=="Free Megabytes", "OverallFreeSpaceInGB", CounterName))
Para obtener más información, consulte Operador where y Operador == (igual que).
InstanceName Enumera las instancias supervisadas del objeto supervisado. Supervise todas las unidades de la máquina virtual. InstanceName == "_Total"
Para obtener más información, consulte Operador where y Operador == (igual que).
CounterValue Medida recopilada para el contador. Recupere las medidas de rendimiento de los contadores de rendimiento % Used Space, % Free Space y Free Megabytes.
  • CounterValue = iff(CounterName=="% Used Space", 100-CounterValue, CounterValue)
  • CounterValue = iff(CounterName=="Free Megabytes", (CounterValue)*0.001, CounterValue)
Para obtener más información, consulte Operador where y Operador == (igual que).

3. Escritura de la consulta

  1. Recupere todos los registros generados en el último día que notificaron los contadores de rendimiento % Used Space, % Free Space y Free Megabytes para los objetos LogicalDisk y Logical Disk:

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

    Perf
    | where TimeGenerated > ago(1d)
    | where ObjectName == "LogicalDisk" or // The object name used in Windows records
    ObjectName == "Logical Disk" // The object name used in Linux records
    | where CounterName == "Free Megabytes" or CounterName =="% Free Space" or CounterName == "% Used Space" // Filters for the performance counters Free Megabytes, % Free Space, and % Used Space performance counters
    | where InstanceName == "_Total"  // Retrieves data related to free space for all drives on a virtual machine  
    

    El conjunto de resultados de esta consulta probablemente incluye varios registros para cada máquina desde la que se recopilan contadores de rendimiento relacionados con el espacio libre.

    Screenshot that shows the results of a query for logs generated in the past day that report on virtual machine free space.

  2. Filtre por el último valor de contador recopilado para cada contador notificado por cada máquina virtual:

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

    Perf
    | where TimeGenerated > ago(1d)
    | where ObjectName == "LogicalDisk" or // The object name used in Windows records
    ObjectName == "Logical Disk" // The object name used in Linux records
    | where CounterName == "Free Megabytes" or CounterName =="% Free Space" or CounterName == "% Used Space" // Filters for the performance counters Free Megabytes, % Free Space, and % Used Space performance counters
    | where InstanceName == "_Total"  // Retrieves data related to free space for all drives on a virtual disk  
    | summarize arg_max(TimeGenerated, CounterValue) by Computer, CounterName // Retrieves the last counter value collected for each counter for every virtual machine
    

    Ahora tiene el último valor de contador notificado para cada contador relacionado con el espacio libre de cada máquina.

    Screenshot that shows the results of a query that filters for the last counter value collected for each counter every virtual machine.

  3. Para facilitar el análisis:

    1. Convierta el valor del contador % Used Space a % Free Space (restando el valor % Used Space del 100 %) y cambie el nombre de la columna % Used Space a % Free Space:

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

      Perf
      | where TimeGenerated > ago(1d)
      | where ObjectName == "LogicalDisk" or // The object name used in Windows records
      ObjectName == "Logical Disk" // The object name used in Linux records
      | where CounterName == "Free Megabytes" or CounterName =="% Free Space" or CounterName == "% Used Space" // Filters for the performance counters Free Megabytes, % Free Space, and % Used Space performance counters
      | where InstanceName == "_Total"  // Retrieves data related to free space for all drives on a virtual disk  
      | summarize arg_max(TimeGenerated, CounterValue) by Computer, CounterName // Retrieves the last counter value collected for each counter for every virtual machine
      | extend CounterValue = iff(CounterName=="% Used Space", 100-CounterValue, CounterValue) // Converts % Used Space to % Free Space
      | extend CounterName = iff(CounterName=="% Used Space", "% Free Space", CounterName) // Changes the column name from % Used Space to % Free Space
      

      El conjunto de resultados de esta consulta presenta el porcentaje de espacio libre en máquinas Windows y Linux de la misma manera, lo que hace que el análisis sea más claro y fácil.

      Screenshot that shows the results of a query that converts the Percentage Used Space counter value to Percentage Free Space.

    2. Convierta Free Megabytes a Gigabytes (valor Free Megabytes * 0,001 = Gigabytes libres) y vuelva a etiquetar Free Megabytes a OverallFreeSpaceInGB:

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

      Perf
      | where TimeGenerated > ago(1d)
      | where ObjectName == "LogicalDisk" or // The object name used in Windows records
      ObjectName == "Logical Disk" // The object name used in Linux records
      | where CounterName == "Free Megabytes" or CounterName =="% Free Space" or CounterName == "% Used Space" // Filters for the performance counters Free Megabytes, % Free Space, and % Used Space performance counters
      | where InstanceName == "_Total"  // Retrieves data related to free space for all drives on a virtual disk  
      | summarize arg_max(TimeGenerated, CounterValue) by Computer, CounterName // Retrieves the last counter value collected for each counter for every virtual machine
      | extend CounterValue = iff(CounterName=="% Used Space", 100-CounterValue, CounterValue) // Converts % Used Space to % Free Space
      | extend CounterName = iff(CounterName=="% Used Space", "% Free Space", CounterName) // Changes the column name from % Used Space to % Free Space
      | extend CounterValue = iff(CounterName=="Free Megabytes", (CounterValue)*0.001, CounterValue) // Converts megabytes to gigabytes
      | extend CounterName= iff(CounterName=="Free Megabytes", "OverallFreeSpaceInGB", CounterName) // Changes the column name fromFree Megabytes to OverallFreeSpaceInGB
      

      Ahora puede obtener una imagen clara del espacio libre total en cada máquina en gigabytes y como porcentaje de la memoria total de la máquina.

      Screenshot that shows the results of a query that converts the Free Megabytes column to Overall Free Space In Gigabytes.

Desafío: Agrupación de estadísticas de espacio libre para cada equipo

El conjunto de resultados de nuestra consulta hasta ahora incluye dos líneas para cada equipo: una línea muestra el espacio libre total en gigabytes y el otro muestra el porcentaje de espacio libre disponible.

¿Puede crear un diccionario que incluya estas dos estadísticas de espacio libre juntas para cada máquina virtual?

Sugerencia:

Solución:

  1. Agrupe los pares clave-valor CounterName, CounterValue:

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

    Perf
    | where TimeGenerated > ago(1d)
    | where ObjectName == "LogicalDisk" or // The object name used in Windows records
    ObjectName == "Logical Disk" // The object name used in Linux records
    | where CounterName == "Free Megabytes" or CounterName =="% Free Space" or CounterName == "% Used Space" // Filters for the performance counters Free Megabytes, % Free Space, and % Used Space performance counters
    | where InstanceName == "_Total"  // Retrieves data related to free space for all drives on a virtual disk  
    | summarize arg_max(TimeGenerated, CounterValue) by Computer, CounterName // Retrieves the last counter value collected for each counter for every virtual machine
    | extend CounterValue = iff(CounterName=="% Used Space", 100-CounterValue, CounterValue) // Converts % Used Space to % Free Space
    | extend CounterName = iff(CounterName=="% Used Space", "% Free Space", CounterName) // Changes the column name from % Used Space to % Free Space
    | extend CounterValue = iff(CounterName=="Free Megabytes", (CounterValue)*0.001, CounterValue) // Converts megabytes to gigabytes
    | extend CounterName= iff(CounterName=="Free Megabytes", "OverallFreeSpaceInGB", CounterName) // Changes the column name fromFree Megabytes to OverallFreeSpaceInGB
    | extend packed = pack(CounterName, CounterValue) // Groups together CounterName-CounterValue key-value pairs
    

    La agrupación de pares clave-valor CounterName, CounterValue permite crear un diccionario de estadísticas de espacio libre para cada equipo en el paso siguiente.

    Screenshot that shows the results of a query that groups together Counter Name and Counter Value key-value pairs.

  2. Cree un contenedor de propiedades (diccionario), denominado SpaceStats, de todas las estadísticas de espacio libre recopiladas para cada máquina, resuma por equipo y filtre las máquinas con menos del 50 % de espacio libre:

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

    Perf
    | where TimeGenerated > ago(1d)
    | where ObjectName == "LogicalDisk" or // The object name used in Windows records
    ObjectName == "Logical Disk" // The object name used in Linux records
    | where CounterName == "Free Megabytes" or CounterName =="% Free Space" or CounterName == "% Used Space" // Filters for the performance counters Free Megabytes, % Free Space, and % Used Space performance counters
    | where InstanceName == "_Total"  // Retrieves data related to free space for all drives on a virtual disk  
    | summarize arg_max(TimeGenerated, CounterValue) by Computer, CounterName // Retrieves the last counter value collected for each counter for every virtual machine
    | extend CounterValue = iff(CounterName=="% Used Space", 100-CounterValue, CounterValue) // Converts % Used Space to % Free Space
    | extend CounterName = iff(CounterName=="% Used Space", "% Free Space", CounterName) // Changes the column name from % Used Space to % Free Space
    | extend CounterValue = iff(CounterName=="Free Megabytes", (CounterValue)*0.001, CounterValue) // Converts megabytes to gigabytes
    | extend CounterName= iff(CounterName=="Free Megabytes", "OverallFreeSpaceInGB", CounterName) // Changes the column name fromFree Megabytes to OverallFreeSpaceInGB
    | extend packed = pack(CounterName, CounterValue) // Groups together CounterName-CounterValue key-value pairs
    | summarize SpaceStats = make_bag(packed) by Computer // Summarizes free space statstics by computer
    | where SpaceStats.["% Free Space"]<= 50
    

    El conjunto de resultados de esta consulta resume las estadísticas de espacio libre por máquina, que era el objetivo del análisis de espacio libre.

    La última línea de la consulta filtra las máquinas con menos de 50 % de espacio libre. Es posible que quiera supervisarlas o analizarlas más detenidamente, o volver a configurarlas para asegurarse de que no se queden sin espacio.

    Screenshot that shows the results of a query that summarizes free space statistics by machine.