Esercitazione: Usare query Kusto

Il modo migliore per familiarizzare con il linguaggio di query Kusto consiste nell'esaminare alcune query di base. È consigliabile usare un database con alcuni dati di esempio. Le query illustrate in questa esercitazione dovrebbero essere eseguite in tale database. La tabella StormEvents del database di esempio contiene alcune informazioni sugli eventi atmosferici occorsi negli Stati Uniti.

Conteggio righe

Il database di esempio contiene una tabella chiamata StormEvents. si vuole scoprire le dimensioni della tabella. Il contenuto verrà quindi reindirizzato a un operatore che conta le righe nella tabella.

Nota sulla sintassi: una query è un'origine dati (in genere un nome di tabella), seguita facoltativamente da una o più coppie del carattere di barra verticale e da un operatore tabulare.

StormEvents | count

Di seguito è riportato l'output generato:

Conteggio
59066

Per altre informazioni, vedere Operatore count.

Selezionare un subset di colonne: project

Usare project per selezionare solo le colonne desiderate. Vedere l'esempio seguente, che usa gli operatori project e take.

Filtrare per espressione booleana: where

Di seguito vengono mostrati solo gli eventi di flood avvenuti in California nel mese di febbraio 2007:

StormEvents
| where StartTime > datetime(2007-02-01) and StartTime < datetime(2007-03-01)
| where EventType == 'Flood' and State == 'CALIFORNIA'
| project StartTime, EndTime , State , EventType , EpisodeNarrative

Di seguito è riportato l'output generato:

StartTime EndTime State EventType EpisodeNarrative
2007-02-19 00:00:00.0000000 2007-02-19 08:00:00.0000000 California Alluvione Il transito di un sistema frontale attraverso la Valle di San Joaquin meridionale ha portato brevi periodi di intensa pioggia nella Contea di Kern occidentale nelle prime ore del 19 febbraio. Alluvioni secondarie sono state segnalate attraverso la State Highway 166 vicino a Taft.

Mostrare n righe: take

Vediamo alcuni dati. Cosa contiene un campione casuale di cinque righe?

StormEvents
| take 5
| project  StartTime, EndTime, EventType, State, EventNarrative  

Di seguito è riportato l'output generato:

StartTime EndTime EventType State EventNarrative
2007-09-18 20:00:00.0000000 2007-09-19 18:00:00.0000000 Pioggia intensa Florida Fino a 23 centimetri di pioggia sono caduti in un periodo di 24 ore attraverso parti della zona costiera della Contea di Volusia.
2007-09-20 21:57:00.0000000 2007-09-20 22:05:00.0000000 Tornado FLORIDA Un tornado ha colpito la città di Eustis all'estremità nord del West Crooked Lake. Il tornado si è rapidamente intensificato fino a raggiungere forza EF1 spostandosi verso nord-nordovest attraverso Eustis. Il percorso aveva una lunghezza di poco meno di tre chilometri e una larghezza massima di 275 metri. Il tornado ha distrutto 7 abitazioni. Ventisette abitazioni hanno subito gravi danni e 81 abitazioni hanno riportato danni minori. Non ci sono stati feriti gravi e il calcolo dei danni materiali si aggira sui 6,2 milioni di dollari.
2007-09-29 08:11:00.0000000 2007-09-29 08:11:00.0000000 Tromba marina SUD ATLANTICO Un tromba marina si è formata nell'Atlantico sudorientale di Melbourne Beach spostandosi velocemente verso la costa.
2007-12-20 07:50:00.0000000 2007-12-20 07:53:00.0000000 Vento di tempesta MISSISSIPPI Numerosi grossi alberi sono stati sradicati dal vento, alcuni abbattendosi sulle linee elettriche. Si sono verificati danni nella Contea di Adams orientale.
2007-12-30 16:00:00.0000000 2007-12-30 16:05:00.0000000 Vento di tempesta GEORGIA Nel comunicato della contea sono stati segnalati molti alberi abbattuti dal vento lungo Quincey Batten Loop nei pressi della strada statale 206. È stata prodotta una stima del costo di rimozione degli alberi.

