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 Heartbeat tabela 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.

Nota

Algumas das máquinas mais antigas em seu ambiente ainda usam os agentes herdados do Log Analytics Windows e Linux, que o Azure Monitor está preterindo.

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

Vamos executar uma consulta simples take 10 na Heartbeat tabela 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 TimeGeneratedcolunas , , ComputerCategorye OSType têm dados relevantes para a nossa 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 vamos avaliar como podemos usar esses dados e quais operações KQL podem ajudar a extrair e transformar os dados:

Column Description 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 obter mais informações, consulte onde operador, operador de resumo, 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 do agente.
  • summarize by Computer
  • summarize ComputersList=make_set(Computer)
Para obter mais informações, consulte operador de resumo e make_set() (função de agregação).
Category O tipo de agente:
  • Azure Monitor Agent quer
  • 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 Direct Agent valor para MMA máquinas Windows (AgentType= iif(AgentType == "Direct Agent" and OSType =="Windows", "MMA", AgentType).
  • Altere o Direct Agent valor para OMS máquinas Linux (AgentType= iif(AgentType == "Direct Agent" and OSType =="Linux", "OMS", AgentType).
Para obter mais informações, consulte iff() e == (equals) operador.
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 operador de resumo.
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 a sua consulta

Escreva uma consulta que liste as máquinas que estiveram ativas nas últimas 48 horas, mas não registraram dados na Heartbeat tabela 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.

    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 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.

    summarize Na linha, você renomeou a Category coluna para AgentType, que descreve melhor as informações que você está vendo na coluna como parte desta 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 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.

    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 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 Direct Agent valor 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 Direct Agent valor para máquinas Windows e para MMA máquinas Linux simplifica os resultados e OMS facilita análises adicionais, 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
    

    Gorjeta

    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.

    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 por agente de monitoramento 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 Versionsummarize coluna à linha 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
    

    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 para para maior clareza, adicione outra summarize linha 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 KQL make_set() para AgentVersion listar todos os computadores que executam cada combinação de tipo de agente e versão do agenteVersion:

    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.

    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.