Freigeben über


Erste Schritte mit Protokollabfragen in Azure Monitor-Protokollen

Dieser Artikel erklärt die Grundlagen des Schreibens von Protokollabfragen in Azure Monitor-Protokollen, einschließlich der Vorgehensweise für folgende Aktionen:

Soweit zutreffend, enthält der Artikel Beispiele für die Abfrage von Daten sowohl mit der Kusto Query Language (KQL) als auch im einfachen Modus von Log Analytics.

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.

Videotutorial

Hinweis

Dieses Video zeigt eine frühere Version der Benutzeroberfläche, aber die Screenshots in diesem Artikel sind auf dem neuesten Stand und spiegeln die aktuelle Benutzeroberfläche wider.


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.

Strukturieren einer 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 Azure-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 der Pipe kommt 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.

Suchabfragen

Suchabfragen sind weniger strukturiert. Sie sind besser für die Suche nach Datensätzen geeignet, die einen bestimmten Wert in einer der Spalten in einer bestimmten Tabelle enthalten.

Diese Abfrage sucht die SecurityEvent-Tabelle für Datensätze, die den Ausdruck „Cryptographic“ enthalten. Von diesen Datensätzen werden 10 Datensätze zurückgegeben und angezeigt:

search in (SecurityEvent) "Cryptographic"
| take 10

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.

Ergebnisse einschränken

Verwenden Sie den take-Operator, um eine kleine Stichprobe von Datensätzen anzuzeigen, indem maximal die angegebene Anzahl von Datensätzen zurückgegeben wird. Zum Beispiel:

SecurityEvent
| take 10

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 Operatoren sort und top.

Ergebnisse sortieren

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.

Sort

Sie können den sort-Operator verwenden, um die Abfrageergebnisse nach der angegebenen Spalte zu sortieren. 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.

Desc und asc

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-Argument in der Regel 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
    

Für das Sortieren in aufsteigender Reihenfolge müssen Sie asc angeben.

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 folgt aus:

Screenshot der ersten zehn Datensätze, sortiert in absteigender Reihenfolge

Filtern von Ergebnissen

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 != ""

Filtern nach mehreren Bedingungen

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.

Hinweis

Wenn Sie einen Zeitbereich in die Abfrage einbeziehen, wechselt die Zeitauswahl automatisch zu In Abfrage festlegen. Wenn Sie die Zeitauswahl manuell auf einen anderen Wert ändern, wendet Log Analytics den kleineren der beiden Zeitbereiche an.

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.

Screenshot der Zeitauswahl und der zugehörigen Liste von Zeitbereichsbefehlen im KQL-Modus.

Hinzufügen eines Filters zur Abfrage

Sie können auch einen eigenen Zeitbereich definieren, indem Sie einen Zeitfilter zur Abfrage hinzufügen.

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).

Einschließen oder Ausschließen von Spalten in Abfrageergebnissen

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:

Screenshot der Ergebnisliste für die Abfrage von „project“

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 und TimeGenerated aus.
  • Zeigen Sie die Spalte Activity als EventDetails an.
  • Erstellen Sie eine neue Spalte mit dem Namen EventCode. Die Funktion substring() wird verwendet, um nur die ersten vier Zeichen aus dem Feld Activity abzurufen.
SecurityEvent
| top 10 by TimeGenerated 
| project Computer, TimeGenerated, EventDetails=Activity, EventCode=substring(Activity, 0, 4)

Definieren und Verwenden von benutzerdefinierten Feldern

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)

Hinweis

Verwenden Sie den Operator extend für Ad-hoc-Berechnungen in Abfragen. Verwenden Sie Erfassungszeittransformationen oder Zusammenfassungsregeln, um Daten zur Erfassungszeit für effizientere Abfragen zu transformieren oder zu aggregieren.

Aggregieren und Gruppieren von Ergebnissen

Aggregieren von Gruppen von Zeilen

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

Gruppieren eindeutiger Wertekombinationen in mehreren Spalten

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

Ausführen mathematischer oder statistischer Berechnungen

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 == "DC01.na.contosohotels.com" 
| 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. Wechseln Sie dafür zur Ansicht Diagramm, öffnen Sie die Diagrammformatierung-Randleiste rechts, und wählen Sie Linien für Diagrammtyp aus:

Screenshot der Werte einer Abfrage des Arbeitsspeichers im zeitlichen Verlauf im KQL-Modus.

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