Constructeur de requêtes KQL

VérifiéSûr

Écrivez, expliquez et optimisez des requêtes Kusto Query Language (KQL) pour Azure Log Analytics, Application Insights et Azure Monitor.

Spar Skills Guide Bot
DevOpsIntermédiaire
26/07/2026
Claude CodeCursorCodex
#kql#azure-monitor#log-analytics#observability#query-optimization

Recommandé pour

Synthèse automatique

Rédige, explique et optimise des requêtes KQL pour Azure Log Analytics, Application Insights et Azure Monitor.

Points forts

  • Impose un ordre d'opérateurs lisible et performant (where en premier, project en dernier)
  • Fournit des règles de performance concrètes : has plutôt que contains, filtrage sur TimeGenerated, materialize() pour les sous-requêtes réutilisées
  • Inclut des modèles prêts à l'emploi (taux d'erreur, latence p95, exceptions corrélées, redémarrages de pods, échecs de connexion Azure AD)
  • Demande le service cible, la plage temporelle et la forme de sortie avant de générer la requête

Limites

  • Le fichier de compétence est tronqué : le dernier exemple (échecs de connexion) s'arrête au milieu d'une clause
  • Aucune vérification automatique de la validité ou de l'exécution de la requête : la correction repose sur le modèle
  • Suppose une familiarité avec les noms de tables Azure ; les cas multi-ressources ou multi-workspaces restent peu détaillés
Quand l'utiliser

À utiliser dès qu'il faut écrire, corriger, expliquer ou accélérer une requête KQL sur des journaux ou métriques Azure.

Quand l'éviter

Pour des bases de données non-Kusto (SQL, Elasticsearch, Splunk) ou pour des questions d'architecture Azure sans interrogation de journaux.

Analyse de sécurité

Sûr
Score qualité88/100

The skill is purely instructional documentation for authoring KQL queries. It declares no allowed-tools and contains no commands that execute, download, delete, or transmit data — only example query text and Azure documentation links. The only external reference is a link to official Microsoft Learn docs, which is benign.

Aucun point d'attention détecté

Comment cette analyse est faite

Exemples

Error rate over time
Write a KQL query for Application Insights that shows the request error rate per 5-minute bin over the last 6 hours, ordered chronologically.
Slowest operations
Give me a KQL query against AppRequests that lists the 20 slowest operations over the last 24 hours with p50, p95, and p99 latency plus request counts.
Debug a slow query
This KQL query against SecurityEvent is taking minutes to return. Explain what it does and rewrite it to be faster without changing the results.

KQL Query Builder

Write, explain, and optimise Kusto Query Language (KQL) queries for Azure Log Analytics, Application Insights, and Azure Monitor.

Trigger

Use this skill when the user asks to:

  • Write or generate a KQL query
  • Debug or fix a failing/slow KQL query
  • Explain what a KQL query does
  • Optimise query performance
  • Find logs, traces, exceptions, metrics, or alerts in Azure
  • Query specific tables: AzureDiagnostics, AppRequests, AppExceptions, Heartbeat, ContainerLog, SecurityEvent, AuditLogs, SigninLogs, Perf, Usage, etc.

Instructions

Before writing a query

Ask (or infer from context) the following if not already provided:

  1. Target service — Log Analytics workspace, Application Insights, or Azure Monitor Metrics?
  2. Time range — default to last 24h (ago(24h)) if unspecified
  3. What to find — errors, latency, a specific operation, a resource, a user, a correlation ID?
  4. Output shape — raw rows, aggregated counts, a time-series chart, a top-N list?

Query construction rules

Always follow this order of operators for readability and performance:

TableName
| where  (filter first — reduces row count early)
| where  (additional filters on the same pass when possible)
| extend (computed columns)
| summarize (aggregations)
| order by / top
| project (select only needed columns — always last)

Performance rules (apply to every query):

  • Put the most selective where clause first
  • Prefer has over contains for string matching (uses the index)
  • Prefer == over =~ when case sensitivity is acceptable
  • Avoid * in project — name columns explicitly
  • Use materialize() when the same subquery is referenced more than once
  • For large tables, always filter on TimeGenerated before any other column
  • Prefer summarize ... by bin(TimeGenerated, 5m) over looping client-side

