Esercizio - Elencare le macchine virtuali attive di recente che hanno interrotto l'invio dei log
In questo caso si scriveranno query KQL per recuperare e trasformare i dati dalla tabella Heartbeat
per ottenere informazioni dettagliate sullo stato dei computer nell'ambiente in uso.
1. Impostare gli obiettivi
Il primo obiettivo di analisi dei log è quello di assicurarsi di ottenere dati su tutte le macchine virtuali attive nella rete. Si vogliono identificare i computer che interrompno l'invio dei dati per garantire la visibilità completa di tutte le macchine virtuali attive.
Per determinare quali computer hanno interrotto l'invio dei dati, sono necessarie informazioni su:
- Tutti i computer che hanno registrato di recente i dati, ma non hanno registrato i dati come previsto negli ultimi minuti.
- Per un'analisi più approfondita, è utile sapere quale agente di macchine virtuali è in esecuzione in ogni computer.
2. Valutare i registri
Monitoraggio di Azure usa l'agente di Monitoraggio di Azure per raccogliere dati sulle attività e sui processi del sistema operativo in esecuzione all'interno delle macchine virtuali.
Nota
Alcuni dei computer meno recenti nell'ambiente usano ancora gli agenti Legacy di Log Analytics Windows e Linux, che Monitoraggio di Azure ha deprecato.
L'agente di Monitoraggio di Azure e l'agente di Log Analytics inviano i dati sull'integrità delle macchine virtuali alla tabella Heartbeat
una volta al minuto.
Eseguire una query semplice take 10
sulla tabella Heartbeat
per visualizzare il tipo di dati che ogni colonna contiene:
Fare clic per eseguire la query nell'ambiente demo di analisi dei log
Heartbeat
| take 10
Le colonneTimeGenerated
, Computer
, Category
e OSType
includono tutti i dati rilevanti per l'analisi.
Valutiamo ora come possiamo usare questi dati e quali operazioni KQL consentono di estrarre e trasformare i dati:
Colonna | Descrizione | Obiettivo di analisi | Operazioni KQL correlate |
---|---|---|---|
TimeGenerated |
Indica quando la macchina virtuale ha generato ogni log. |
|
|
Computer |
Identificatore univoco del computer. |
|
|
Category |
Tipo di agente:
|
Identificare l'agente in esecuzione nel computer. | Per semplificare i risultati e facilitare un'ulteriore analisi, ad esempio il filtro:
|
OSType |
Tipo di sistema operativo in esecuzione nella macchina virtuale. | Identificare il tipo di agente per gli agenti di Log Analytics, che sono diversi per Windows e Linux. | summarize by... OSType Per ulteriori informazioni, vedi Operatore di riepilogo. |
Version |
Numero di versione dell'agente che monitora la macchina virtuale. | Identificare la versione dell'agente in ogni computer. | Rinominare la colonna in AgentVersion (AgentVersion=Version ). |
3. Scrivi la tua query
Scrivere una query che elenca i computer attivi nelle ultime 48 ore, ma che non hanno registrato i dati nella tabella Heartbeat
negli ultimi cinque minuti.
Recuperare tutti i log dalle ultime 48 ore:
Fare clic per eseguire la query nell'ambiente demo di analisi dei log
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
Il set di risultati di questa query include i log di tutti i computer che hanno inviato i dati di log nelle ultime 48 ore. Questi risultati includono probabilmente numerosi log per ogni computer attivo.
Per comprendere quali computer non hanno inviato di recente i log, è necessario solo l'ultimo log inviato da ogni computer.
Trovare l'ultimo log generato da ogni computer e riepilogare in base al computer, al tipo di agente e al sistema operativo:
Fare clic per eseguire la query nell'ambiente demo di analisi dei log
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
È ora disponibile un log da ogni computer che ha registrato i dati nelle ultime 48 ore, ovvero l'ultimo log inviato da ogni computer.
Nella riga
summarize
è stata rinominata la colonnaCategory
inAgentType
, che descrive meglio le informazioni esaminate nella colonna come parte di questa analisi.Per visualizzare i computer che non hanno inviato i log negli ultimi cinque minuti, escludere tutti i log generati negli ultimi cinque minuti:
Fare clic per eseguire la query nell'ambiente demo di analisi dei log
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
Il set di risultati di questa query include l'ultimo log generato da tutti i computer che hanno registrato i dati nelle ultime 48 ore, ma non include i log generati negli ultimi cinque minuti. In altre parole, tutti i computer che hanno registrato i dati negli ultimi cinque minuti non sono inclusi nel set di risultati.
Sono ora disponibili i dati che si stanno cercando: un elenco di tutti i computer che hanno registrato i dati nelle ultime 48 ore, ma non sono stati registrati come previsto negli ultimi cinque minuti. Il set di risultati è costituito dal set di computer da analizzare ulteriormente.
Modificare i risultati della query per presentare più chiaramente le informazioni.
Ad esempio, è possibile organizzare i log in base al tempo generato, dal meno recente al più recente, per vedere quali computer hanno superato il tempo più lungo senza registrare i dati.
Il valore
Direct Agent
nella colonna AgentType indica che l'agente di Log Analytics è in esecuzione nel computer. Poiché l'agente di Log Analytics è denominato anche OMS per Windows e MMS per Linux, sostituendo il valoreDirect Agent
conMMA
per i computer Windows eOMS
per i computer Linux è possibile semplificare i risultati e facilitare un'ulteriore analisi, ad esempio l'applicazione di filtri.Fai clic per eseguire la query nell'ambiente demo di analisi dei log
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
Suggerimento
Usare
max_TimeGenerated
per correlare l'ultimo heartbeat del computer che ha interrotto la creazione di report con i log del computer o altri eventi ambientali che si sono verificati nello stesso momento. La correlazione dei log in questo modo consente di trovare la causa radice del problema analizzato.
Sfida: raggruppare i computer monitorando l'agente e la versione dell'agente
Conoscere gli agenti e le versioni degli agenti in esecuzione nei computer consente di analizzare la causa radice dei problemi e identificare i computer da aggiornare a un nuovo agente o a una nuova versione dell'agente.
Si può pensare a un paio di modifiche rapide che è possibile apportare alla query sviluppata in precedenza per ottenere queste informazioni?
Tenere presente che:
- Quali informazioni aggiuntive è necessario estrarre dai log?
- Quale operazione KQL è possibile usare per raggruppare i computer in base alla versione dell'agente in esecuzione?
Soluzione:
Copiare le prime cinque righe dalla query e aggiungere la colonna
Version
alla rigasummarize
della query per estrarre le informazioni sulla versione dell'agente:Fare clic per eseguire la query nell'ambiente demo di analisi dei log
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
Rinominare la colonna
Version
inAgentVersion
per maggiore chiarezza, aggiungere un'altra rigasummarize
per trovare combinazioni univoche di tipo agente, versione dell'agente e tipo di sistema operativo e usare la funzione di aggregazione KQLmake_set()
per elencare tutti i computer che eseguono ogni combinazione di tipo di agente e versione dell'agente:Fare clic per eseguire la query nell'ambiente demo di analisi dei log
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
Sono ora disponibili i dati che si stanno cercando: un elenco di combinazioni univoche di tipo agente e versione dell'agente e il set di tutti i computer attivi di recente che eseguono una versione specifica di ogni agente.