Ejercicio: Identificación de máquinas con un uso elevado de CPU

Completado

Aquí, escribirá consultas KQL para recuperar y transformar datos de la tabla Perf para comprender qué máquinas han alcanzado su capacidad de proceso total o están a punto de alcanzarla y qué máquinas se están infrautilizando.

1. Establecimiento de objetivos

Para solucionar problemas de rendimiento, mitigar los posibles incidencias e identificar las oportunidades de funcionar de forma más eficaz, quiere analizar el uso de la unidad de procesamiento central (CPU) de las máquinas virtuales en el entorno de TI.

Para identificar incidencias y oportunidades de rendimiento relacionados con la CPU para que sean más eficientes, necesita información sobre:

  • Tendencias de uso de CPU de cada máquina activa.
  • Uso de CPU de máquinas en horas punta y períodos de tranquilidad.

2. Evaluación de los registros

Los agentes de Windows y Linux envían contadores de rendimiento de componentes de hardware, sistemas operativos y aplicaciones que se ejecutan en máquinas supervisadas a la tabla Perf de Azure Monitor.

Vamos a ejecutar una consulta sencilla en la tabla Perf para recuperar registros de las últimas 24 horas y obtener una idea del esquema de la tabla y de los datos que esta contiene:

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

Perf  // The table you’re querying
| where TimeGenerated > ago(1d) // Filters for entries generated in the past day 

Screenshot that shows the results of a query on the Perf table with the ObjectName, CounterName, InstanceName, and CounterValue columns highlighted.

Puede ver que las columnas TimeGenerated, Computer, ObjectName, CounterName, InstanceName y CounterValue contienen datos pertinentes para nuestro análisis.

En la columna ObjectName se enumeran los nombres de todos los objetos para los que Azure Monitor recopila datos de las máquinas supervisadas. La columna CounterName contiene los nombres de los distintos contadores de rendimiento que Azure Monitor recopila. Ambas columnas contienen muchos valores, muchos de los cuales aparecen varias veces. Para ver claramente los valores distintos de estas columnas y determinar qué contadores son pertinentes para el análisis actual, vamos a ejecutar esta consulta:

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

Perf // The table you’re querying
| distinct ObjectName,CounterName // Lists distinct combinations of ObjectName and CounterName values

En esta captura de pantalla se muestran las distintas combinaciones de los valores ObjectName y CounterName en la columna CounterName en las últimas 24 horas:

Screenshot that shows the results of the distinct CounterName query on the Perf table with the Percentage Processor Time value highlighted.

El contador % Processor Time le proporciona una descripción del uso del procesador o de la unidad de procesamiento central (CPU). Esta es la información que necesita.

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. Supervise el rendimiento del procesador. where ObjectName == "Processor"
Para obtener más información, vea Operador == (igual a).
CounterName Contiene los nombres de todos los contadores de rendimiento de la tabla. Supervise el contador de rendimiento % Processor Time . where CounterName == "% Processor Time"
Para obtener más información, consulte Operador where y Operador == (igual que).
InstanceName Enumera las instancias supervisadas del objeto supervisado. Supervise todos los núcleos del procesador. where 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 del contador de rendimiento % Processor Time. summarize min(CounterValue), avg(CounterValue), max(CounterValue), percentiles(CounterValue, 90,99)
Para obtener más información, vea Operador summarize y las funciones de agregación min(), max(), avg() y percentiles().

3. Escritura de la consulta

Escriba una consulta que resuma el uso medio, mínimo y máximo de CPU de todas las máquinas durante el último día.

  1. Recupere todos los registros generados en el último día que el contador de rendimiento % Processor Timenotificó:

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

    Perf  // The table you’re querying
    | where TimeGenerated > ago(1d) and ObjectName == "Processor" and CounterName == "% Processor Time" and InstanceName == "_Total" // Filters for entries generated in the past day related to total processor time measurements  
    

    Esta consulta recupera todos los registros relacionados con las medidas de tiempo total del procesador desde el último día.

    Screenshot that shows the results of a query for all logs generated in the past day that reported the Percentage Processor Time performance counter.

  2. Busque los valores de contador mínimo, máximo y promedio y calcule los valores del contador de percentil 90 y 99 para cada equipo:

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

    Perf  // The table you’re querying
    | where TimeGenerated > ago(1d) and ObjectName == "Processor" and CounterName == "% Processor Time" and InstanceName == "_Total" // Filters for entries generated in the past day related to total processor time measurements  
    | summarize min(CounterValue), avg(CounterValue), max(CounterValue), percentiles(CounterValue, 90,99) by Computer // Presents the minimum, maximum, average, 90th and 99th percentile counter values for each computer 
    

    El conjunto de resultados de esta consulta muestra los valores del contador % Processor Time mínimo, máximo, promedio y de los percentiles 90 y 99 para cada equipo para el que hay datos en el área de trabajo de Log Analytics.

    Screenshot that shows the minimum, maximum, average, 90th and 99th percentile results of the query on the Perf table.

  3. Filtre los resultados de la consulta para las entradas en las que el valor del contador % Processor Time sea superior a 80 en el intervalo de los percentiles 90 y 99:

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

    Perf  // The table you’re querying
    | where TimeGenerated > ago(1d) and ObjectName == "Processor" and CounterName == "% Processor Time" and InstanceName == "_Total" // Filters for entries generated in the past day related to total processor time measurements  
    | summarize min(CounterValue), avg(CounterValue), max(CounterValue), percentiles(CounterValue, 90,99) by Computer // Presents the minimum, maximum, average, 90th and 99th percentile counter values for each computer 
    | where percentile_CounterValue_90 > 80 and percentile_CounterValue_99 > 80 // Filters previous query results for instances where the 90th and 99th percentile counters are higher than 80
    

    El conjunto de resultados de esta consulta consta de todos los equipos para los que los valores superiores del 10 % y el 15 % % Processor Time son superiores a 80.

    Screenshot that shows the results of a query that filters for entries where the Percentage Processor Time counter value is higher than 80 in the 90th and 99th percentile range.

