Log Analytics e query KQL

Completato

Quando si inizia a prestare attenzione all'affidabilità dei servizi, è necessario un modo per tenere traccia delle loro prestazioni. Spesso queste informazioni sono disponibili nei log di un servizio, quindi è necessario uno strumento per gestire tali log. Log Analytics è lo strumento che si userà in Azure a questo scopo. Consente di eseguire query su tali dati e di visualizzarli in modi che sono utili per il lavoro sull'affidabilità.

Il processo di query per Log Analytics comporta la scrittura di query nel linguaggio di query Kusto (KQL). Se si è già lavorato con altri linguaggi di query (ad esempio, Structured Query Language, noto con l'acronimo SQL), non si avrà alcun problema nell'apprendimento di KQL. Comunque, anche per chi non ha esperienza con SQL, una volta compreso il funzionamento, le query KQL di base risulteranno molto semplici.

Funzionamento di Log Analytics

Si vedrà ora come funzionano tutti questi elementi. Di seguito è riportato un diagramma che illustra il funzionamento di Log Analytics:

Diagram of Log Analytics overview showing data inputs, tables, and sample queries.

I dati per Log Analytics provengono da diverse origini, tra cui:

  • registri eventi di Windows
  • syslog nei computer Linux
  • Agenti in esecuzione nelle macchine virtuali
  • Log personalizzati che gli utenti scelgono di inviare
  • Metriche provenienti dalle risorse di Azure
  • Informazioni di telemetria provenienti da Application Insights

Tutte queste informazioni sono contenute in elementi denominati tabelle in Log Analytics. Ogni tabella può essere considerata un database distinto. Per estrarre le informazioni dalle tabelle è necessario scrivere query. Per gli esempi che verranno illustrati più avanti in questo modulo, si lavorerà principalmente con una tabella denominata "requests".

Diagram of Log Analytics overview with requests table highlighted.

Interfaccia di Log Analytics

La figura seguente mostra le diverse parti dell'interfaccia di Log Analytics.

Screenshot of the Log Analytics workspace in the Azure portal.

La sezione della schermata sulla sinistra consente di evitare di perdersi durante l'uso di Log Analytics. Mostra le tabelle con cui si sta lavorando e, se si espande una sezione, consente di visualizzare un elenco dei campi della tabella disponibili per le query. Se si seleziona uno dei campi o il nome della tabella, l'elemento verrà copiato nell'area di costruzione della query.

L'area di costruzione della query si trova nella parte superiore. Qui è possibile specificare una query ed eseguirla. Se non è già specificato come parte della query, è possibile specificare un intervallo di tempo per i dati. Se si vuole lavorare su più query contemporaneamente, è possibile salvare le query o aprire schede aggiuntive.

Nella parte inferiore della pagina sono disponibili altre informazioni utili. In questa area di Log Analytics vengono visualizzate le query eseguite in precedenza, che possono essere utili se si deve tornare a un elemento già specificato precedentemente. Ad esempio, quando si è tentato di eseguire un'operazione mentre si stava lavorando a una query ed è stato necessario tornare indietro.

Scrittura di query KQL

KQL è un linguaggio di query avanzato. Ci limiteremo a una descrizione molto superficiale, con alcune query di base per illustrarne la facilità d'uso. In seguito, per approfondire l'uso di alcune delle funzionalità più avanzate (incluse alcune funzionalità di Machine Learning), assicurarsi di eseguire l'esercitazione di Log Analytics.

Iniziamo scrivendo una semplice query KQL. Quasi tutte le query KQL iniziano con l'origine dati, ovvero la tabella su cui si esegue la query. Di conseguenza, per eseguire una query sui dati di una tabella "requests", si inizierà da questa tabella nell'area della query:

Requests

La parte successiva di una query KQL consiste nel connettere la tabella con l'operazione da eseguire. Usare un carattere barra verticale (generalmente posizionato sulla tastiera sopra il tasto della barra rovesciata) tra il nome della tabella e il comando.

Ecco una semplice query per ordinare la tabella che restituisce i primi 10 record trovati:

Requests
|top 10

Di seguito sono riportati alcuni esempi di altri comandi comuni che è possibile usare anziché i "primi 10":

  • Per visualizzare 10 record casuali invece dei primi 10, ad esempio per esaminare la struttura della tabella, è possibile usare il comando seguente:

    requests
    |take 10
    
  • Per visualizzare i record inseriti nell'ultima mezz'ora, è possibile usare la query seguente:

    requests
    |where timestamp > ago(30m)
    
  • Un'altra attività comune consiste nello specificare l'ordine in cui devono essere restituiti i dati. Di seguito è riportato un esempio di query che ordina i record in base a un campo specifico (timestamp) in ordine decrescente (ad esempio, visualizzando per primi i dati più recenti):

    requests
    |sort by timestamp desc
    

Come nel caso di SQL, è possibile impostare più condizioni per specificare i record da restituire. Usare altri caratteri barra verticale e clausole per aggiungerle. Il carattere barra verticale separa i comandi in modo che l'output del primo sia l'input del comando successivo. Una singola query può includere un numero qualsiasi di comandi.

Di seguito è riportato un esempio di una query che restituisce tutti i record con codice di risposta 404 (ad esempio, tutti i record "pagina non trovata" da un servizio Web) negli ultimi 30 minuti:

requests
|where timestamp > ago(30m)
|where toint(resultCode) == 404

Questa query è stata scritta in modo da ottimizzare l'efficienza. Selezionando prima solo i record degli ultimi 30 minuti, si riduce drasticamente il numero di record che la seconda clausola deve analizzare. Se la query fosse scritta nell'ordine opposto, innanzitutto troverebbe tutti gli errori 404 dall'inizio della registrazione dei dati, quindi ne eliminerebbe la maggior parte per fornire solo l'ultima mezzora. Considerare sempre l'ordine di elaborazione quando si scrivono query con più condizioni.

Un ultimo esempio di query, prima di tornare alla potenza di Log Analytics più avanti in questo modulo per il miglioramento dell'affidabilità. Ecco una query che mostra un calcolo basato sui dati:

requests
|where timestamp > ago(30m)
|summarize count() by name, URL

Questa query restituisce un riepilogo delle richieste ricevute nell'ultima mezzora. Di conseguenza, in un servizio Web, potrebbe indicare che è stata effettuata una richiesta GET index.html all'URL http://tailwindtraders.com 2.875 volte. La descrizione del linguaggio di query Kusto si sospende con questa query perché si collega perfettamente alle query KQL che verranno usate nell'unità successiva.

Verificare le conoscenze

1.

In quale linguaggio vengono scritte le query di Log Analytics?

2.

Cosa significa l'acronimo KQL?

3.

Dove sono archiviati e sottoposti a query i dati in Log Analytics nella maggior parte delle query KQL?