Correctness rules:

  • Wrap column names with spaces in ['Column Name']
  • Use isnotempty() not != ""
  • Use toint(), toreal(), todatetime() for explicit casts rather than implicit coercion
  • In Application Insights queries use union isfuzzy=true when spanning multiple resources
  • Use let statements to define reusable sub-expressions and make intent clear

Output format

Return:

  1. The query in a fenced KQL code block
  2. A brief explanation (one sentence per operator) so the user can adapt it
  3. Any caveats (permissions needed, table retention limits, sampling effects in Application Insights, etc.)

When the user wants a parameterised query, use let variables at the top:

let _timeRange = 24h;
let _resourceGroup = "my-rg";
// ... rest of query

Common patterns

Error rate over time

AppRequests
| where TimeGenerated > ago(1h)
| summarize
    Total = count(),
    Errors = countif(Success == false)
    by bin(TimeGenerated, 5m)
| extend ErrorRate = round(100.0 * Errors / Total, 2)
| order by TimeGenerated asc

Slowest operations (p95 latency)

AppRequests
| where TimeGenerated > ago(24h)
| summarize
    p50 = percentile(DurationMs, 50),
    p95 = percentile(DurationMs, 95),
    p99 = percentile(DurationMs, 99),
    RequestCount = count()
    by Name
| order by p95 desc
| take 20

Exception details with correlation

AppExceptions
| where TimeGenerated > ago(6h)
| where OuterType has "ArgumentNullException" or SeverityLevel >= 3
| project TimeGenerated, OperationId, OuterType, OuterMessage, Assembly, FileName, LineNumber
| order by TimeGenerated desc

Kubernetes pod restarts (Container Insights)

KubePodInventory
| where TimeGenerated > ago(1h)
| where RestartCount > 0
| summarize MaxRestarts = max(RestartCount) by Name, Namespace, bin(TimeGenerated, 5m)
| order by MaxRestarts desc

Azure AD sign-in failures

SigninLogs
| where TimeGenerated > ago(24h)
| where ResultType != "0"
| summarize FailureCount = count() by UserPrincipalName, ResultDescription, AppDisplayName
| order by FailureCount desc
| take 50

Resource health events

AzureActivity
| where TimeGenerated > ago(7d)
| where ActivityStatusValue in ("Failed", "Critical")
| project TimeGenerated, OperationNameValue, ResourceGroup, ResourceId, Caller, ActivityStatusValue, Properties
| order by TimeGenerated desc

Alert rule — threshold over 5-minute window

Perf
| where TimeGenerated > ago(5m)
| where ObjectName == "Processor" and CounterName == "% Processor Time"
| where InstanceName == "_Total"
| summarize AvgCPU = avg(CounterValue) by Computer
| where AvgCPU > 85

Explaining an existing query

When the user pastes a query and asks what it does:

  1. Identify the source table and the data domain
  2. Walk through each operator in order, one sentence each
  3. State what the final output shape is (columns, sort order, row limit)
  4. Flag any performance or correctness concerns

Debugging a query

When the user reports an error or unexpected results:

  1. Check operator order (filter → aggregate → project)
  2. Verify column name casing (KQL column names are case-sensitive)
  3. Check time range — ago() is relative to query execution time
  4. Check for implicit type mismatches (string vs. int comparisons)
  5. Suggest take 10 on intermediate steps to inspect intermediate rows
  6. For "no results": relax filters one by one to find where data disappears

References

Du fichier au premier essai

Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.

Consulter la source et ses fichiers annexes

Ce téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.

1. Télécharger le fichier

Télécharger SKILL.md

Depuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/kql-query-builder-ms1aw5f0/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.

Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.

mkdir -p '.skill-downloads/kql-query-builder-ms1aw5f0' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/kql-query-builder-ms1aw5f0/download' --output '.skill-downloads/kql-query-builder-ms1aw5f0/SKILL.md.part' && mv '.skill-downloads/kql-query-builder-ms1aw5f0/SKILL.md.part' '.skill-downloads/kql-query-builder-ms1aw5f0/SKILL.md'

2. Vérifier les prérequis

Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.

Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.

Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.

3. Charger la skill

Le fichier ne fournit pas un en-tête name/description exploitable pour cette procédure native. Le téléchargement reste disponible pour lecture ; utilisez le mode manuel ci-dessous.

Mode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.

4. Faire un premier essai

Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :

Lis .skill-downloads/kql-query-builder-ms1aw5f0/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.

Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.

Skills similaires