Übung: Ermitteln von Computern mit hoher CPU-Auslastung

Abgeschlossen

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 

Screenshot that shows the results of a query on the Perf table with the ObjectName, CounterName, InstanceName, and CounterValue columns highlighted.

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:

Screenshot that shows the results of the distinct CounterName query on the Perf table with the Percentage Processor Time value highlighted.

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.

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

    Screenshot that shows the results of a query for all logs generated in the past day that reported the Percentage Processor Time performance counter.

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

    Screenshot that shows the minimum, maximum, average, 90th and 99th percentile results of the query on the Perf table.

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

    Screenshot that shows the results of a query that filters for entries where the Percentage Processor Time counter value is higher than 80 in the 90th and 99th percentile range.

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:

  1. 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 und OSType aus der Tabelle Heartbeat den vorherigen Abfrageergebnissen hinzugefügt.

    Screenshot that shows the results of a query that adds operating system information from the Heartbeat table to the previous query results.

    Die Spalte Computer ist nun zweimal in den Abfrageergebnissen enthalten: einmal durch Abfragen der Tabelle Perf und einmal durch Abfragen der Tabelle Heartbeat. Die Spalte Computer der Tabelle Heartbeat wurde in Computer1 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.

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

    Screenshot that shows the results of a query that removes the Computer 1 column from the previous query results.