Esercizio - Elencare le macchine virtuali attive di recente che hanno interrotto l'invio dei log

Completato

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.

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

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.
  • Identificare i computer attivi di recente.
  • Trovare l'ultimo log generato per ogni computer e verificare se è stato generato negli ultimi minuti.
  • where TimeGenerated >ago(48h)
  • summarize max(TimeGenerated)
  • max_TimeGenerated < ago(5m)
Per altre informazioni, vedere dove l’operatore, operatore di riepilogo, fa (), e max() (funzione di aggregazione).
Computer Identificatore univoco del computer.
  • Riepilogare i risultati in base al computer.
  • Raggruppare i computer in base a versioni distinte dell'agente.
  • summarize by Computer
  • summarize ComputersList=make_set(Computer)
Per altre informazioni, vedere Operatore di riepilogo e make_set() (funzione di aggregazione).
Category Tipo di agente:
  • Azure Monitor Agent o
  • Direct Agent, che rappresenta gli agenti di Log Analytics. L'agente di Log Analytics per Windows è chiamato anche MMA. L'agente di Log Analytics per Linux è chiamato anche OMS.
Identificare l'agente in esecuzione nel computer. Per semplificare i risultati e facilitare un'ulteriore analisi, ad esempio il filtro:
  • Rinominare la colonna in AgentType (AgentType=Category)
  • Modificare il Direct Agent valore in MMA per i computer Windows (AgentType= iif(AgentType == "Direct Agent" and OSType =="Windows", "MMA", AgentType).
  • Modificare il Direct Agent valore in OMS per i computer Linux (AgentType= iif(AgentType == "Direct Agent" and OSType =="Linux", "OMS", AgentType).
Per altre informazioni, vedere iff() e == (uguali) operatore.
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.

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

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

    Per comprendere quali computer non hanno inviato di recente i log, è necessario solo l'ultimo log inviato da ogni computer.

  2. 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 colonna Category in AgentType, che descrive meglio le informazioni esaminate nella colonna come parte di questa analisi.

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

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

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

    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.

  4. 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 valore Direct Agent con MMA per i computer Windows e OMS 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.

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

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:

  1. Copiare le prime cinque righe dalla query e aggiungere la colonna Version alla riga summarize 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
    

    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. Rinominare la colonna Version in AgentVersion per maggiore chiarezza, aggiungere un'altra riga summarize per trovare combinazioni univoche di tipo agente, versione dell'agente e tipo di sistema operativo e usare la funzione di aggregazione KQL make_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.

    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.