Requêtes Log Analytics et KQL
Quand nous commençons à faire attention à la fiabilité de nos services, nous avons besoin d’un moyen de savoir dans quelle mesure ils fonctionnent bien (ou pas). Nous ne trouvons pas souvent ces informations dans les journaux du service. Nous allons donc avoir besoin d’un outil pour travailler avec ces journaux. Log Analytics est l’outil que nous allons utiliser dans Azure à cette fin. Il nous permet d’interroger ces données et de les afficher de façon utile pour notre travail sur la fiabilité.
Le processus de requête d’analytique des journaux d’activité implique l’écriture de requêtes dans le langage de requête Kusto (KQL). Si vous avez déjà travaillé avec un autre langage de requête (par exemple Structured Query Language, plus connu par son acronyme SQL), vous n’allez avoir aucun problème à apprendre KQL. Même si ce n’est pas le cas, une fois que vous avez vu son fonctionnement, les requêtes KQL de base vont être très faciles pour vous.
Comment Log Analytics fonctionne
Voyons donc comment cela fonctionne. Voici un diagramme montrant le fonctionnement de Log Analytics :
Les données destinées à Log Analytics proviennent de plusieurs sources, notamment :
- Journaux des événements Windows
syslog
sur des machines Linux- Agents s’exécutant sur des machines virtuelles
- Journaux personnalisés que les personnes choisissent d’envoyer
- Métriques provenant de ressources Azure
- Informations de télémétrie d’Application Insights
Toutes ces informations viennent de ce que Log Analytics appelle des tables. Vous pouvez considérer chaque table comme une base de données distincte. Vous allez écrire des requêtes pour extraire les informations des tables. Pour les exemples que nous allons montrer plus loin dans ce module, nous travaillons principalement avec une table appelée « requests ».
Interface de Log Analytics
Le graphique suivant montre les différentes parties de l’interface de Log Analytics.
À gauche figure une section de l’écran qui vous permet de vous assurer que vous ne vous perdez jamais lors de l’utilisation de Log Analytics. Elle présente les tables avec lesquelles vous travaillez potentiellement et, si vous développez une section, vous voyez une liste des champs de cette table pouvant être interrogés. Si vous sélectionnez un des champs ou le nom de la table, il est copié dans la zone de construction de requête.
La zone de construction de requête se trouve en haut. C’est ici que vous spécifiez une requête et que vous l’exécutez. Vous pouvez fournir une plage de temps pour les données si elle n’est pas déjà spécifiée dans le cadre de la requête. Vous pouvez enregistrer des requêtes ou ouvrir des onglets supplémentaires, si vous souhaitez travailler simultanément sur plusieurs requêtes.
En bas de la page se trouvent des informations plus utiles. Ici, Log Analytics affiche les requêtes précédentes que vous avez exécutées, ce qui peut être utile si vous avez besoin de modifier une chose déjà spécifiée, par exemple, si vous travailliez sur une requête et devez revenir en arrière.
Écriture de requêtes KQL
KQL est un langage de requête puissant. Nous allons uniquement aborder la surface avec des requêtes de base, ce qui vous permettra de voir combien il est facile à utiliser. Plus tard, si vous souhaitez approfondir l’utilisation de certaines des fonctionnalités les plus avancées (y compris certaines fonctionnalités de machine learning), veillez à consulter le tutoriel Log Analytics.
Commençons par écrire une requête KQL simple. Presque toutes les requêtes KQL commencent par la source de données : la table interrogée. Ainsi, si vous interrogez les données d’une table « requests », vous commencez par cela dans la zone de requête :
Requests
La partie suivante d’une requête KQL consiste à connecter la table avec l’opération que vous souhaitez effectuer. Utilisez un caractère de barre verticale (la touche est le plus souvent située au-dessus de la barre oblique) entre le nom de la table et la commande.
Voici une requête simple pour trier le tableau et retourner les 10 premiers enregistrements trouvés :
Requests
|top 10
Voici quelques exemples d’autres commandes courantes que vous pouvez utiliser au lieu de « top 10 » :
Si vous voulez voir 10 enregistrements aléatoires au lieu des 10 premiers (par exemple pour voir la structure de la table), vous pouvez utiliser la commande suivante :
requests |take 10
Pour afficher les enregistrements qui ont eu lieu au cours de la dernière demi-heure, vous pouvez utiliser la requête suivante :
requests |where timestamp > ago(30m)
Une autre tâche courante consiste à spécifier l’ordre dans lequel les données doivent être retournées. Voici un exemple de requête qui effectue un tri sur un champ spécifique (timestamp) dans l’ordre décroissant (par exemple les données les plus récentes en premier) :
requests |sort by timestamp desc
Comme avec SQL, vous pouvez définir plusieurs conditions pour spécifier les enregistrements que vous souhaitez renvoyer. Utilisez des caractères de barre verticale et des clauses supplémentaires pour les ajouter. Le caractère de barre verticale sépare les commandes, de sorte que la sortie de la première est l’entrée de la suivante. Une même requête peut avoir un nombre quelconque de commandes.
Voici un exemple de requête qui retourne tous les enregistrements du code de réponse 404 (par exemple tous les enregistrements « page introuvable » d’un service web) au cours des 30 dernières minutes :
requests
|where timestamp > ago(30m)
|where toint(resultCode) == 404
Cette requête est écrite pour optimiser l’efficacité. En sélectionnant d’abord uniquement les enregistrements des 30 dernières minutes, vous réduisez considérablement le nombre d’enregistrements que la seconde clause doit analyser. Si vous écrivez cette requête dans l’ordre inverse, elle recherche tout d’abord toutes les réponses 404 à partir de l’heure la plus ancienne dans les données, puis ignore la grande majorité pour vous donner uniquement la dernière demi-heure. Tenez toujours compte de l’ordre de traitement lorsque vous écrivez des requêtes avec plusieurs conditions.
Un dernier exemple de requête, avant de revenir à la puissance de Log Analytics plus loin dans ce module, pour contribuer à améliorer notre fiabilité. Voici une requête qui montre un calcul basé sur les données :
requests
|where timestamp > ago(30m)
|summarize count() by name, URL
Cette requête renvoie un résumé des requêtes reçues au cours de la dernière demi-heure. Par conséquent, sur un service web, cela peut nous dire qu’il y a eu une requête GET index.html
sur l’URL http://tailwindtraders.com
2 875 fois. Nous arrêtons un moment notre étude de KQL avec cette requête, car elle fait bien la transition avec les requêtes KQL que nous allons utiliser dans l’unité suivante.