Tuttavia take mostra le righe della tabella senza alcun ordine particolare, dunque è necessario ordinarle (limit è un alias di take e ha lo stesso effetto).

Ordinare i risultati: sort, top

  • Nota sulla sintassi:alcuni operatori hanno parametri introdotti da parole chiave come .
  • Nell'esempio seguente, desc elenca i risultati in ordine decrescente e asc li elenca in ordine crescente.

Per visualizzare le prime n righe, ordinate in base a una colonna specifica:

StormEvents
| top 5 by StartTime desc
| project  StartTime, EndTime, EventType, State, EventNarrative  

Di seguito è riportato l'output generato:

StartTime EndTime EventType State EventNarrative
2007-12-31 22:30:00.0000000 2007-12-31 23:59:00.0000000 Tempesta invernale MICHIGAN Questa intensa tempesta di neve è durata fino alle prime ore del mattino di Capodanno.
2007-12-31 22:30:00.0000000 2007-12-31 23:59:00.0000000 Tempesta invernale MICHIGAN Questa intensa tempesta di neve è durata fino alle prime ore del mattino di Capodanno.
2007-12-31 22:30:00.0000000 2007-12-31 23:59:00.0000000 Tempesta invernale MICHIGAN Questa intensa tempesta di neve è durata fino alle prime ore del mattino di Capodanno.
2007-12-31 23:53:00.0000000 2007-12-31 23:53:00.0000000 Vento forte CALIFORNIA Sono state segnalate raffiche di vento fino a 93,4 km/h da nord a nordest sui monti della Contea di Ventura.
2007-12-31 23:53:00.0000000 2007-12-31 23:53:00.0000000 Vento forte CALIFORNIA Il sensore RAWS di Warm Springs ha segnalato raffiche di vento da nord fino a 93,4 km/h.

È possibile ottenere lo stesso risultato usando sort e quindi take:

StormEvents
| sort by StartTime desc
| take 5
| project  StartTime, EndTime, EventType, EventNarrative

Calcolare le colonne derivate: extend

Creare una nuova colonna calcolando un valore in ogni riga:

StormEvents
| limit 5
| extend Duration = EndTime - StartTime 
| project StartTime, EndTime, Duration, EventType, State

Di seguito è riportato l'output generato:

StartTime EndTime Duration EventType State
2007-09-18 20:00:00.0000000 2007-09-19 18:00:00.0000000 22:00:00 Pioggia intensa FLORIDA
2007-09-20 21:57:00.0000000 2007-09-20 22:05:00.0000000 00:08:00 Tornado FLORIDA
2007-09-29 08:11:00.0000000 2007-09-29 08:11:00.0000000 00:00:00 Tromba marina SUD ATLANTICO
2007-12-20 07:50:00.0000000 2007-12-20 07:53:00.0000000 00:03:00 Vento di tempesta MISSISSIPPI
2007-12-30 16:00:00.0000000 2007-12-30 16:05:00.0000000 00:05:00 Vento di tempesta GEORGIA

È possibile riutilizzare un nome di colonna e assegnare un risultato di calcolo alla stessa colonna.

Esempio:

print x=1
| extend x = x + 1, y = x
| extend x = x + 1

Di seguito è riportato l'output generato:

x y
3 1

Le espressioni scalari possono includere tutti gli operatori consueti ( , , , , ) e sono disponibili una gamma di funzioni -*/% utili.

Aggregare gruppi di righe: summarize

Contare il numero di eventi che si verificano in ogni stato:

StormEvents
| summarize event_count = count() by State

riepilogare le righe che hanno gli stessi valori nella clausola e quindi usa una funzione di aggregazione (ad esempio , ) per combinare ogni gruppo in una singola count riga. In questo caso, è presente una riga per ogni stato e una colonna per il conteggio delle righe in tale stato.

È disponibile un intervallo di funzioni di aggregazione. È possibile usare diverse funzioni di aggregazione in un unico operatore summarize per ottenere diverse colonne calcolate. Ad esempio, è possibile ottenere il numero di tempeste per stato e la somma dei tipi univoci di tempeste per stato. Quindi, è possibile usare top per ottenere gli stati più interessati dalle tempeste:

StormEvents 
| summarize StormCount = count(), TypeOfStorms = dcount(EventType) by State
| top 5 by StormCount desc

