Exercice - Lister les machines virtuelles récemment actives qui ont cessé d’envoyer des journaux
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.
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. |
|
|
Computer |
Identificateur unique de la machine. |
|
|
Category |
Type de l’agent :
|
Identifiez l’agent s’exécutant sur la machine. | Pour simplifier les résultats et faciliter l’analyse, comme le filtrage :
|
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.
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.
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.
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 colonneCategory
enAgentType
, qui décrit mieux les informations que vous cherchez dans la colonne pour cette analyse.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.
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.
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 valeurDirect Agent
parMMA
pour les machines Windows et parOMS
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.
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 :
Copiez les cinq premières lignes de la requête et ajoutez la colonne
Version
à la lignesummarize
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
Renommez la colonne
Version
enAgentVersion
pour plus de clarté, ajoutez une autre lignesummarize
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 KQLmake_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.