Övning – Identifiera datorer med hög CPU-användning

Slutförd

Här skriver du KQL-frågor för att hämta och transformera data från Perf tabellen för att få en förståelse för vilka datorer som har nått eller närmar sig sin totala beräkningskapacitet och vilka datorer som underutnyttas.

1. Ange mål

För att åtgärda prestandaproblem, åtgärda potentiella problem och identifiera möjligheter att arbeta mer effektivt vill du analysera användningen av virtuella datorer i din IT-miljö.

För att identifiera cpu-relaterade prestandaproblem och möjligheter att bli effektivare behöver du information om:

  • Cpu-användningstrender för varje aktiv dator.
  • CPU-användning av datorer vid högsta och tysta tider.

2. Utvärdera loggar

Windows- och Linux-agenter skickar prestandaräknare för maskinvarukomponenter, operativsystem och program som körs på övervakade datorer till Perf tabellen i Azure Monitor.

Nu ska vi köra en enkel fråga i Perf tabellen för att hämta loggar från de senaste 24 timmarna och få en uppfattning om tabellschemat och de data som tabellen innehåller:

Klicka för att köra frågan i Log Analytics-demomiljön

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.

Du kan se att kolumnerna TimeGenerated, Computer, ObjectName, CounterName, InstanceNameoch CounterValue innehåller data som är relevanta för vår analys.

Kolumnen ObjectName visar namnen på alla objekt som Azure Monitor samlar in data från övervakade datorer för. Kolumnen CounterName innehåller namnen på de olika prestandaräknare som Azure Monitor samlar in. Båda dessa kolumner innehåller många värden, varav många visas flera gånger. För att tydligt se de distinkta värdena i dessa kolumner och avgöra vilka räknare som är relevanta för den aktuella analysen ska vi köra den här frågan:

Klicka för att köra frågan i Log Analytics-demomiljön

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

Den här skärmbilden visar de distinkta kombinationerna av ObjectName och CounterName värdena i CounterName kolumnen under de senaste 24 timmarna:

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

Räknaren % Processor Time ger dig en förståelse för processoranvändningen eller central bearbetningsenhet (CPU). Det här är information du behöver!

Nu ska vi utvärdera hur vi kan använda dessa data och vilka KQL-åtgärder som kan hjälpa till att extrahera och transformera data:

Kolumn beskrivning Analysmål Relaterade KQL-åtgärder
TimeGenerated Anger när den virtuella datorn genererade varje logg. Definiera tidsomfånget för analysen. where TimeGenerated > ago(1d)
Mer information finns i ago(), där operatorn och numeriska operatorer.
Computer Dator som händelsen samlades in från. Associera CPU-användning med en specifik dator. summarize... by Computer
Mer information finns i sammanfatta operatorn.
ObjectName Innehåller namnen på alla objekt som tabellen innehåller prestandadata för. Övervaka processorns prestanda. where ObjectName == "Processor"
Mer information finns i operatorn == (lika med).
CounterName Innehåller namnen på alla prestandaräknare i tabellen. Övervaka prestandaräknaren % Processor Time . where CounterName == "% Processor Time"
Mer information finns i var operatorn och == (är lika med) operatorn.
InstanceName Visar en lista över övervakade instanser av det övervakade objektet. Övervaka alla processorskärnor. where InstanceName == "_Total"
Mer information finns i var operatorn och == (är lika med) operatorn.
CounterValue Mätningen som samlas in för räknaren. Hämta prestandamått för prestandaräknaren % Processor Time . summarize min(CounterValue), avg(CounterValue), max(CounterValue), percentiles(CounterValue, 90,99)
Mer information finns i sammanfatta operatorn och aggregeringsfunktionerna min(), max(), avg()och percentiles().

3. Skriv din fråga

Skriv en fråga som sammanfattar den genomsnittliga, lägsta och högsta CPU-användningen för alla datorer under den senaste dagen.

  1. Hämta alla loggar som genererats under den senaste dagen som rapporterade prestandaräknaren % Processor Time :

    Klicka här om du vill köra frågan i Log Analytics-demomiljön.

    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  
    

    Den här frågan hämtar alla loggar relaterade till totalt antal processortidsmätningar från den senaste dagen.

    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. Hitta de lägsta, högsta och genomsnittliga räknarvärdena och beräkna 90:e och 99:e percentilens räknarvärden för varje dator:

    Klicka för att köra frågan i Log Analytics-demomiljön

    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 
    

    Resultatuppsättningen för den här frågan visar minsta, högsta, genomsnittliga, 90:e och 99:e percentilens % Processor Time räknarvärden för varje dator där det finns data på Log Analytics-arbetsytan.

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

  3. Filtrera frågeresultatet för poster där % Processor Time räknarvärdet är högre än 80 i det 90:e och 99:e percentilintervallet:

    Klicka för att köra frågan i Log Analytics-demomiljön

    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
    

    Resultatuppsättningen för den här frågan består av alla datorer där de översta värdena på 10 % och 15 % % Processor Time är över 80.

    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.

Utmaning: Lägga till operativsysteminformation från tabellen Pulsslag i frågeresultatet

Du kan ofta få en bättre förståelse för dina frågeresultat genom att korrelera information från en annan tabell till dina frågeresultat med hjälp av operatorn join . Mer information finns i kopplingsoperatorn.

Kan du använda operatorn join för att lägga till information om operativsystemet som körs på varje dator, som är tillgängligt i Heartbeat tabellen, som vi såg i den första övningen?

Lösning:

  1. Lägg till information från Heartbeat tabellen om operativsystemet som körs på var och en av datorerna i frågeresultatet:

    Klicka för att köra frågan i Log Analytics-demomiljön

    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 
    

    Den här iterationen av frågan lägger till kolumnerna Computer och OSType från Heartbeat tabellen i föregående frågeresultat.

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

    Kolumnen Computer visas nu två gånger i frågeresultatet – en gång från frågan i Perf tabellen och en gång från frågan i Heartbeat tabellen. Kolumnen Computer från Heartbeat tabellen har bytt Computer1namn, men de två tabellerna innehåller identiska data. Med båda kolumnerna kan du korrelera resultatet från de två tabellerna, men du kan nu filtrera bort den duplicerade kolumnen.

  2. Computer1 Ta bort kolumnen från frågeresultatet:

    Klicka för att köra frågan i Log Analytics-demomiljön

    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 
    

    Resultatuppsättningen för den här frågan visar en lista över alla datorer som har nått sin fulla processorkapacitet och det operativsystem som körs på varje dator, vilket är användbart för ytterligare analys.

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