Di seguito è riportato l'output generato:

State StormCount TypeOfStorms
TEXAS 4701 27
KANSAS 3166 21
IOWA 2337 19
ILLINOIS 2022 23
MISSOURI 2016 20

Nei risultati di un operatore summarize:

  • Ogni colonna è denominata in by.
  • Ogni espressione calcolata ha una colonna.
  • Ogni combinazione di valori by ha una riga.

Riepilogare per valori scalari

È possibile usare valori scalari (numerici, tempo o intervalli) nella clausola , ma è possibile inserire i valori in bin usando la funzione byby

StormEvents
| where StartTime > datetime(2007-02-14) and StartTime < datetime(2007-02-21)
| summarize event_count = count() by bin(StartTime, 1d)

La query riduce tutti i timestamp a intervalli di un giorno:

StartTime event_count
2007-02-14 00:00:00.0000000 180
2007-02-15 00:00:00.0000000 66
2007-02-16 00:00:00.0000000 164
2007-02-17 00:00:00.0000000 103
2007-02-18 00:00:00.0000000 22
2007-02-19 00:00:00.0000000 52
2007-02-20 00:00:00.0000000 60

La funzione bin() è analoga alla funzione floor() in molti linguaggi. Ogni valore viene ridotto al multiplo più vicino del modulo fornito, in modo che summarize possa assegnare le righe a gruppi.

Visualizzare un grafico o una tabella: render

È possibile proiettare due colonne e usarle come asse x e asse y di un grafico:

StormEvents 
| summarize event_count=count(), mid = avg(BeginLat) by State 
| sort by mid
| where event_count > 1800
| project State, event_count
| render columnchart

Screenshot che mostra un istogramma del numero di eventi atmosferici avversi in base allo stato.

Sebbene mid sia stato rimosso nell'operazione project, è ancora necessario se si vogliono mostrare gli stati in quell'ordine nel grafico.

In modo più specifico, render è una funzionalità del client anziché parte del linguaggio di query. È comunque integrata nel linguaggio ed è utile per prevedere i risultati.

Grafici di tempo

Tornando ai bin numerici, visualizziamo ora una serie temporale:

StormEvents
| summarize event_count=count() by bin(StartTime, 1d)
| render timechart

Screenshot di un grafico a linee degli eventi suddivisi in bin in ordine di tempo.

Serie multiple

Usare più valori in una clausola summarize by per creare una riga distinta per ogni combinazione di valori:

StormEvents 
| where StartTime > datetime(2007-06-04) and StartTime < datetime(2007-06-10) 
| where Source in ("Source","Public","Emergency Manager","Trained Spotter","Law Enforcement")
| summarize count() by bin(StartTime, 10h), Source

Screenshot che mostra un conteggio per origine in tabella.

È sufficiente aggiungere il termine render all'esempio precedente: | render timechart.

Screenshot che mostra un conteggio per origine in grafico a linee.

Si noti che render timechart usa la prima colonna come asse x, quindi visualizza le altre colonne come righe separate.

Ciclo della media giornaliera

Come varia l'attività nella giornata media?

Conteggiare gli eventi per un modulo di un giorno, suddivisi in ore. Qui viene usato floor anziché bin:

StormEvents
| extend hour = floor(StartTime % 1d , 1h)
| summarize event_count=count() by hour
| sort by hour asc
| render timechart

Screenshot che mostra un conteggio per origine in diagramma temporale.

Attualmente, render non etichetta le durate correttamente, ma in alternativa è possibile usare | render columnchart:

Screenshot che mostra un conteggio per origine in istogramma.

Confrontare più serie giornaliere

Come varia l'attività nelle ore del giorno nei diversi stati?

StormEvents
| extend hour= floor( StartTime % 1d , 1h)
| where State in ("GULF OF MEXICO","MAINE","VIRGINIA","WISCONSIN","NORTH DAKOTA","NEW JERSEY","OREGON")
| summarize event_count=count() by hour, State
| render timechart

Screenshot di un diagramma temporale in base all'ora e allo stato.

Dividere per 1h in modo da trasformare l'asse x in un numero di ore anziché in una durata:

