Exercice - Lister les machines virtuelles récemment actives qui ont cessé d’envoyer des journaux

Effectué

Ici, vous écrivez des requêtes KQL pour récupérer et transformer des données de la table Heartbeat afin d’obtenir des insights sur l’état des machines dans votre environnement.

1. Définir des objectifs

Votre premier objectif d’analyse des journaux est de faire en sorte d’obtenir des données sur toutes les machines virtuelles actives de votre réseau. Vous voulez identifier les machines qui cessent d’envoyer des données pour avoir une visibilité complète de toutes les machines virtuelles actives.

Pour déterminer les machines qui ont cessé d’envoyer des données, vous avez besoin d’informations sur :

  • Toutes les machines qui ont récemment journalisé des données, mais ne l’ont plus fait au cours des dernières minutes.
  • Pour une analyse approfondie, vous devez déterminer l’agent de machine virtuelle qui s’exécute sur chaque machine.

2. Évaluer les journaux

Azure Monitor utilise l’agent Azure Monitor pour collecter des données sur les activités et les processus de système d’exploitation s’exécutant sur les machines virtuelles.

Remarque

Certaines machines plus anciennes de votre environnement utilisent toujours les agents Windows et Linux Log Analytics hérités, dépréciés par Azure Monitor.

L’agent Azure Monitor et l’agent Log Analytics envoient les données d’intégrité des machines virtuelles à la table Heartbeat une fois par minute.

Nous exécutons une requête take 10 simple sur la table Heartbeat pour voir le type de données que contient chacune de ses colonnes :

Cliquez pour exécuter la requête dans l’environnement de démo Log Analytics

Heartbeat
| take 10

Les colonnes TimeGenerated, Computer, Category et OSType ont toutes des données pertinentes pour notre analyse.

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

Nous déterminons maintenant comment utiliser ces données et les opérations KQL qui permettent d’extraire et de transformer les données :

Colonne Description Objectif d’analyse Opérations KQL associées
TimeGenerated Indique quand la machine virtuelle a généré chaque journal.
  • Identifie les machines récemment actives.
  • Recherche le dernier journal généré pour chaque ordinateur et vérifie s’il a été généré dans les dernières minutes.
  • where TimeGenerated >ago(48h)
  • summarize max(TimeGenerated)
  • max_TimeGenerated < ago(5m)
Pour plus d’informations, consultez l’opérateur where, l’opérateur summarize, ago() et max() (fonction d’agrégation).
Computer Identificateur unique de la machine.
  • Récapitule les résultats par machine.
  • Regroupe des machines selon les différentes versions de l’agent.
  • summarize by Computer
  • summarize ComputersList=make_set(Computer)
Pour plus d’informations, consultez l’opérateur summarize et make_set() (fonction d’agrégation).
Category Type de l’agent :
  • Azure Monitor Agent ou
  • Direct Agent, qui représente les agents Log Analytics. L’agent Log Analytics pour Windows est également appelé MMA. L’agent Log Analytics pour Linux est également appelé OMS.