Desafío: incorporación de información del sistema operativo de la tabla Heartbeat a los resultados de la consulta

A menudo, los resultados de la consulta se pueden comprender mejor mediante la correlación de información de una tabla diferente a los resultados de la consulta mediante el operador join. Para más información, consulte el operador join.

¿Puede usar el operador join para agregar información sobre el sistema operativo que se ejecuta en cada equipo, que está disponible en la tabla Heartbeat, como vimos en el primer ejercicio?

Solución:

  1. Agregue información de la tabla Heartbeat sobre el sistema operativo que se ejecuta en cada uno de los equipos de los resultados de la consulta:

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

    Perf  // The table you’re querying
    | where TimeGenerated > ago(1d) and ObjectName == "Processor" and CounterName == "% Processor Time" and InstanceName == "_Total" // Filters for entries generated in the past day related to total processor time measurements  
    | summarize min(CounterValue), avg(CounterValue), max(CounterValue), percentiles(CounterValue, 90,99) by Computer // Presents the minimum, maximum, average, 90th and 99th percentile counter values for each computer 
    | where percentile_CounterValue_90 > 80 and percentile_CounterValue_99 > 80 // Filters previous query results for instances where the 90th and 99th percentile counters are higher than 50
    | join kind=inner (Heartbeat // Introduces data from the "Heartbeat" table to the previous query results
    | where TimeGenerated > ago(1d) // Time range for the data added from the "Heartbeat" table
    | distinct Computer, OSType) on Computer // Adds distinct combinations of computer and operating system 
    

    Esta iteración de la consulta agrega las columnas Computer y OSType de la tabla Heartbeat a los resultados de la consulta anterior.

    Screenshot that shows the results of a query that adds operating system information from the Heartbeat table to the previous query results.

    La columna Computer aparece ahora dos veces en los resultados de la consulta: una vez por la consulta de la tabla Perf y una vez por la consulta de la tabla Heartbeat. Se ha cambiado el nombre de la columna Computer de la tabla Heartbeat a Computer1, pero las dos tablas contienen datos idénticos. Tener ambas columnas permite correlacionar los resultados de las dos tablas, pero ahora puede filtrar la columna duplicada.

  2. Quite la columna Computer1 de los resultados de la consulta:

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

    Perf  // The table you’re querying
    | where TimeGenerated > ago(1d) and ObjectName == "Processor" and CounterName == "% Processor Time" and InstanceName == "_Total" // Filters for entries generated in the past day related to total processor time measurements  
    | summarize min(CounterValue), avg(CounterValue), max(CounterValue), percentiles(CounterValue, 90,99) by Computer // Presents the minimum, maximum, average, 90th and 99th percentile counter values for each computer 
    | where percentile_CounterValue_90 > 80 and percentile_CounterValue_99 > 80 // Filters previous query results for instances where the 90th and 99th percentile counters are higher than 50
    | join kind=inner (Heartbeat // Introduces data from the "Heartbeat" table to the previous query results
    | where TimeGenerated > ago(1d) // Time range for the data added from the "Heartbeat" table
    | distinct Computer, OSType) on Computer // Adds distinct combinations of computer and operating system 
    | project-away Computer1 // Removes the "Computer1" column from the query results 
    

    El conjunto de resultados de esta consulta enumera todos los equipos que alcanzaron su capacidad de CPU completa y el sistema operativo que se ejecuta en cada equipo, lo que será útil para su posterior análisis.

    Screenshot that shows the results of a query that removes the Computer 1 column from the previous query results.