StormEvents
| extend hour= floor( StartTime % 1d , 1h)/ 1h
| where State in ("GULF OF MEXICO","MAINE","VIRGINIA","WISCONSIN","NORTH DAKOTA","NEW JERSEY","OREGON")
| summarize event_count=count() by hour, State
| render columnchart

Screenshot che mostra un istogramma per ora e stato.

Unire tipi di dati

Come si trovano due tipi di eventi specifici e in quale stato si è verificato ognuno di essi?

È possibile eseguire il pull delle tempeste con il primo EventType e il secondo EventType, quindi unire i due set in State:

StormEvents
| where EventType == "Lightning"
| join (
    StormEvents 
    | where EventType == "Avalanche"
) on State  
| distinct State

Screenshot che mostra l'unione degli eventi Fulmini e Valanga.

Esempio di sessione utente di join

Questa sezione non usa la tabella StormEvents.

Si supponga di avere dati che includono eventi che contrassegnano l'inizio e la fine di ogni sessione utente con un ID univoco.

In che modo è possibile determinare la durata di ogni sessione utente?

È possibile usare extend per fornire un alias per i due timestamp e quindi calcolare la durata della sessione:

Events
| where eventName == "session_started"
| project start_time = timestamp, stop_time, country, session_id
| join ( Events
    | where eventName == "session_ended"
    | project stop_time = timestamp, session_id
    ) on session_id
| extend duration = stop_time - start_time
| project start_time, stop_time, country, duration
| take 10

Screenshot di una tabella di risultati per l'estensione della sessione utente.

È consigliabile usare per selezionare solo le colonne project pertinenti prima di eseguire il join. Nella stessa clausola rinominare la timestamp colonna.

Tracciare una distribuzione

Tornando alla tabella StormEvents, quante tempeste di lunghezze diverse esistono?

StormEvents
| extend  duration = EndTime - StartTime
| where duration > 0s
| where duration < 3h
| summarize event_count = count()
    by bin(duration, 5m)
| sort by duration asc
| render timechart

Screenshot dei risultati del diagramma temporale per il numero di eventi per durata.

In alternativa, è possibile usare | render columnchart:

Screenshot di un istogramma per il diagramma temporale del numero di eventi per durata.

Percentili

Quali intervalli di durate si trovano nelle diverse percentuali delle tempeste?

Per ottenere queste informazioni, usare la query precedente da Tracciare una distribuzione, ma sostituire con:

| summarize percentiles(duration, 5, 20, 50, 80, 95)

In questo caso, non è stata usata una clausola by, quindi l'output è una singola riga:

Screenshot di una tabella di risultati per riepilogare i percentili per durata.

L'output mostra quanto segue:

  • Il 5% delle tempeste ha una durata inferiore a 5 minuti.
  • Il 50% delle tempeste è durato meno di un'ora e 25 minuti.
  • Il 95% dei temporali è durato meno di 2 ore e 50 minuti.

Per ottenere un dettaglio separato per ogni stato, usare la colonna state separatamente con entrambi gli operatori summarize:

StormEvents
| extend  duration = EndTime - StartTime
| where duration > 0s
| where duration < 3h
| summarize event_count = count()
    by bin(duration, 5m), State
| sort by duration asc
| summarize percentiles(duration, 5, 20, 50, 80, 95) by State

La tabella riepiloga la durata dei percentili per stato.

Percentuali

Usando la tabella StormEvents, è possibile calcolare la percentuale di diretto distorsi da tutti gli eventi.

StormEvents
| where (InjuriesDirect > 0) and (InjuriesIndirect > 0) 
| extend Percentage = (  100 * InjuriesDirect / (InjuriesDirect + InjuriesIndirect) )
| project StartTime, InjuriesDirect, InjuriesIndirect, Percentage

La query rimuove zero voci di conteggio:

StartTime DirectDirect EsertuneIndirect Percentuale
2007-05-01T16:50:00Z 1 1 50
2007-08-10T21:25:00Z 7 2 77
2007-08-23T12:05:00Z 7 22 24
2007-08-23T14:20:00Z 3 2 60
2007-09-10T13:45:00Z 4 1 80
2007-12-06T08:30:00Z 3 3 50
2007-12-08T12:00:00Z 1 1 50