Identifiez l’agent s’exécutant sur la machine. Pour simplifier les résultats et faciliter l’analyse, comme le filtrage :
  • Renommez la colonne en AgentType (AgentType=Category)
  • Remplacez la valeur Direct Agent par MMA pour les machines Windows (AgentType= iif(AgentType == "Direct Agent" and OSType =="Windows", "MMA", AgentType).
  • Remplacez la valeur Direct Agent par OMS pour les machines Linux (AgentType= iif(AgentType == "Direct Agent" and OSType =="Linux", "OMS", AgentType).
Pour plus d’informations, consultez iff() et l’opérateur == (égal).
OSType Type de système d’exploitation s’exécutant sur la machine virtuelle. Identifie le type des agents Log Analytics, qui sont différents pour Windows et Linux. summarize by... OSType
Pour plus d’informations, consultez l’opérateur summarize.
Version Numéro de version de l’agent qui monitore la machine virtuelle. Identifie la version de l’agent sur chaque machine. Renommez la colonne en AgentVersion (AgentVersion=Version).

3. Écrire votre requête

Écrivez une requête pour lister les machines qui ont été actives au cours des dernières 48 heures, mais qui n’ont pas journalisé de données dans la table Heartbeat dans les cinq dernières minutes.

  1. Récupérez tous les journaux des dernières 48 heures :

    Cliquez pour exécuter la requête dans l’environnement de démo 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
    

    Le jeu de résultats de cette requête comprend les journaux de toutes les machines qui ont envoyé des données de journal dans les dernières 48 heures. Ces résultats sont susceptibles de présenter de nombreux journaux pour chaque machine active.

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

    Pour déterminer les machines qui n’ont pas envoyé de journaux récemment, vous avez seulement besoin du dernier journal envoyé par chaque machine.

  2. Recherchez le dernier journal généré par chaque machine et faites la synthèse par ordinateur, type d’agent et système d’exploitation :

    Cliquez pour exécuter la requête dans l’environnement de démo 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
    

    Vous avez maintenant un journal pour chaque machine qui a journalisé les données dans les dernières 48 heures : le dernier journal envoyé par chaque machine.

    Dans la ligne summarize, vous avez renommé la colonne Category en AgentType, qui décrit mieux les informations que vous cherchez dans la colonne pour cette analyse.

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

  3. Pour voir les machines qui n’ont pas envoyé de journaux dans les cinq dernières minutes, masquez tous les journaux générés dans les cinq dernières minutes :

    Cliquez pour exécuter la requête dans l’environnement de démo 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
    

    Le jeu de résultats de cette requête comprend le dernier journal généré par toutes les machines qui ont journalisé des données dans les dernières 48 heures, mais pas les journaux générés dans les cinq dernières minutes. En d’autres termes, les machines qui ont journalisé des données dans les cinq dernières minutes ne sont pas dans le jeu de résultats.

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

    Vous avez maintenant les données que vous cherchez : une liste de toutes les machines qui ont journalisé des données dans les dernières 48 heures, mais qui n’ont pas journalisé de données dans les cinq dernières minutes. Le jeu de résultats comprend l’ensemble d’ordinateurs que vous voulez examiner en détail.

  4. Manipulez les résultats de la requête pour présenter plus clairement les informations.

    Par exemple, vous pouvez organiser les journaux en fonction de l’heure à laquelle ils ont été générés, du plus ancien au plus récent, pour voir les ordinateurs qui ont passé le plus de temps sans journaliser de données.

    La valeur Direct Agent de la colonne AgentType vous indique que l’agent Log Analytics s’exécute sur la machine. L’agent Log Analytics étant également appelé OMS pour Windows et MMS pour Linux, afin de faciliter l’analyse (comme le filtrage), simplifiez les résultats en remplaçant la valeur Direct Agent par MMA pour les machines Windows et par OMS pour les machines Linux.

    Cliquez pour exécuter la requête dans l’environnement de démo 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
    

    Conseil

    Utilisez max_TimeGenerated pour mettre en corrélation la dernière pulsation de la machine qui a cessé de rapporter avec les journaux de la machine ou d’autres événements environnementaux qui se sont produits au même moment. Cette mise en corrélation des journaux peut vous aider à trouver la cause racine du problème que vous examinez.

    Screenshot that shows the results of a query that changes the AgentType values to MMA for Windows machines and to OMS for Linux machines.

Défi : regrouper les machines par agent de monitoring et version d’agent

En connaissant les agents et leur version qui s’exécutent sur vos machines, vous pouvez plus facilement analyser la cause racine des problèmes et identifier les machines sur lesquelles vous devez changer l’agent ou la version de l’agent.

Savez-vous quels ajustements rapides vous pouvez apporter à la requête que vous avez développée ci-dessus pour obtenir ces informations ?

Prenez en compte les points suivants :

  • Quelles sont les informations supplémentaires que vous devez extraire de vos journaux ?
  • Quelle est l’opération KQL que vous pouvez utiliser pour regrouper les machines en fonction de la version d’agent qu’elles exécutent ?

Solution :

  1. Copiez les cinq premières lignes de la requête et ajoutez la colonne Version à la ligne summarize de la requête pour extraire les informations de version d’agent :

    Cliquez pour exécuter la requête dans l’environnement de démo 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. Renommez la colonne Version en AgentVersion pour plus de clarté, ajoutez une autre ligne summarize pour rechercher les combinaisons uniques de type d’agent, version d’agent et type de système d’exploitation, puis utilisez la fonction d’agrégation KQL make_set() pour lister tous les ordinateurs exécutant chaque combinaison de type d’agent et version d’agent :

    Cliquez pour exécuter la requête dans l’environnement de démo 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
    

    Vous avez maintenant les données que vous cherchez : une liste de combinaisons uniques de type d’agent et version d’agent ainsi que l’ensemble de toutes les machines récemment actives qui exécutent une version spécifique de chaque agent.

    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.