Exercício – Identificar computadores com alto uso de CPU

Concluído

Aqui, você vai escrever consultas KQL para recuperar e transformar os dados da tabela Perf e entender melhor quais computadores atingiram ou estão se aproximando de sua capacidade total de computação e quais estão sendo subutilizados.

1. Definir metas

Para resolver problemas de desempenho, atenuar possíveis problemas e identificar oportunidades para operar com mais eficiência, você deseja analisar o uso da CPU (unidade de processamento central) de máquinas virtuais em seu ambiente de TI.

Para identificar problemas de desempenho relacionados à CPU e oportunidades para se tornar mais eficiente, você precisa de informações sobre:

  • Tendências de uso da CPU de cada computador ativo.
  • Uso da CPU de máquinas em horários de pico e de silêncio.

2. Avaliar logs

Os agentes do Windows e Linux enviam contadores de desempenho de componentes de hardware, sistemas operacionais e aplicativos em execução em computadores monitorados para a tabela Perf no Azure Monitor.

Vamos executar uma consulta simples na tabela Perf para recuperar logs das últimas 24 horas e ter uma noção do esquema de tabela e dos dados que a tabela contém:

Clique para executar a consulta no ambiente de demonstração do 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.

Você pode ver que as colunas TimeGenerated, Computer, ObjectName, CounterName, InstanceName e CounterValuecontêm dados que são relevantes para nossa análise.

A coluna ObjectName lista os nomes de todos os objetos para os quais o Azure Monitor coleta dados de computadores monitorados. A coluna CounterName contém os nomes dos vários contadores de desempenho coletados pelo Azure Monitor. Ambas as colunas contêm muitos valores, muitos dos quais aparecem várias vezes. Para ver claramente os valores distintos nessas colunas e determinar quais contadores são relevantes para a análise atual, vamos executar esta consulta:

Clique para executar a consulta no ambiente de demonstração do Log Analytics

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

Esta captura de tela mostra as combinações distintas dos valores ObjectName e CounterName na coluna CounterName nas últimas 24 horas:

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

O contador % Processor Time fornece uma compreensão da utilização do processador ou da CPU (Unidade de Processamento Central). Estas são as informações necessárias!

Vamos avaliar como podemos usar esses dados e quais operações KQL podem ajudar a extrair e transformar os dados:

Coluna Descrição Meta de análise Operações de KQL relacionadas
TimeGenerated Indica quando a máquina virtual gerou cada log. Defina o escopo de tempo da análise. where TimeGenerated > ago(1d)
Para obter mais informações, veja ago(), operador where e operadores numéricos.
Computer Computador do qual o evento foi coletado. Associe o uso da CPU a um computador específico. summarize... by Computer
Para obter mais informações, vejaoperador summarize.
ObjectName Contém os nomes de todos os objetos para os quais a tabela contém dados de desempenho. Monitore o desempenho do processador. where ObjectName == "Processor"
Para obter mais informações, veja operador == (igual a).
CounterName Contém os nomes de todos os contadores de desempenho na tabela. Monitorar o contador de desempenho % Processor Time . where CounterName == "% Processor Time"
Para obter mais informações, veja operador where e operador == (igual a).
InstanceName Lista as instâncias monitoradas do objeto monitorado. Monitore todos os núcleos do processador. where InstanceName == "_Total"
Para obter mais informações, veja operador where e operador == (igual a).
CounterValue A medida coletada para o contador. Recupere medidas de desempenho para o contador de desempenho % Processor Time. summarize min(CounterValue), avg(CounterValue), max(CounterValue), percentiles(CounterValue, 90,99)
Para obter mais informações, veja operador summarize e as funções de agregação min(), max(), avg() e percentiles().

3. Escreva sua consulta

Escreva uma consulta que resuma o uso médio, mínimo e máximo de CPU de todos os computadores no último dia.

  1. Recupere todos os logs gerados no último dia que relataram o contador de desempenho % Processor Time:

    Clique para executar a consulta no ambiente de demonstração do 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  
    

    Essa consulta recupera todos os logs relacionados ao total de medidas de tempo do processador do último dia.

    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. Encontre os valores mínimos, máximos e médios do contador e calcule os valores do contador de percentil 90 e 99 para cada computador:

    Clique para executar a consulta no ambiente de demonstração do 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 
    

    O conjunto de resultados dessa consulta mostra os valores de contador % Processor Time mínimo, máximo, médio, 90 e 99 percentil para cada computador para o qual há dados em seu workspace do Log Analytics.

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

  3. Filtre os resultados da consulta para entradas em que o valor do contador % Processor Time seja maior que 80 no intervalo de percentil 90 e 99:

    Clique para executar a consulta no ambiente de demonstração do 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
    

    O conjunto de resultados dessa consulta consiste em todos os computadores para os quais os principais valores % Processor Time de 10% e 15% são 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.

Desafio: adicionar informações do sistema operacional da tabela Pulsação aos resultados da consulta

Muitas vezes, você poderá obter uma melhor compreensão dos resultados da sua consulta correlacionando informações de uma tabela diferente com os resultados da sua a consulta usando o operador join. Para obter mais informações, veja operador join.

Você pode usar o operador join para adicionar informações sobre o sistema operacional em execução em cada computador, que está disponível na tabelaHeartbeat, como vimos no primeiro exercício?

Solução:

  1. Adicione informações da tabela Heartbeat sobre o sistema operacional em execução em cada um dos computadores nos resultados da consulta:

    Clique para executar a consulta no ambiente de demonstração do 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 
    

    Essa iteração da consulta adiciona as colunas Computer e OSType da tabela Heartbeat aos resultados da consulta anterior.

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

    A coluna Computer agora aparece duas vezes nos resultados da consulta: uma na consulta na tabelaPerf e uma na consulta na tabela Heartbeat. A coluna Computer da tabela Heartbeat foi renomeada Computer1, mas as duas tabelas contêm dados idênticos. Ter ambas as colunas permite correlacionar os resultados das duas tabelas, mas agora você pode filtrar a coluna duplicada.

  2. Remova a coluna Computer1 dos resultados da consulta:

    Clique para executar a consulta no ambiente de demonstração do 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 
    

    O conjunto de resultados dessa consulta lista todos os computadores que atingiram a capacidade completa da CPU e o sistema operacional em execução em cada computador, o que será útil para análise posterior.

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