Assegnare un risultato a una variabile: let

Usare let per separare le parti dell'espressione di query nell'esempio precedente. I risultati rimangono invariati:

let LightningStorms = 
    StormEvents
    | where EventType == "Lightning";
let AvalancheStorms = 
    StormEvents
    | where EventType == "Avalanche";
LightningStorms 
| join (AvalancheStorms) on State
| distinct State

Suggerimento

In Kusto Explorer, per eseguire l'intera query, non aggiungere righe vuote tra le parti della query.

Combinare dati da più database in una query

Nella query seguente la tabella Logs deve trovarsi nel database predefinito:

Logs | where ...

Per accedere a una tabella in un database diverso, usare la sintassi seguente:

database("db").Table

Se, ad esempio, sono presenti database denominati Diagnostics e Telemetry, dunque si vogliono correlare alcuni dati nelle due tabelle, è possibile usare la query seguente (presupponendo che Diagnostics sia il database predefinito):

Logs | join database("Telemetry").Metrics on Request MachineId | ...

Usare questa query se il database predefinito è Telemetry:

union Requests, database("Diagnostics").Logs | ...

Le due query precedenti presuppongono che entrambi i database si trovino nel cluster a cui si è attualmente connessi. Se il database era in un cluster denominato TelemetryCluster.kusto.windows.net , per Telemetry accedervi, usare Telemetryquesta query:

Logs | join cluster("TelemetryCluster").database("Telemetry").Metrics on Request MachineId | ...

Nota

Quando si specifica il cluster, il database è obbligatorio.

Per altre informazioni sulla combinazione di dati da più database in una query, vedere Query tra database.

Passaggi successivi

Il modo migliore per ottenere informazioni sul linguaggio Esplora dati di Azure query è esaminare alcune query di base per ottenere un'"esperienza" per il linguaggio. Queste query sono simili alle query nell'esercitazione Esplora dati di Azure, ma usano i dati di tabelle comuni in un'area di lavoro Di Azure Log Analytics.

Eseguire queste query usando Log Analytics nel portale di Azure. Log Analytics è uno strumento che è possibile usare per scrivere query di log. Usare i dati di log in Monitoraggio di Azure e quindi valutare i risultati delle query di log. Se non si ha familiarità con Log Analytics, completare l'esercitazione di Log Analytics.

Tutte le query in questa esercitazione usano l'ambiente demo di Log Analytics. È possibile usare il proprio ambiente, ma non tutte le tabelle usate in questa esercitazione potrebbero essere disponibili. Poiché i dati nell'ambiente demo non sono statici, i risultati delle query potrebbero variare leggermente rispetto ai risultati indicati qui.

Conteggio righe

La tabella InsightsMetrics contiene dati sulle prestazioni raccolti da dati analitici, ad esempio Monitoraggio di Azure per le macchine virtuali e Monitoraggio di Azure per contenitori. Per scoprire le dimensioni della tabella, il contenuto verrà reindirizzato in un operatore che conta le righe.

Una query è un'origine dati (in genere un nome di tabella), facoltativamente seguita da una o più coppie del carattere barra verticale e da un operatore tabulare. In questo caso, tutti i record della tabella InsightsMetrics vengono restituiti e quindi inviati all'operatore InsightsMetrics. L'operatore count visualizza i risultati perché è l'ultimo comando della query.

InsightsMetrics | count

Di seguito è riportato l'output generato:

Conteggio
1,263,191.

Filtrare per espressione booleana: where

La tabella AzureActivity contiene voci del log attività di Azure, che fornisce informazioni dettagliate sugli eventi a livello di sottoscrizione o di gruppo di gestione che si verificano in Azure. In questo caso, saranno esaminate solo le voci Critical nel corso di una settimana specifica.

L'operatore where è comune nel linguaggio di query Kusto. where filtra una tabella in righe che soddisfano criteri specifici. L'esempio seguente usa più comandi. Prima di tutto, la query recupera tutti i record per la tabella. Quindi, filtra i dati solo per i record inclusi nell'intervallo di tempo. Infine, filtra quei risultati solo per i record che hanno un livello Critical.

