Ö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 tabellen Perf i Azure Monitor.

Nu ska vi köra en enkel fråga i tabellen Perf 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 

Skärmbild som visar resultatet av en fråga i tabellen Perf med kolumnerna ObjectName, CounterName, InstanceName och CounterValue markerade.

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ärden i kolumnen CounterName under de senaste 24 timmarna:

Skärmbild som visar resultatet av den distinkta CounterName-frågan i tabellen Perf med värdet Procent processortid markerat.

Räknaren % Processor Time ger dig en förståelse för processoranvändningen eller processorns (Central Processing Unit) användning. 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:

Spalt 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 operatornoch numeriska operatorer.
Computer Dator som händelsen samlades in från. Associera CPU-användning med en specifik dator. summarize... by Computer
För mer information, se för att sammanfatta operatören.
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 för % Processor Time. where CounterName == "% Processor Time"
Mer information finns i där operatorn och == (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 där operatorn och == (lika med) operatorn.
CounterValue Mätningen som samlas in för räknaren. Hämta prestandamått för prestandaräknaren för % Processor Time. summarize min(CounterValue), avg(CounterValue), max(CounterValue), percentiles(CounterValue, 90,99)
Mer information finns i sammanfattningsoperatorn, och min(), max(), avg()och percentiler() aggregeringsfunktioner.

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 rapporterar prestandaräknaren % Processor Time:

    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  
    

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

    Skärmbild som visar resultatet av en fråga för alla loggar som genererats under den senaste dagen som rapporterade prestandaräknaren Procent processortid.

  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 percentilen % Processor Time räknarvärden för varje dator där det finns data på Log Analytics-arbetsytan.

    Skärmbild som visar det lägsta, högsta, genomsnittliga, 90:e och 99:e percentilresultatet för frågan i tabellen Perf.

  3. Filtrera frågeresultatet för poster där det % 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 10% och 15% % Processor Time värden är över 80.

    Skärmbild som visar resultatet av en fråga som filtrerar efter poster där räknarvärdet för processortid i procent är högre än 80 i intervallet 90:e och 99:e percentilen.

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 join operatorn. För mer information, se 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 tabellen Heartbeat, som vi såg i den första övningen?

Lösning:

  1. Lägg till information från tabellen Heartbeat 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 tabellen Heartbeat till föregående frågeresultat.

    Skärmbild som visar resultatet av en fråga som lägger till operativsysteminformation från tabellen Heartbeat till föregående frågeresultat.

    Kolumnen Computer visas nu två gånger i frågeresultatet – en gång från frågan i tabellen Perf och en gång från frågan i tabellen Heartbeat. Kolumnen Computer från tabellen Heartbeat har bytt namn Computer1, 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. Ta bort kolumnen Computer1 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.

    Skärmbild som visar resultatet av en fråga som tar bort kolumnen Dator 1 från föregående frågeresultat.