Übung: Ermitteln von Computern mit hoher CPU-Auslastung
Hier schreiben Sie KQL-Abfragen zum Abrufen und Transformieren von Daten aus der Tabelle Perf
, um herauszufinden, welche Computer die volle Auslastung ihrer Computekapazität erreicht haben oder sich ihr nähern und welche Computer nicht optimal ausgelastet sind.
1. Festlegen von Zielen
Wenn Sie Probleme mit der Leistung angehen, potenzielle Probleme entschärfen und Möglichkeiten für einen effizienteren Betrieb ermitteln möchten, müssen Sie die CPU-Auslastung der virtuellen Computer in Ihrer IT-Umgebung analysieren.
Um Probleme mit der CPU-Leistung und Möglichkeiten zur Steigerung der Effizienz zu finden, benötigen Sie Informationen über Folgendes:
- CPU-Nutzungstrends aller aktiven Computer
- CPU-Auslastung von Computern zu Spitzen- und Ruhezeiten
2. Auswerten von Protokollen
Windows- und Linux-Agents senden Leistungsindikatoren von Hardwarekomponenten, Betriebssystemen und Anwendungen, die auf überwachten Computern ausgeführt werden, an die Tabelle Perf
in Azure Monitor.
Lassen Sie uns eine einfache Abfrage auf die Tabelle Perf
anwenden, um die Protokolle der letzten 24 Stunden abzurufen und einen Eindruck vom Tabellenschema und den Daten in der Tabelle zu bekommen:
Klicken Sie hier, um die Abfrage in der Log Analytics-Demoumgebung auszuführen
Perf // The table you’re querying
| where TimeGenerated > ago(1d) // Filters for entries generated in the past day
Sie können erkennen, dass die Spalten TimeGenerated
, Computer
, ObjectName
, CounterName
, InstanceName
und CounterValue
Daten enthalten, die für unsere Analyse relevant sind.
Die Spalte ObjectName
enthält die Namen aller Objekte, für die Azure Monitor Daten von überwachten Computern sammelt. Die Spalte CounterName
enthält die Namen der verschiedenen Leistungsindikatoren, die Azure Monitor sammelt. Beide Spalten enthalten zahlreiche Werte, von denen viele mehrmals vorhanden sind. Um die unterschiedlichen Werte in diesen Spalten deutlich zu erkennen und festzustellen, welche Leistungsindikatoren für die aktuelle Analyse relevant sind, führen wir diese Abfrage aus:
Klicken Sie hier, um die Abfrage in der Log Analytics-Demoumgebung auszuführen
Perf // The table you’re querying
| distinct ObjectName,CounterName // Lists distinct combinations of ObjectName and CounterName values
Dieser Screenshot zeigt die verschiedenen Kombinationen der Werte ObjectName
und CounterName
in der Spalte CounterName
in den letzten 24 Stunden:
Der Leistungsindikator % Processor Time
gibt Aufschluss über die Auslastung des Prozessors bzw. der CPU. Dies ist die Information, die Sie brauchen!
Lassen Sie uns prüfen, wie wir diese Daten nutzen können und welche KQL-Vorgänge bei der Extraktion und Transformation der Daten helfen können:
Spalte | BESCHREIBUNG | Analyseziel | Zugehörige KQL-Vorgänge |
---|---|---|---|
TimeGenerated |
Gibt an, wann der virtuelle Computer die einzelnen Protokolle generiert hat. | Bestimmen des Zeitrahmens der Analyse. | where TimeGenerated > ago(1d) Weitere Informationen finden Sie unter ago(), WHERE-Operator und Numerische Operatoren. |
Computer |
Computer, auf dem das Ereignis gesammelt wurde. | Zuordnen der CPU-Auslastung zu einem bestimmten Computer. | summarize... by Computer Weitere Informationen finden Sie unter SUMMARIZE-Operator. |
ObjectName |
Enthält die Namen aller Objekte, für die die Tabelle Leistungsdaten enthält. | Überwachen der Leistung des Prozessors. | where ObjectName == "Processor" Weitere Informationen finden Sie unter == (GLEICH)-Operator. |
CounterName |
Enthält die Namen aller Leistungsindikatoren in der Tabelle. | Überwachen Sie den Leistungsindikator % Processor Time . |
where CounterName == "% Processor Time" Weitere Informationen finden Sie unter WHERE-Operator und == (GLEICH)-Operator. |
InstanceName |
Listet die überwachten Instanzen des überwachten Objekts auf. | Überwachen aller Prozessorkerne. | where InstanceName == "_Total" Weitere Informationen finden Sie unter WHERE-Operator und == (GLEICH)-Operator. |
CounterValue |
Die für den Leistungsindikator gesammelte Messung. | Abrufen von Leistungsmessungen für den Leistungsindikator % Processor Time . |
summarize min(CounterValue), avg(CounterValue), max(CounterValue), percentiles(CounterValue, 90,99) Weitere Informationen finden Sie unter SUMMARIZE-Operator und den Aggregationsfunktionen min(), max(), avg() und percentiles(). |
3. Schreiben der Abfrage
Schreiben Sie eine Abfrage, die die durchschnittliche, minimale und maximale CPU-Auslastung aller Computer im Laufe des letzten Tages zusammenfasst.
Rufen Sie alle am letzten Tag generierten Protokolle ab, die den Leistungsindikator
% Processor Time
gemeldet haben:Klicken Sie hier, um die Abfrage in der Log Analytics-Demoumgebung auszuführen
Perf // The table you’re querying | where TimeGenerated > ago(1d) and ObjectName == "Processor" and CounterName == "% Processor Time" and InstanceName == "_Total" // Filters for entries generated in the past day related to total processor time measurements
Diese Abfrage ruft alle Protokolle ab, die sich auf Messungen der Gesamtprozessorzeit des letzten Tages beziehen.
Ermitteln Sie die minimalen, maximalen und durchschnittlichen Leistungsindikatorwerte, und berechnen Sie für jeden Computer die Leistungsindikatorwerte des 90. und 99. Perzentils:
Klicken Sie hier, um die Abfrage in der Log Analytics-Demoumgebung auszuführen
Perf // The table you’re querying | where TimeGenerated > ago(1d) and ObjectName == "Processor" and CounterName == "% Processor Time" and InstanceName == "_Total" // Filters for entries generated in the past day related to total processor time measurements | summarize min(CounterValue), avg(CounterValue), max(CounterValue), percentiles(CounterValue, 90,99) by Computer // Presents the minimum, maximum, average, 90th and 99th percentile counter values for each computer
Das Resultset dieser Abfrage zeigt die minimalen, maximalen und durchschnittlichen Werte des Leistungsindikators
% Processor Time
und die des 90. und 99. Perzentils für alle Computer, für die Daten in Ihrem Log Analytics-Arbeitsbereich vorhanden sind.Filtern Sie die Abfrageergebnisse auf Einträge, bei denen der Wert des Leistungsindikator
% Processor Time
im Bereich vom 90. bis zum 99. Perzentil größer als 80 ist:Klicken Sie hier, um die Abfrage in der Log Analytics-Demoumgebung auszuführen
Perf // The table you’re querying | where TimeGenerated > ago(1d) and ObjectName == "Processor" and CounterName == "% Processor Time" and InstanceName == "_Total" // Filters for entries generated in the past day related to total processor time measurements | summarize min(CounterValue), avg(CounterValue), max(CounterValue), percentiles(CounterValue, 90,99) by Computer // Presents the minimum, maximum, average, 90th and 99th percentile counter values for each computer | where percentile_CounterValue_90 > 80 and percentile_CounterValue_99 > 80 // Filters previous query results for instances where the 90th and 99th percentile counters are higher than 80
Das Resultset dieser Abfrage besteht aus allen Computern, bei denen die oberen 10 % und 15 % der
% Processor Time
-Werte über 80 liegen.
Aufgabe: Hinzufügen von Betriebssysteminformationen aus der Tabelle „Heartbeat“ zu den Abfrageergebnissen
Sie erzielen oft ein besseres Verständnis für die Ergebnisse Ihrer Abfrage, wenn Sie Informationen aus einer anderen Tabelle mit den Ergebnissen Ihrer Abfrage korrelieren, indem Sie den Operator join
verwenden. Weitere Informationen finden Sie unter JOIN-Operator.
Können Sie mithilfe des Operators join
Informationen über das Betriebssystem der einzelnen Computer hinzufügen, die in der Tabelle Heartbeat
verfügbar sind, wie wir in der ersten Übung gesehen haben?
Lösung:
Fügen Sie den Abfrageergebnissen Informationen aus der Tabelle
Heartbeat
über das Betriebssystem der einzelnen Computer hinzu:Klicken Sie hier, um die Abfrage in der Log Analytics-Demoumgebung auszuführen
Perf // The table you’re querying | where TimeGenerated > ago(1d) and ObjectName == "Processor" and CounterName == "% Processor Time" and InstanceName == "_Total" // Filters for entries generated in the past day related to total processor time measurements | summarize min(CounterValue), avg(CounterValue), max(CounterValue), percentiles(CounterValue, 90,99) by Computer // Presents the minimum, maximum, average, 90th and 99th percentile counter values for each computer | where percentile_CounterValue_90 > 80 and percentile_CounterValue_99 > 80 // Filters previous query results for instances where the 90th and 99th percentile counters are higher than 50 | join kind=inner (Heartbeat // Introduces data from the "Heartbeat" table to the previous query results | where TimeGenerated > ago(1d) // Time range for the data added from the "Heartbeat" table | distinct Computer, OSType) on Computer // Adds distinct combinations of computer and operating system
Durch diese Iteration der Abfrage werden die Spalten
Computer
undOSType
aus der TabelleHeartbeat
den vorherigen Abfrageergebnissen hinzugefügt.Die Spalte
Computer
ist nun zweimal in den Abfrageergebnissen enthalten: einmal durch Abfragen der TabellePerf
und einmal durch Abfragen der TabelleHeartbeat
. Die SpalteComputer
der TabelleHeartbeat
wurde inComputer1
umbenannt, aber die beiden Tabellen enthalten identische Daten. Da Sie beide Spalten haben, können Sie die Ergebnisse aus den beiden Tabellen korrelieren, aber Sie können jetzt die duplizierte Spalte herausfiltern.Entfernen Sie die Spalte
Computer1
aus den Abfrageergebnissen:Klicken Sie hier, um die Abfrage in der Log Analytics-Demoumgebung auszuführen
Perf // The table you’re querying | where TimeGenerated > ago(1d) and ObjectName == "Processor" and CounterName == "% Processor Time" and InstanceName == "_Total" // Filters for entries generated in the past day related to total processor time measurements | summarize min(CounterValue), avg(CounterValue), max(CounterValue), percentiles(CounterValue, 90,99) by Computer // Presents the minimum, maximum, average, 90th and 99th percentile counter values for each computer | where percentile_CounterValue_90 > 80 and percentile_CounterValue_99 > 80 // Filters previous query results for instances where the 90th and 99th percentile counters are higher than 50 | join kind=inner (Heartbeat // Introduces data from the "Heartbeat" table to the previous query results | where TimeGenerated > ago(1d) // Time range for the data added from the "Heartbeat" table | distinct Computer, OSType) on Computer // Adds distinct combinations of computer and operating system | project-away Computer1 // Removes the "Computer1" column from the query results
Das Resultset dieser Abfrage enthält eine Liste aller Computer, deren CPU-Kapazität vollständig ausgelastet ist, sowie das Betriebssystem der einzelnen Computer, was für die weitere Analyse hilfreich sein wird.