Kusto ist die Analyse-Engine hinter Microsofts Azure Data Explorer (ADX) und verwandten Diensten wie Azure Monitor, Microsoft Sentinel und Log Analytics. Die zugehörige Abfragesprache heißt KQL (Kusto Query Language) — eine schreibgeschützte, pipe-basierte Sprache, die für große Datenmengen und Echtzeit-Analysen optimiert ist.
Kusto.Cli starten
Das Kommandozeilen-Werkzeug Kusto.Cli verbindet sich mit einem Cluster und arbeitet wahlweise im REPL-Modus (interaktive Eingabe, Ergebnis danach) oder im Execute-Modus für einzelne Abfragen:
Kusto.Cli.exe "https://meincluster.westeurope.kusto.windows.net"
# REPL: Eingabeaufforderung, dann Abfragen eintippen
# Execute: Kusto.Cli.exe "https://cluster" "Abfrage"
KQL-Grundmuster: der Pipe-Operator
KQL arbeitet mit Tabellen und Operatoren, die über den Pipe-Operator | verkettet werden — ähnlich wie Unix-Pipes. Jeder Operator bekommt eine Tabelle hinein und gibt eine neue Tabelle aus:
StormEvents
| where State == "FLORIDA"
| project EventType, DamageProperty
| summarize Summe = sum(DamageProperty) by EventType
| order by Summe desc
| take 10
Die wichtigsten Operatoren
where— Zeilen filtern (Vergleiche,contains,has,between,in)project— Spalten auswählen/umbenennen (wieSELECT-Spaltenliste)extend— neue berechnete Spalten hinzufügensummarize ... by— Gruppierung mit Aggregationen (count(),sum(),avg(),dcount(),max())order by/sort by— sortierentake/limit— erste n Zeilendistinct— eindeutige Wertejoin— Tabellen verbinden (kind=inner/leftouter/fullouter)render timechart— Ergebnis als Zeitreihen-Diagramm ausgeben
Variablen mit let
let definiert benannte Werte, Funktionen oder Teiltabellen und macht Abfragen lesbar und wiederverwendbar:
let fehler = Logs | where Level == "Error";
fehler | summarize Anzahl = count() by App
Management-Befehle
Befehle, die mit einem Punkt beginnen, sind Management-Befehle (Control Commands) — sie verwalten Cluster, Datenbanken und Tabellen:
.show databases
.show tables
.show table T schema
.show cluster policy caching
Für Ad-hoc-Analysen erzeugt datatable eine Tabelle direkt in der Abfrage: datatable (Spalte:string, Wert:int) ["A", 1, "B", 2]. .ingest-Befehle laden Daten; im ADX-Portal übernimmt das meist der Pipeline-Assistent.
Praxis-Tipps
- KQL ist case-insensitiv bei Operatoren, aber Werte in
==-Vergleichen sind case-sensitiv. where Timestamp > ago(7d)nutzt die integrierte Zeitfunktionago().- Strings in
containssind Teilstring-Suchen;hassucht nach ganzen Wörtern.
Verwandte Grundlagen: SQL-Befehle, InfluxDB-Befehle, ClickHouse-Befehle, TimescaleDB-Befehle, Informix-Befehle.