Exercício: Listar as máquinas virtuais ativas recentemente que pararam de enviar logs

Concluído

Aqui, você escreverá consultas KQL para recuperar e transformar dados da tabela Heartbeat a fim de saber mais sobre o status das máquinas em seu ambiente.

1. Definir metas

Seu primeiro objetivo de análise de log é garantir a obtenção dos dados de todas as máquinas virtuais ativas em sua rede. Você deseja identificar as máquinas virtuais ativas que pararam de enviar dados para garantir visibilidade total de todas elas.

A fim de determinar quais máquinas pararam de enviar dados, você precisa de informações sobre o seguinte:

  • Todas as máquinas que registraram dados recentemente, mas não conforme o esperado nos últimos minutos.
  • Para uma análise mais detalhada, é útil saber qual agente de máquina virtual está sendo executado em cada máquina.

2. Avaliar logs

O Azure Monitor usa o agente do Azure Monitor para coletar dados sobre atividades e processos do sistema operacional executados nas máquinas virtuais.

Observação

Algumas máquinas mais antigas no ambiente ainda usam os agentes herdados para Windows e Linux do Log Analytics, que o Azure Monitor está substituindo.

Os agentes do Azure Monitor e do Log Analytics enviam dados de integridade de máquina virtual para a tabela Heartbeat uma vez por minuto.

Execute uma consulta take 10 simples na tabela Heartbeat para ver o tipo de dados que cada uma das colunas contém:

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

Heartbeat
| take 10

As colunas TimeGenerated, Computer, Category e OSType têm dados relevantes para a análise.

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

Agora, avalie como usar esses dados e quais operações de KQL podem ajudar na extração e transformação deles:

Coluna Descrição Meta de análise Operações de KQL relacionadas
TimeGenerated Indica quando a máquina virtual gerou cada log.
  • Identifique as máquinas recentemente ativas.
  • Encontre o último log gerado para cada máquina e verifique se ele foi gerado nos últimos minutos.
  • where TimeGenerated >ago(48h)
  • summarize max(TimeGenerated)
  • max_TimeGenerated < ago(5m)
Para saber mais, confira Operador where, Operador summarize, ago() e max() (função de agregação).
Computer Identificador exclusivo da máquina.
  • Resuma os resultados por máquina.
  • Agrupe as máquinas por versões de agente distintas.
  • summarize by Computer
  • summarize ComputersList=make_set(Computer)
Para saber mais, confira Operador summarize e make_set() (função de agregação).
Category O tipo do agente:
  • Azure Monitor Agent ou
  • Direct Agent, que representa os agentes do Log Analytics. O agente do Log Analytics para Windows também é chamado de MMA. O agente do Log Analytics para Linux também é chamado de OMS.
Identifique o agente em execução na máquina. Para simplificar os resultados e facilitar análises adicionais, como a filtragem, faça o seguinte:
  • Renomeie a coluna para AgentType (AgentType=Category)
  • Altere o valor Direct Agent para MMA em computadores Windows (AgentType= iif(AgentType == "Direct Agent" and OSType =="Windows", "MMA", AgentType)).
  • Altere o valor Direct Agent para OMS em computadores Linux (AgentType= iif(AgentType == "Direct Agent" and OSType =="Linux", "OMS", AgentType).
Para saber mais, confira iff() e Operador == (equals).
OSType O tipo de sistema operacional em execução na máquina virtual. Identifique o tipo no caso dos agentes do Log Analytics, que são diferentes para Windows e Linux. summarize by... OSType
Para obter mais informações, vejaoperador summarize.
Version O número da versão do agente que monitora a máquina virtual. Identifique a versão do agente em cada máquina. Renomeie a coluna para AgentVersion (AgentVersion=Version).

3. Escreva sua consulta

Escreva uma consulta que liste as máquinas que estiveram ativas nas últimas 48 horas, mas não registraram dados na tabela Heartbeat nos últimos cinco minutos.

  1. Recupere todos os logs das últimas 48 horas:

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

    O conjunto de resultados dessa consulta inclui logs de todas as máquinas que enviaram dados de log nas últimas 48 horas. Esses resultados provavelmente incluirão diversos logs de cada máquina ativa.

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

    Para entender quais máquinas não enviaram logs recentemente, você só precisa do último log enviado por cada máquina.

  2. Encontre o último log gerado por cada máquina e faça o resumo por computador, tipo de agente e sistema operacional:

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

    Agora você tem um log de cada máquina que registrou dados nas últimas 48 horas: o último log enviado por cada uma delas.

    Na linha summarize, você renomeou a coluna Category para AgentType, que descreve melhor as informações que você está vendo nessa coluna como parte da análise.

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

  3. Para ver quais máquinas não enviaram logs nos últimos cinco minutos, filtre todos os logs gerados nos últimos cinco minutos:

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

    O conjunto de resultados dessa consulta inclui o último log gerado por todas as máquinas que registraram dados nas últimas 48 horas, mas não inclui os logs gerados nos últimos cinco minutos. Em outras palavras, qualquer máquina que registrou dados nos últimos cinco minutos não é incluída no conjunto de resultados.

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

    Agora você tem os dados que precisa: uma lista de todas as máquinas que registraram dados nas últimas 48 horas, mas que não registraram dados conforme o esperado nos últimos cinco minutos. O conjunto de resultados consiste no conjunto de computadores que você deseja investigar mais detalhadamente.

  4. Manipule os resultados da consulta para apresentar as informações com mais clareza.

    Por exemplo, é possível organizar os logs por tempo de geração, do mais antigo para o mais recente, a fim de ver quais computadores ficaram mais tempo sem registrar dados.

    O valor Direct Agent na coluna AgentType informa que o agente do Log Analytics está sendo executado na máquina. Como o agente do Log Analytics para Windows também é chamado de OMS e, no Linux, ele é chamado de MMS, renomear o valor Direct Agent para MMA, no caso dos computadores Windows, e para OMS, no caso dos computadores Linux, simplifica os resultados e facilita a análise posterior, como a filtragem.

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

    Dica

    Use max_TimeGenerated para correlacionar a última pulsação da máquina que parou de enviar relatórios com os logs da máquina ou outros eventos ambientais que ocorreram no mesmo período. Correlacionar os logs dessa maneira pode ajudar a encontrar a causa raiz do problema que você 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.

Desafio: agrupar máquinas monitorando o agente e a versão dele

Compreender quais agentes e versões de agente estão sendo executados em suas máquinas pode ajudar na análise da causa raiz dos problemas e na identificação das máquinas que precisam ser atualizadas para um novo agente ou versão de agente.

Você consegue pensar em alguns ajustes rápidos que pode fazer na consulta desenvolvida acima para obter essas informações?

Considere o seguinte:

  • Quais informações adicionais você precisa extrair dos logs?
  • Qual operação de KQL pode ser usada para agrupar máquinas pela versão de agente executada?

Solução:

  1. Copie as primeiras cinco linhas da consulta e adicione a coluna Version à linha summarize da consulta para extrair as informações da versão do agente:

    Clique para executar a consulta no ambiente de demonstração do 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. Renomeie a coluna Version para AgentVersion a fim de obter maior clareza, adicione outra linha summarize a fim de encontrar combinações exclusivas de tipo de agente, versão de agente e tipo de sistema operacional e use a função agregada KQL make_set() para listar todos os computadores que executam cada combinação de tipo de agente e versão de agente:

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

    Agora você tem os dados que precisa: uma lista de combinações exclusivas de tipo de agente e versão do agente e o conjunto de todas as máquinas ativas recentemente que estão executando uma versão 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.