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
À utiliser dès qu'il faut écrire, corriger, expliquer ou accélérer une requête KQL sur des journaux ou métriques Azure.
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ûrThe 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 faiteExemples
Write a KQL query for Application Insights that shows the request error rate per 5-minute bin over the last 6 hours, ordered chronologically.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.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:
- Target service — Log Analytics workspace, Application Insights, or Azure Monitor Metrics?
- Time range — default to
last 24h(ago(24h)) if unspecified - What to find — errors, latency, a specific operation, a resource, a user, a correlation ID?
- 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
whereclause first - Prefer
hasovercontainsfor string matching (uses the index) - Prefer
==over=~when case sensitivity is acceptable - Avoid
*inproject— name columns explicitly - Use
materialize()when the same subquery is referenced more than once - For large tables, always filter on
TimeGeneratedbefore 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=truewhen spanning multiple resources - Use
letstatements to define reusable sub-expressions and make intent clear
Output format
Return:
- The query in a fenced KQL code block
- A brief explanation (one sentence per operator) so the user can adapt it
- 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:
- Identify the source table and the data domain
- Walk through each operator in order, one sentence each
- State what the final output shape is (columns, sort order, row limit)
- Flag any performance or correctness concerns
Debugging a query
When the user reports an error or unexpected results:
- Check operator order (filter → aggregate → project)
- Verify column name casing (KQL column names are case-sensitive)
- Check time range —
ago()is relative to query execution time - Check for implicit type mismatches (string vs. int comparisons)
- Suggest
take 10on intermediate steps to inspect intermediate rows - For "no results": relax filters one by one to find where data disappears
References
- KQL quick reference
- Common Log Analytics tables
- Query performance patterns
- Official docs: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/
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 annexesCe 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.mdDepuis 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.
Configurer un canal de discussion avec SecretRefs
DevOps
Configurez des canaux de discussion avec des commandes non interactives, les secrets étant uniquement des SecretRefs. Couvre les étapes de collecte, modification, réparation et vérification.
Enquêter sur les échecs CI de ClickHouse
DevOps
Investigue un échec CI de ClickHouse de bout en bout à partir d'une URL de PR ou de rapport S3. Récupère les tests échoués, classe flaky vs vraie régression, et cherche des issues/fixes existants.
Revue de PR Ansible
DevOps
Examine une PR Ansible selon le processus standardisé du projet, incluant la validation des changelogs, la couverture de tests et le suivi des commentaires.