Exercício: Resumir as estatísticas de espaço livre por computador

Concluído

Aqui, você recuperará e transformará dados da tabela Perf usando consultas KQL para analisar o espaço livre dos dados de registro em log de máquinas no workspace do Log Analytics.

1. Definir metas

Lembre-se de que sua equipe de TI notou problemas recorrentes relacionados a espaço livre insuficiente em máquinas virtuais.

Para analisar o uso de espaço livre de máquinas em execução no ambiente de TI, você precisa das seguintes informações:

  • Espaço livre total disponível em cada máquina.
  • Porcentagem de espaço usado em cada máquina.

2. Avaliar logs

Como visto no exercício anterior, a tabela Perf fornece informações sobre o desempenho de componentes de hardware, sistemas operacionais e aplicativos.

Você notou que a coluna ObjectName da tabela Perf lista os nomes de todos os objetos sendo monitorados e que a coluna CounterName contém os nomes dos diversos contadores de desempenho coletados pelo Azure Monitor. Também viu que essas duas colunas contêm muitos valores, que aparecem diversas vezes.

Você executará uma consulta na tabela Perf para listar valores ObjectName distintos:

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

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

O conjunto de resultados desta consulta inclui todos os valores ObjectName atualmente na tabela:

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

Como você deseja analisar máquinas virtuais no cenário atual, deve utilizar os objetos LogicalDisk e Logical Disk (para monitorar a memória em um computador físico, é necessário utilizar o objeto memory). A razão pela qual há dois objetos com nomes semelhantes é que LogicalDisk é o nome do objeto nos registros do Windows e Logical Disk é usado nos registros do Linux.

Para listar os nomes distintos dos contadores coletados pelo Azure Monitor para os objetos LogicalDisk e Logical Disk, execute o seguinte:

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

O conjunto de resultados desta consulta inclui todos os contadores de desempenho coletados para os objetos LogicalDisk e 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.

Os contadores de desempenho que fornecem informações sobre o espaço usado e livre são % Used Space, % Free Space e Free Megabytes. Há dois contadores semelhantes (% Free Space e % Used Space) que são coletados dos registros do Windows e do Linux, respectivamente.

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. Para sua análise, você está interessado nos objetos LogicalDisk e Logical Disk. Monitore os discos lógicos em máquinas virtuais. where ObjectName == "LogicalDisk" or ObjectName == "Logical Disk"
Para obter mais informações, veja operador where e operador == (igual a).
CounterName Contém os nomes de todos os contadores de desempenho na tabela.
  • Monitore os contadores relacionados ao espaço livre.
  • Renomeie % Used Space como % Free Space (em paralelo, converta o CounterValue relacionado)
.
where CounterName == "Free Megabytes" or CounterName =="% Free Space" or CounterName == "% Used Space"
Para simplificar os resultados e facilitar análises adicionais:
  • Altere % Used Space para % Free Space (CounterName = iff(CounterName=="% Used Space", "% Free Space", CounterName)).
  • Altere Free Megabytes para OverallFreeSpaceInGB (CounterName= iff(CounterName=="Free Megabytes", "OverallFreeSpaceInGB", CounterName)).
Para obter mais informações, veja operador where e operador == (igual a).
InstanceName Lista as instâncias monitoradas do objeto monitorado. Monitore todas as unidades na máquina virtual. InstanceName == "_Total"
Para obter mais informações, veja operador where e operador == (igual a).
CounterValue A medida coletada para o contador. Recupere as medições de desempenho dos contadores de desempenho % Used Space, % Free Space e Free Megabytes.
  • CounterValue = iff(CounterName=="% Used Space", 100-CounterValue, CounterValue)
  • CounterValue = iff(CounterName=="Free Megabytes", (CounterValue)*0.001, CounterValue)
Para obter mais informações, veja operador where e operador == (igual a).

3. Escreva sua consulta

  1. Recupere todos os logs gerados no dia anterior que relataram os contadores de desempenho % Used Space, % Free Space e Free Megabytes para os objetos LogicalDisk e Logical Disk:

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

    O conjunto de resultados dessa consulta provavelmente inclui diversos registros para cada máquina da qual você coleta contadores de desempenho relacionados ao espaço livre.

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

  2. Filtre pelo último valor coletado de cada contador relatado por cada máquina virtual:

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

    Agora você tem o último valor relatado de cada contador relacionado ao espaço livre 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 a análise:

    1. Converta o valor do contador % Used Space em % Free Space (subtraindo o valor % Used Space de 100%) e altere o nome da coluna % Used Space para % Free Space:

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

      O conjunto de resultados dessa consulta apresenta a porcentagem de espaço livre nas máquinas Windows e Linux da mesma forma, o que torna as análises posteriores mais claras e fáceis.

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

    2. Converta Free Megabytes em Gigabytes (valor Free Megabytes * 0.001 = Gigabytes livres) e altere o rótulo de Free Megabytes para OverallFreeSpaceInGB:

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

      Agora é possível obter uma imagem clara do espaço livre total em cada máquina, em gigabytes, como uma porcentagem da memória total da máquina.

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

Desafio: Reunir as estatísticas de espaço livre de cada computador

Até agora, o conjunto de resultados da consulta inclui duas linhas para cada computador: uma mostrando o espaço livre geral em gigabytes e outra mostrando a porcentagem de espaço livre disponível.

É possível criar um dicionário que agrupe essas duas estatísticas de espaço livre para cada máquina virtual?

Dica:

Solução:

  1. Agrupe os pares chave-valor CounterName, CounterValue:

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

    Agrupar os pares chave-valor CounterName, CounterValue permite criar um dicionário de estatísticas de espaço livre para cada computador na próxima etapa.

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

  2. Crie um pacote de propriedades (dicionário), chamado SpaceStats, com todas as estatísticas de espaço livre coletadas para cada máquina, resuma por computador e filtre para máquinas com menos de 50% de espaço livre:

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

    O conjunto de resultados desta consulta resume as estatísticas de espaço livre por máquina, o que era o objetivo da análise de espaço livre.

    A última linha da consulta filtra máquinas com menos de 50% de espaço livre. É possível monitorar ou analisar mais detalhadamente ou reconfigurá-las para garantir que não fiquem sem espaço.

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