Erste Schritte mit Protokollabfragen in Azure Monitor
Hinweis
Wenn Sie Daten von mindestens einem virtuellen Computer sammeln, können Sie diese Übung in Ihrer eigenen Umgebung durcharbeiten. Wenn nicht, verwenden Sie die Demoumgebung, die eine Vielzahl von Beispieldaten enthält.
Wenn Sie bereits wissen, wie Sie Abfragen in Kusto-Abfragesprache (Kusto Query Language, KQL) ausführen, aber schnell nützliche Abfragen auf Grundlage von Ressourcentypen erstellen müssen, finden Sie weitere Informationen im Bereich mit den gespeicherten Beispielabfragen unter Verwenden von Abfragen in Azure Monitor Log Analytics.
In diesem Tutorial lernen Sie, wie Sie Protokollabfragen in Azure Monitor schreiben. In diesem Artikel wird Folgendes vermittelt:
- Grundlegendes zur Abfragestruktur.
- Sortieren von Abfrageergebnissen.
- Filtern von Abfrageergebnissen.
- Festlegen eines Zeitbereichs.
- Auswählen der Felder, die in den Ergebnissen enthalten sein sollen.
- Definieren und Verwenden von benutzerdefinierten Feldern.
- Aggregieren und Gruppieren von Ergebnissen.
Ein Tutorial zur Verwendung von Log Analytics im Azure-Portal finden Sie unter Erste Schritte mit Azure Monitor Log Analytics.
Weitere Informationen zu Protokollabfragen in Azure Monitor finden Sie unter Übersicht über Protokollabfragen in Azure Monitor.
Hier finden Sie eine Videoversion dieses Tutorials:
Erforderliche Berechtigungen
Sie müssen über Microsoft.OperationalInsights/workspaces/query/*/read
-Berechtigungen für die Log Analytics-Arbeitsbereiche verfügen, die Sie abfragen, wie sie z. B. von der integrierten Log Analytics-Reader-Rolle bereitgestellt werden.
Schreiben einer neuen Abfrage
Abfragen können entweder mit einem Tabellennamen oder dem search
-Befehl beginnen. Sie sollten mit einem Tabellennamen beginnen, da er einen klaren Gültigkeitsbereich für die Abfrage definiert. Dadurch werden auch die Abfrageleistung und die Relevanz der Ergebnisse verbessert.
Hinweis
Bei der in Azure Monitor verwendeten Abfragesprache KQL wird die Groß-/Kleinschreibung beachtet. Sprachschlüsselwörter werden in der Regel in Kleinbuchstaben geschrieben. Verwenden Sie die richtige Schreibweise bei Tabellen- oder Spaltennamen in einer Abfrage, wie im Schemabereich angezeigt wird.
Tabellenbasierte Abfragen
In Azure Monitor werden Protokolldaten in Tabellen bestehend aus mehreren Spalten organisiert. Alle Tabellen und Spalten werden im Schemabereich in Log Analytics im Analytics-Portal angezeigt. Identifizieren Sie eine Tabelle, die Sie interessiert, und untersuchen Sie dann einen Teil der Daten:
SecurityEvent
| take 10
Die vorangehende Abfrage gibt in keiner bestimmten Reihenfolge 10 Ergebnisse aus der SecurityEvent
-Tabelle zurück. Mithilfe dieser gängigen Methode können Sie sich einen Überblick über eine Tabelle verschaffen und sich mit deren Struktur und Inhalt vertraut machen. Werfen wir einen Blick darauf, wie sie erstellt wird:
Die Abfrage beginnt mit dem Tabellennamen
SecurityEvent
, der den Gültigkeitsbereich der Abfrage definiert.Der senkrechte Strich (|) trennt Befehle, d. h. die Ausgabe des ersten Befehls ist die Eingabe für den nächsten. Sie können eine beliebige Anzahl von durch senkrechte Striche getrennten Elementen hinzufügen.
Nach dem senkrechten Strich steht der
take
-Operator.Wir könnten die Abfrage auch ohne Hinzufügen von
| take 10
ausführen. Der Befehl wäre weiterhin gültig, könnte aber bis zu 30 000 Ergebnisse zurückgeben.
Take
Verwenden Sie den take
-Operator, um eine kleine Stichprobe von Datensätzen anzuzeigen, indem maximal die angegebene Anzahl von Datensätzen zurückgegeben wird. Die Ergebnisse werden willkürlich ausgewählt und in keiner bestimmten Reihenfolge angezeigt. Wenn die Ergebnisse in einer bestimmten Reihenfolge zurückgegeben werden müssen, verwenden Sie die sort
- und top
-Operatoren.
Suchabfragen
Suchabfragen sind weniger strukturiert. Sie sind besser für die Suche nach Datensätzen geeignet, die einen bestimmten Wert in einer der Spalten enthalten:
search in (SecurityEvent) "Cryptographic"
| take 10
Diese Abfrage durchsucht die Tabelle SecurityEvent
nach Datensätzen, die den Ausdruck „Cryptographic“ enthalten. Von diesen Datensätzen werden 10 zurückgegeben und angezeigt. Wenn Sie den Teil in (SecurityEvent)
auslassen und nur search "Cryptographic"
ausführen, werden alle Tabellen durchsucht. Der Prozess würde dann länger dauern und weniger effizient sein.
Wichtig
Suchabfragen sind üblicherweise langsamer als tabellengestützte Abfragen, da sie mehr Daten verarbeiten müssen.
„sort“ und „top“
In diesem Abschnitt werden die sort
- und top
-Operatoren sowie ihre desc
- und asc
-Argumente beschrieben. Obwohl take
zum Abrufen von Datensätzen nützlich ist, können Sie die Ergebnisse nicht in einer bestimmten Reihenfolge auswählen oder sortieren. Um eine sortierte Ansicht zu erhalten, verwenden Sie sort
und top
.
Desc und asc
Desc
Verwenden Sie das desc
-Argument, um Datensätze in absteigender Reihenfolge zu sortieren. Die absteigende Reihenfolge ist die Standardsortierreihenfolge von sort
und top
, weshalb Sie das desc
-in der Regel Argument auslassen können.
Die von den beiden folgenden Abfragen zurückgegebenen Daten werden beispielsweise in absteigender Reihenfolge nach der Spalte „TimeGenerated“ sortiert:
-
SecurityEvent | sort by TimeGenerated desc
-
SecurityEvent | sort by TimeGenerated
Asc
Für das Sortieren in aufsteigender Reihenfolge müssen Sie asc
angeben.
Sort
Sie können den sort
-Operatorverwenden. sort
sortiert die Abfrageergebnisse nach der von Ihnen angegebenen Spalte. sort
beschränkt jedoch nicht die Anzahl der Datensätze, die von der Abfrage zurückgegeben werden.
Die folgende Abfrage gibt beispielsweise alle verfügbaren Datensätze für die SecurityEvent
-Tabelle zurück, also bis zu 30.000 Datensätze, und sortiert diese nach der Spalte „TimeGenerated“.
SecurityEvent
| sort by TimeGenerated
Die vorherige Abfrage kann zu viele Ergebnisse zurückgeben. Außerdem kann es einige Zeit dauern, bis die Ergebnisse zurückgegeben werden. Die Abfrage sortiert die gesamte Tabelle SecurityEvent
nach der Spalte TimeGenerated
. Das Analytics-Portal beschränkt die Anzeige dann auf lediglich 30 000 Datensätze. Dieser Ansatz ist nicht optimal. Die beste Möglichkeit, nur die neuesten Datensätze abzurufen, besteht in der Verwendung des top
-Operators.
TOP
Verwenden Sie den top
-Operator, um die gesamte Tabelle auf der Serverseite zu sortieren und dann nur die obersten Datensätze zurückzugeben.
Die folgende Abfrage gibt beispielsweise die letzten zehn Datensätze zurück:
SecurityEvent
| top 10 by TimeGenerated
Die Ausgabe sieht wie im folgenden Beispiel aus.
Der „where“-Operator: Filtern nach einer Bedingung
Wie der Name schon angibt, filtern Filter die Daten nach einer bestimmten Bedingung. Filtern ist die gängigste Methode, um Abfrageergebnisse auf relevante Informationen zu beschränken.
Verwenden Sie zum Hinzufügen eines Filters zu einer Abfrage den where
-Operator gefolgt von mindestens einer Bedingung. Die folgende Abfrage gibt beispielsweise nur SecurityEvent
-Datensätze zurück, bei denen Level equals _8
zutrifft:
SecurityEvent
| where Level == 8
Beim Schreiben von Filterbedingungen können Sie folgende Ausdrücke verwenden:
Ausdruck | BESCHREIBUNG | Beispiel |
---|---|---|
== | Überprüfung auf Gleichheit (mit Berücksichtigung der Groß-/Kleinschreibung) |
Level == 8 |
=~ | Überprüfung auf Gleichheit (ohne Berücksichtigung der Groß-/Kleinschreibung) |
EventSourceName =~ "microsoft-windows-security-auditing" |
!=, <> | Überprüfung auf Ungleichheit (beide Ausdrücke sind identisch) |
Level != 4 |
and , or |
Zwischen Bedingungen erforderlich | Level == 16 or CommandLine != "" |
Um nach mehreren Bedingungen zu filtern, können Sie einen der folgenden Ansätze verwenden:
Verwenden Sie and
(und), wie hier gezeigt:
SecurityEvent
| where Level == 8 and EventID == 4672
Übergeben Sie hintereinander mehrere where
-Elemente per Pipe, wie hier gezeigt:
SecurityEvent
| where Level == 8
| where EventID == 4672
Hinweis
Werte können unterschiedliche Typen aufweisen. Deshalb müssen sie eventuell umgewandelt werden, damit ein Vergleich für den richtigen Typ ausgeführt werden kann. Die Spalte SecurityEvent Level
ist beispielsweise vom Typ „String“. Sie müssen daher eine Umwandlung in einen numerischen Typ wie int
oder long
durchführen, bevor Sie numerische Operatoren für diese verwenden können, wie hier gezeigt: SecurityEvent | where toint(Level) >= 10
Festlegen eines Zeitbereichs
Sie können einen Zeitbereich angeben, indem Sie die Zeitauswahl oder einen Zeitfilter verwenden.
Verwenden der Zeitauswahl
Die Zeitauswahl wird neben der Schaltfläche Ausführen angezeigt und zeigt an, dass Sie nur Datensätze aus den letzten 24 Stunden abfragen. Dieser Standardzeitbereich wird auf alle Abfragen angewendet. Um nur Datensätze aus der letzten Stunde zu erhalten, wählen Sie Letzte Stunde aus, und führen Sie dann die Abfrage erneut aus.
Hinzufügen eines Filters zur Abfrage
Sie können auch einen eigenen Zeitbereich definieren, indem Sie einen Zeitfilter zur Abfrage hinzufügen. Durch Hinzufügen eines Zeitfilters wird der in der Zeitauswahl ausgewählte Zeitraum überschrieben.
Der Zeitfilter sollte idealerweise unmittelbar nach dem Tabellennamen platziert werden:
SecurityEvent
| where TimeGenerated > ago(30m)
| where toint(Level) >= 10
Im vorherigen Zeitfilter bedeutet ago(30m)
„vor 30 Minuten“. Diese Abfrage gibt nur die Datensätze der letzten 30 Minuten zurück, was z. B. als „30 m“ ausgedrückt wird. Andere Zeiteinheiten umfassen Tage (z. B. 2d) und Sekunden (z. B. 10s).
Verwenden von „project“ und „extend“ zum Auswählen und Berechnen von Spalten
Mit project
können Sie bestimmte Spalten zur Einbeziehung in die Ergebnisse auswählen:
SecurityEvent
| top 10 by TimeGenerated
| project TimeGenerated, Computer, Activity
Das Beispiel oben generiert die folgende Ausgabe:
Sie können über project
auch Spalten umbenennen und neue definieren. Im nächsten Beispiel wird mit project
Folgendes ausgeführt:
- Wählen Sie nur die ursprünglichen Spalten
Computer
undTimeGenerated
aus. - Zeigen Sie die Spalte
Activity
alsEventDetails
an. - Erstellen Sie eine neue Spalte mit dem Namen
EventCode
. Die Funktionsubstring()
wird verwendet, um nur die ersten vier Zeichen aus dem FeldActivity
abzurufen.
SecurityEvent
| top 10 by TimeGenerated
| project Computer, TimeGenerated, EventDetails=Activity, EventCode=substring(Activity, 0, 4)
Sie können extend
verwenden, um alle ursprünglichen Spalten im Resultset beizubehalten und weitere zu definieren. Die folgende Abfrage verwendet extend
zum Hinzufügen der Spalte EventCode
. Diese Spalte wird möglicherweise nicht am Ende der Tabellenergebnisse angezeigt. Zum Anzeigen müssen Sie die Details eines Datensatzes erweitern.
SecurityEvent
| top 10 by TimeGenerated
| extend EventCode=substring(Activity, 0, 4)
Verwenden von „summarize“ zum Aggregieren von Zeilengruppen
Verwenden Sie summarize
, um Gruppen von Datensätzen entsprechend einer oder mehrerer Spalten zu identifizieren und Aggregationen auf diese anzuwenden. Am häufigsten wird summarize
mit count
verwendet, womit die Anzahl von Ergebnissen in jeder Gruppe zurückgegeben wird.
Die folgende Abfrage überprüft alle Perf
-Datensätze aus der letzten Stunde, gruppiert diese nach ObjectName
und zählt die Datensätze in jeder Gruppe:
Perf
| where TimeGenerated > ago(1h)
| summarize count() by ObjectName
Manchmal ist es sinnvoll, Gruppen nach mehreren Dimensionen zu definieren. Jede eindeutige Kombination der folgenden Werte definiert eine separate Gruppe:
Perf
| where TimeGenerated > ago(1h)
| summarize count() by ObjectName, CounterName
Auch die Ausführung von mathematischen oder statistischen Berechnungen für jede Gruppe ist ein häufiger Anwendungsfall. Im folgenden Beispiel wird der durchschnittliche CounterValue
für jeden Computer berechnet:
Perf
| where TimeGenerated > ago(1h)
| summarize avg(CounterValue) by Computer
Die Ergebnisse dieser Abfrage sind jedoch bedeutungslos, da verschiedene Leistungsindikatoren vermischt wurden. Um die Ergebnisse aussagekräftiger zu gestalten, berechnen Sie den Mittelwert separat für jede Kombination von CounterName
und Computer
:
Perf
| where TimeGenerated > ago(1h)
| summarize avg(CounterValue) by Computer, CounterName
Zusammenfassen nach einer Zeitspalte
Die Gruppierung von Ergebnissen kann auch auf einer Zeitspalte oder einem anderen kontinuierlichen Wert basieren. Durch das bloße Zusammenfassen von by TimeGenerated
würden Gruppen für jede einzelne Millisekunde für den Zeitbereich erstellt werden, da diese Werte eindeutig sind.
Zum Erstellen von Gruppen, die auf kontinuierlichen Werten basieren, wird empfohlen, den Bereich mittels bin
in verwaltbare Einheiten zu unterteilen. Die folgende Abfrage analysiert Perf
-Datensätze, die den freien Arbeitsspeicher (Available MBytes
) auf einem bestimmten Computer ermitteln. Sie berechnet den Durchschnittswert für jeden Zeitraum von einer Stunde über die letzten sieben Tage:
Perf
| where TimeGenerated > ago(7d)
| where Computer == "ContosoAzADDS2"
| where CounterName == "Available MBytes"
| summarize avg(CounterValue) by bin(TimeGenerated, 1h)
Um die Ausgabe übersichtlicher zu gestalten, können Sie das jeweilige Zeitdiagramm auswählen, das den verfügbaren Arbeitsspeicher im zeitlichen Verlauf darstellt.
Häufig gestellte Fragen
Dieser Abschnitt enthält Antworten auf häufig gestellte Fragen.
Warum werden mir in Azure Monitor-Protokollen doppelte Datensätze angezeigt?
Gelegentlich bemerken Sie vielleicht doppelte Datensätze in Azure Monitor-Protokollen. Diese Duplizierung erfolgt in der Regel aufgrund eines der folgenden zwei Zustände:
- Komponenten in der Pipeline verfügen über Wiederholungsversuche, um eine zuverlässige Bereitstellung am Ziel sicherzustellen. Gelegentlich kann diese Funktion zu Duplikaten für einen kleinen Prozentsatz von Telemetrieelementen führen.
- Wenn die doppelten Datensätze von einem virtuellen Computer stammen, ist möglicherweise sowohl der Log Analytics-Agent als auch Azure Monitor Agent installiert. Wenn Sie den Log Analytics-Agent weiterhin installieren müssen, konfigurieren Sie den Log Analytics-Arbeitsbereich so, dass keine Daten mehr gesammelt werden, die auch von der Datensammlungsregel erfasst werden, die von Azure Monitor Agent verwendet wird.
Nächste Schritte
- Weitere Informationen zur Verwendung von Zeichenfolgendaten in einer Protokollabfrage finden Sie unter Arbeiten mit Zeichenfolgen in Azure Monitor-Protokollabfragen.
- Weitere Informationen zum Aggregieren von Daten in einer Protokollabfrage finden Sie unter Erweiterte Aggregationen in Azure Monitor-Protokollabfragen.
- Unter Joins in Azure Monitor-Protokollabfragen erfahren Sie, wie Sie Daten aus mehreren Tabellen verknüpfen.
- Eine Dokumentation zur gesamten Kusto-Abfragesprache finden Sie in der KQL-Sprachreferenz.