Nota

Oltre a specificare un filtro nella query usando la colonna TimeGenerated, è possibile specificare l'intervallo di tempo in Log Analytics. Per altre informazioni, vedere Ambito e intervallo di tempo delle query su log in Log Analytics di Monitoraggio di Azure.

AzureActivity
| where TimeGenerated > datetime(10-01-2020) and TimeGenerated < datetime(10-07-2020)
| where Level == 'Critical'

Screenshot che mostra i risultati dell'esempio di operatore where.

Selezionare un subset di colonne: project

Usare project per includere solo le colonne desiderate. Basandoci sull'esempio precedente, limiteremo l'output a determinate colonne:

AzureActivity
| where TimeGenerated > datetime(10-01-2020) and TimeGenerated < datetime(10-07-2020)
| where Level == 'Critical'
| project TimeGenerated, Level, OperationNameValue, ResourceGroup, _ResourceId

Screenshot che mostra i risultati dell'esempio di operatore project.

Mostrare n righe: take

NetworkMonitoring contiene i dati di monitoraggio per le reti virtuali di Azure. Si userà l'operatore take per esaminare 10 righe di esempio casuali nella tabella. Il take mostra alcune righe di una tabella in un ordine specifico:

NetworkMonitoring
| take 10
| project TimeGenerated, Computer, SourceNetwork, DestinationNetwork, HighLatency, LowLatency

Screenshot che mostra i risultati dell'esempio di operatore take.

Ordinare i risultati: sort, top

Anziché i record casuali, è possibile restituire i cinque record più recenti eseguendo il primo ordinamento in base all'ora:

NetworkMonitoring
| sort by TimeGenerated desc
| take 5
| project TimeGenerated, Computer, SourceNetwork, DestinationNetwork, HighLatency, LowLatency

È possibile ottenere questo comportamento esatto usando invece l'operatore top:

NetworkMonitoring
| top 5 by TimeGenerated desc
| project TimeGenerated, Computer, SourceNetwork, DestinationNetwork, HighLatency, LowLatency

Screenshot che mostra i risultati dell'esempio di operatore top.

Calcolare le colonne derivate: extend

L'operatore extend è simile a project, ma aggiunge al set di colonne invece di sostituirle. È possibile usare entrambi gli operatori per creare una nuova colonna in base a un calcolo in ogni riga.

La tabella Perf contiene dati sulle prestazioni raccolti dalle macchine virtuali che eseguono l'agente Log Analytics.

Perf
| where ObjectName == "LogicalDisk" and CounterName == "Free Megabytes"
| project TimeGenerated, Computer, FreeMegabytes = CounterValue
| extend FreeGigabytes = FreeMegabytes / 1000

Screenshot che mostra i risultati dell'esempio di operatore extend.

Aggregare gruppi di righe: summarize

L'operatore summarize raggruppa le righe che hanno gli stessi valori nella clausola . Quindi, usa una funzione di aggregazione come count per combinare ogni gruppo in un'unica riga. È disponibile un intervallo di funzioni di aggregazione. È possibile usare diverse funzioni di aggregazione in un unico operatore summarize per ottenere diverse colonne calcolate.

La tabella SecurityEvent contiene eventi di sicurezza quali gli accessi e i processi avviati nei computer monitorati. È possibile contare il numero di eventi di ogni livello che si sono verificati in ogni computer. In questo esempio viene generata una riga per ogni combinazione di computer e livello. Una colonna contiene il conteggio degli eventi.

SecurityEvent
| summarize count() by Computer, Level

Screenshot che mostra i risultati dell'esempio di operatore summarize count.

Riepilogare per valori scalari

È possibile aggregare in base a valori scalari come numeri e valori temporali, ma è consigliabile usare la funzione bin () per raggruppare le righe in set di dati distinti. Ad esempio, se si aggrega per , si otterrà una riga per TimeGenerated la maggior parte dei valori di ora. Usare bin() per consolidare i valori per ora o giorno.

La tabella InsightsMetrics contiene dati sulle prestazioni organizzati in base alle informazioni Monitoraggio di Azure per le macchine virtuali e Monitoraggio di Azure per i contenitori. La query seguente illustra l'utilizzo orario medio del processore per più computer:

