Oefening: machines met een hoog CPU-gebruik identificeren

Voltooid

Hier schrijft u KQL-query's om gegevens op te halen en te transformeren uit de Perf tabel om inzicht te krijgen in welke machines de totale rekencapaciteit hebben bereikt of bijna zijn bereikt en welke machines worden onderbroken.

1. Doelstellingen instellen

Als u prestatieproblemen wilt oplossen, potentiële problemen wilt beperken en mogelijkheden wilt identificeren om efficiënter te werken, wilt u het CPU-gebruik (Central Processing Unit) van virtuele machines in uw IT-omgeving analyseren.

Als u prestatieproblemen en mogelijkheden voor CPU-gerelateerde prestaties wilt identificeren om efficiënter te worden, hebt u informatie nodig over:

  • Trends in CPU-gebruik van elke actieve machine.
  • CPU-gebruik van machines op piek- en stiltetijden.

2. Logboeken evalueren

Windows- en Linux-agents verzenden prestatiemeteritems van hardwareonderdelen, besturingssystemen en toepassingen die worden uitgevoerd op bewaakte machines naar de Perf tabel in Azure Monitor.

Laten we een eenvoudige query uitvoeren op de Perf tabel om logboeken uit de afgelopen 24 uur op te halen en een beeld te krijgen van het tabelschema en de gegevens die de tabel bevat:

Klik hier om een query uit te voeren in de Log Analytics-demo-omgeving

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.

U kunt zien dat de TimeGeneratedkolommen , Computer, ObjectNameen InstanceNameCounterNameCounterValue kolommen gegevens bevatten die relevant zijn voor onze analyse.

De ObjectName kolom bevat de namen van alle objecten waarvoor Azure Monitor gegevens verzamelt van bewaakte machines. De CounterName kolom bevat de namen van de verschillende prestatiemeteritems die door Azure Monitor worden verzameld. Beide kolommen bevatten veel waarden, waarvan veel meerdere keren worden weergegeven. Als u duidelijk de afzonderlijke waarden in deze kolommen wilt zien en wilt bepalen welke tellers relevant zijn voor de huidige analyse, gaan we deze query uitvoeren:

Klik hier om een query uit te voeren in de Log Analytics-demo-omgeving

Perf // The table you’re querying
| distinct ObjectName,CounterName // Lists distinct combinations of ObjectName and CounterName values

In deze schermopname ziet u de unieke combinaties van ObjectName en CounterName waarden in de CounterName kolom in de afgelopen 24 uur:

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

De % Processor Time teller geeft u inzicht in het gebruik van de processor of DE CPU (Central Processing Unit). Dit is informatie die u nodig hebt.

Laten we eens kijken hoe we deze gegevens kunnen gebruiken en welke KQL-bewerkingen kunnen helpen bij het extraheren en transformeren van de gegevens:

Kolom Beschrijving Analysedoel Gerelateerde KQL-bewerkingen
TimeGenerated Geeft aan wanneer de virtuele machine elk logboek heeft gegenereerd. Definieer het tijdsbereik van de analyse. where TimeGenerated > ago(1d)
Zie ago(), waar operator en numerieke operatoren voor meer informatie.
Computer Computer van waaruit de gebeurtenis is verzameld. CPU-gebruik koppelen aan een specifieke computer. summarize... by Computer
Zie samenvattingsoperator voor meer informatie.
ObjectName Bevat de namen van alle objecten waarvoor de tabel prestatiegegevens bevat. Bewaak de prestaties van de processor. where ObjectName == "Processor"
Zie de operator == (is gelijk aan) voor meer informatie.
CounterName Bevat de namen van alle prestatiemeteritems in de tabel. Bewaak het % Processor Time prestatiemeteritem. where CounterName == "% Processor Time"
Zie waar operator en == (gelijk aan) operator voor meer informatie.
InstanceName Hiermee worden de bewaakte exemplaren van het bewaakte object weergegeven. Bewaak alle processorkernen. where InstanceName == "_Total"
Zie waar operator en == (gelijk aan) operator voor meer informatie.
CounterValue De meting die voor de teller is verzameld. Prestatiemetingen voor de % Processor Time prestatiemeteritem ophalen. summarize min(CounterValue), avg(CounterValue), max(CounterValue), percentiles(CounterValue, 90,99)
Zie samenvattingsoperator en de aggregatiefuncties min(, max(), avg()en percentielen() voor meer informatie.

3. Schrijf uw query

Schrijf een query met een overzicht van het gemiddelde, minimale en maximale CPU-gebruik van alle computers in de afgelopen dag.

  1. Haal alle logboeken op die zijn gegenereerd op de afgelopen dag waarop de % Processor Time prestatiemeteritems zijn gerapporteerd:

    Klik hier om query's uit te voeren in de Log Analytics-demo-omgeving.

    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  
    

    Met deze query worden alle logboeken opgehaald die betrekking hebben op de totale processortijdmetingen van de afgelopen dag.

    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. Zoek de minimum-, maximum- en gemiddelde prestatiemeteritems en bereken de 90e en 99e percentieltellerwaarden voor elke computer:

    Klik hier om een query uit te voeren in de Log Analytics-demo-omgeving

    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 
    

    In de resultatenset van deze query worden de minimum-, maximum-, gemiddelde-, 90e en 99e percentieltellerwaarden % Processor Time weergegeven voor elke computer waarvoor gegevens zich in uw Log Analytics-werkruimte bevinden.

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

  3. Filter de queryresultaten voor vermeldingen waarbij de % Processor Time tellerwaarde hoger is dan 80 in het bereik van het 90e en 99e percentiel:

    Klik hier om een query uit te voeren in de Log Analytics-demo-omgeving

    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
    

    De resultatenset van deze query bestaat uit alle computers waarvoor de bovenste 10% en 15% % Processor Time waarden meer dan 80 zijn.

    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.

Uitdaging: Besturingssysteemgegevens uit de Heartbeat-tabel toevoegen aan de queryresultaten

U kunt uw queryresultaten vaak beter begrijpen door informatie uit een andere tabel te correleren met de queryresultaten met behulp van de join operator. Zie joinoperator voor meer informatie.

Kunt u de join operator gebruiken om informatie toe te voegen over het besturingssysteem dat wordt uitgevoerd op elke computer, die beschikbaar is in de Heartbeat tabel, zoals we in de eerste oefening hebben gezien?

Oplossing:

  1. Voeg informatie uit de Heartbeat tabel toe over het besturingssysteem dat wordt uitgevoerd op elk van de computers in de queryresultaten:

    Klik hier om een query uit te voeren in de Log Analytics-demo-omgeving

    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 
    

    Met deze iteratie van de query worden de Computer en OSType kolommen uit de Heartbeat tabel toegevoegd aan de vorige queryresultaten.

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

    De Computer kolom wordt nu twee keer weergegeven in de queryresultaten: eenmaal uit de query in de Perf tabel en eenmaal uit de query in de Heartbeat tabel. De Computer naam van de kolom uit de Heartbeat tabel is gewijzigd Computer1, maar de twee tabellen bevatten identieke gegevens. Als u beide kolommen hebt, kunt u de resultaten uit de twee tabellen correleren, maar u kunt nu de dubbele kolom wegfilteren.

  2. Verwijder de Computer1 kolom uit de queryresultaten:

    Klik hier om een query uit te voeren in de Log Analytics-demo-omgeving

    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 
    

    De resultatenset van deze query bevat alle computers die de volledige CPU-capaciteit hebben bereikt en het besturingssysteem dat op elke computer wordt uitgevoerd, wat nuttig is voor verdere analyse.

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