Exercício - Listar 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 para obter informações sobre o status das máquinas em seu ambiente.

1. Estabeleça metas

Sua primeira meta de análise de log é garantir que você esteja recebendo dados sobre todas as máquinas virtuais ativas em sua rede. Você deseja identificar máquinas que param de enviar dados para garantir que você tenha visibilidade total de todas as máquinas virtuais ativas.

Para determinar quais máquinas pararam de enviar dados, você precisa de informações sobre:

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

2. Avalie os logs

O Azure Monitor usa o Agente do Azure Monitor para coletar dados sobre atividades e processos do sistema operacional em execução dentro de máquinas virtuais.

Observação

Algumas das máquinas mais antigas no seu ambiente ainda utilizam os agentes legados do Log Analytics Windows e Linux, que o Azure Monitor está a descontinuar.

O Azure Monitor Agent e o Log Analytics Agent enviam dados de integridade da máquina virtual para a tabela Heartbeat uma vez por minuto.

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

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

Heartbeat
| take 10

As colunas TimeGenerated, Computer, Categorye OSType têm dados relevantes para nossa análise.

Captura de tela que mostra os resultados de uma consulta take 10 na tabela Heartbeat com as colunas TimeGenerated, Computer, Category e OSType realçadas.

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

Coluna Descrição Objetivo da análise Operações KQL relacionadas
TimeGenerated Indica quando a máquina virtual gerou cada log.
  • Identifique máquinas ativas recentemente.
  • 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 mais informações, veja onde o operador, resume o operador, ago(), e max() (função de agregação).
Computer Identificador único da máquina.
  • Resuma os resultados por máquina.
  • Agrupe máquinas por versões distintas de agente.
  • summarize by Computer
  • summarize ComputersList=make_set(Computer)
Para obter mais informações, consulte o operador resumir e a função de agregação make_set() .
Category O tipo de 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:
  • Renomeie a coluna para AgentType (AgentType=Category)
  • Altere o valor Direct Agent para MMA para máquinas Windows (AgentType= iif(AgentType == "Direct Agent" and OSType =="Windows", "MMA", AgentType).
  • Altere o valor Direct Agent para OMS para máquinas Linux (AgentType= iif(AgentType == "Direct Agent" and OSType =="Linux", "OMS", AgentType).
Para obter mais informações, consulte iff() e o operador == (igual a).
OSType O tipo de sistema operacional em execução na máquina virtual. Identifique o tipo de agente para agentes do Log Analytics, que são diferentes para Windows e Linux. summarize by... OSType
Para obter mais informações, consulte o operador de resumo .
Version O número da versão do agente que monitoriza a máquina virtual. Identifique a versão do agente em cada máquina. Renomeie a coluna para AgentVersion (AgentVersion=Version).

3. Escreva a 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 incluem vários logs para cada máquina ativa.

    Captura de tela que mostra os resultados de uma consulta na tabela Heartbeat para todos os registros gerados nas últimas 48 horas.

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

  2. Encontre o último log gerado por cada máquina e resuma 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 que cada máquina enviou.

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

    Captura de tela que mostra os resultados de uma consulta para o último log gerado por cada máquina.

  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 logs gerados nos últimos cinco minutos. Em outras palavras, qualquer máquina que registrou dados nos últimos cinco minutos não está incluída no conjunto de resultados.

    Captura de tela que mostra os resultados de uma consulta que filtra todos os registros gerados nos últimos cinco minutos.

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

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

    Por exemplo, você pode organizar os logs por tempo gerado - do mais antigo para o mais recente - para ver quais computadores ficaram mais tempo sem registrar dados.

    O valor Direct Agent na coluna AgentType informa que o Agente do Log Analytics está em execução na máquina. Como o Log Analytics Agent para Windows também é chamado de OMS e para Linux o agente também é chamado de MMS, renomear o valor de Direct Agent para MMA para máquinas Windows e OMS para máquinas Linux simplifica os resultados e facilita análises adicionais, como 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 relatar com logs da máquina ou outros eventos ambientais que ocorreram na mesma época. Correlacionar logs dessa maneira pode ajudar a encontrar a causa raiz do problema que você está investigando.

    Captura de tela que mostra os resultados de uma consulta que altera os valores AgentType para MMA para máquinas Windows e OMS para máquinas Linux.

Desafio: Agrupar máquinas por agente de monitorização e versão do agente

Compreender quais agentes e versões de agente estão em execução em suas máquinas pode ajudá-lo a analisar a causa raiz dos problemas e identificar quais máquinas você precisa atualizar para um novo agente ou nova versão do agente.

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

Considere o seguinte:

  • Que informações adicionais precisa de extrair dos seus registos?
  • Qual operação do KQL você pode usar para agrupar máquinas pela versão do agente que elas estão executando?

Solução:

  1. Copie as cinco primeiras linhas da consulta e adicione a coluna Version à linha summarize da consulta para extrair informações de 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
    

    Captura de tela que mostra os resultados das cinco primeiras linhas da consulta que criamos neste exercício, com a coluna Versão adicionada à linha Resumir para adicionar informações de versão do agente aos resultados.

  2. Renomeie a coluna Version para AgentVersion para maior clareza, adicione outra linha summarize para encontrar combinações exclusivas de tipo de agente, versão do agente e tipo de sistema operacional e use a função de agregação de make_set() KQL para listar todos os computadores que executam cada combinação de tipo de agente e 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
    | 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 está procurando: 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.

    Captura de tela que mostra os resultados de uma consulta que cria uma lista de todas as máquinas que executam cada combinação exclusiva de tipo de agente, versão do agente e sistema operacional.