InsightsMetrics
| where Computer startswith "DC"
| where Namespace  == "Processor" and Name == "UtilizationPercentage"
| summarize avg(Val) by Computer, bin(TimeGenerated, 1h)

Screenshot che mostra i risultati dell'esempio di operatore avg.

Visualizzare un grafico o una tabella: render

L'operatore render specifica come viene eseguito il rendering dell'output della query. Per impostazione predefinita, Log Analytics esegue il rendering dell'output come tabella. Dopo aver eseguito la query, è possibile selezionare diversi tipi di grafico. È utile includere l'operatore render nelle query in cui è generalmente preferibile un tipo di grafico specifico.

L'esempio seguente illustra l'utilizzo orario medio del processore per un singolo computer. Esegue il rendering dell'output come diagramma temporale.

InsightsMetrics
| where Computer == "DC00.NA.contosohotels.com"
| where Namespace  == "Processor" and Name == "UtilizationPercentage"
| summarize avg(Val) by Computer, bin(TimeGenerated, 1h)
| render timechart

Screenshot che mostra i risultati dell'esempio di operatore render.

Usare più serie

Se si usano più valori in una clausola summarize by, il grafico mostra una serie distinta per ogni set di valori:

InsightsMetrics
| where Computer startswith "DC"
| where Namespace  == "Processor" and Name == "UtilizationPercentage"
| summarize avg(Val) by Computer, bin(TimeGenerated, 1h)
| render timechart

Screenshot che mostra i risultati dell'esempio di operatore render con più serie.

Unire i dati da due tabelle

Cosa accade se è necessario recuperare i dati da due tabelle in una singola query? È possibile usare l'operatore join per combinare le righe di più tabelle in un singolo set di risultati. Ogni tabella deve contenere una colonna con un valore corrispondente in modo che il join riconosca le righe di cui eseguire la corrispondenza.

VMComputer è una tabella usata da Monitoraggio di Azure per archiviare i dettagli sulle macchine virtuali monitorate. InsightsMetrics contiene dati sulle prestazioni raccolti da tali macchine virtuali. Uno dei valori raccolti in InsightsMetrics è la memoria disponibile, ma non la percentuale di memoria disponibile. Per calcolare la percentuale, è necessaria la memoria fisica per ogni macchina virtuale. Tale valore è contenuto in VMComputer.

La query di esempio seguente usa un join per eseguire il calcolo. L'operatore distinct viene usato con perché i dettagli vengono raccolti regolarmente da ogni computer. Di conseguenza, la tabella contiene più righe per ogni computer. Le due tabelle vengono unite in join usando la Computer colonna . Nel set risultante viene creata una riga che include le colonne di entrambe le tabelle per ogni riga in , in cui il valore in ha lo stesso valore InsightsMetricsComputer nella colonna in ComputerVMComputer .

VMComputer
| distinct Computer, PhysicalMemoryMB
| join kind=inner (
    InsightsMetrics
    | where Namespace == "Memory" and Name == "AvailableMB"
    | project TimeGenerated, Computer, AvailableMemoryMB = Val
) on Computer
| project TimeGenerated, Computer, PercentMemory = AvailableMemoryMB / PhysicalMemoryMB * 100

Screenshot che mostra i risultati dell'esempio di operatore join.

Assegnare un risultato a una variabile: let

Usare let per semplificare la lettura e la gestione delle query. È possibile usare questo operatore per assegnare i risultati di una query a una variabile che è possibile usare in un secondo momento. Usando l'istruzione let, la query nell'esempio precedente può essere riscritta come segue:

let PhysicalComputer = VMComputer
    | distinct Computer, PhysicalMemoryMB;
let AvailableMemory = InsightsMetrics
    | where Namespace == "Memory" and Name == "AvailableMB"
    | project TimeGenerated, Computer, AvailableMemoryMB = Val;
PhysicalComputer
| join kind=inner (AvailableMemory) on Computer
| project TimeGenerated, Computer, PercentMemory = AvailableMemoryMB / PhysicalMemoryMB * 100

Screenshot che mostra i risultati dell'esempio di operatore let.

Passaggi successivi