Ćwiczenie — identyfikowanie maszyn z wysokim użyciem procesora CPU

Ukończone

W tym miejscu napiszesz zapytania KQL, aby pobrać i przekształcić dane z Perf tabeli, aby zrozumieć, które maszyny osiągnęły lub zbliżają się do ich całkowitej pojemności obliczeniowej i które maszyny są niedostatecznie wykorzystane.

1. Ustawianie celów

Aby rozwiązać problemy z wydajnością, rozwiązać potencjalne problemy i zidentyfikować możliwości wydajnego działania, chcesz przeanalizować użycie centralnej jednostki przetwarzania (CPU) maszyn wirtualnych w środowisku IT.

Aby zidentyfikować problemy z wydajnością związane z procesorem CPU i możliwości uzyskania większej wydajności, potrzebne są informacje o:

  • Trendy użycia procesora CPU dla każdej aktywnej maszyny.
  • Użycie procesora CPU maszyn w godzinach szczytu i cichych.

2. Ocena dzienników

Agenci systemu Windows i Linux wysyłają liczniki wydajności składników sprzętowych, systemów operacyjnych i aplikacji działających na monitorowanych maszynach do Perf tabeli w usłudze Azure Monitor.

Uruchommy proste zapytanie w Perf tabeli, aby pobrać dzienniki z ostatnich 24 godzin i poznać schemat tabeli oraz dane przechowywane w tabeli:

Kliknij, aby uruchomić zapytanie w środowisku demonstracyjnym usługi Log Analytics

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.

Zobaczysz, że TimeGeneratedkolumny , Computer, CounterNameObjectName, InstanceNamei CounterValue przechowują dane istotne dla naszej analizy.

Kolumna ObjectName zawiera listę nazw wszystkich obiektów, dla których usługa Azure Monitor zbiera dane z monitorowanych maszyn. Kolumna CounterName zawiera nazwy różnych liczników wydajności zbieranych przez usługę Azure Monitor. Obie te kolumny przechowują wiele wartości, z których wiele jest wyświetlanych wielokrotnie. Aby wyraźnie zobaczyć różne wartości w tych kolumnach i określić, które liczniki są istotne dla bieżącej analizy, uruchommy to zapytanie:

Kliknij, aby uruchomić zapytanie w środowisku demonstracyjnym usługi Log Analytics

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

Ten zrzut ekranu przedstawia różne kombinacje ObjectName wartości i CounterName w kolumnie w CounterName ciągu ostatnich 24 godzin:

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

Licznik % Processor Time zapewnia zrozumienie wykorzystania procesora lub procesora cpu (Central Processing Unit). To są potrzebne informacje!

Oceńmy, jak możemy używać tych danych i które operacje KQL mogą pomóc w wyodrębnieniu i przekształceniu danych:

Kolumna opis Cel analizy Powiązane operacje KQL
TimeGenerated Wskazuje, kiedy maszyna wirtualna wygenerowała każdy dziennik. Zdefiniuj zakres czasu analizy. where TimeGenerated > ago(1d)
Aby uzyskać więcej informacji, zobacz ago(), where, operator i Operatory liczbowe.
Computer Komputer, z którego zebrano zdarzenie. Skojarz użycie procesora CPU z określonym komputerem. summarize... by Computer
Aby uzyskać więcej informacji, zobacz operator podsumowania.
ObjectName Przechowuje nazwy wszystkich obiektów, dla których tabela przechowuje dane wydajności. Monitorowanie wydajności procesora. where ObjectName == "Processor"
Aby uzyskać więcej informacji, zobacz == (equals) operator.
CounterName Przechowuje nazwy wszystkich liczników wydajności w tabeli. % Processor Time Monitoruj licznik wydajności. where CounterName == "% Processor Time"
Aby uzyskać więcej informacji, zobacz , gdzie operator i == (equals) operator.
InstanceName Wyświetla listę monitorowanych wystąpień monitorowanego obiektu. Monitoruj wszystkie rdzenie procesora. where InstanceName == "_Total"
Aby uzyskać więcej informacji, zobacz , gdzie operator i == (equals) operator.
CounterValue Pomiar zebrany dla licznika. Pobieranie pomiarów wydajności dla licznika % Processor Time wydajności. summarize min(CounterValue), avg(CounterValue), max(CounterValue), percentiles(CounterValue, 90,99)
Aby uzyskać więcej informacji, zobacz operator podsumowania oraz funkcje agregacji min(), max(), avg()i percentyls().

3. Napisz zapytanie

Napisz zapytanie, które podsumowuje średnie, minimalne i maksymalne użycie procesora CPU wszystkich maszyn w ciągu ostatniego dnia.

  1. Pobierz wszystkie dzienniki wygenerowane w ciągu ostatniego dnia, które zgłosiły % Processor Time licznik wydajności:

    Kliknij, aby uruchomić zapytanie w środowisku demonstracyjnym usługi Log Analytics.

    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  
    

    To zapytanie pobiera wszystkie dzienniki związane z całkowitymi pomiarami czasu procesora z ostatniego dnia.

    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. Znajdź wartości minimalnej, maksymalnej i średniej licznika oraz oblicz wartości licznika 90 i 99 percentyla dla każdego komputera:

    Kliknij, aby uruchomić zapytanie w środowisku demonstracyjnym usługi Log Analytics

    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 
    

    Zestaw wyników tego zapytania przedstawia minimalne, maksymalne, średnie, 90 i 99. wartości licznika percentyla % Processor Time dla każdego komputera, dla którego znajdują się dane w obszarze roboczym usługi Log Analytics.

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

  3. Przefiltruj wyniki zapytania dla wpisów, w których wartość licznika % Processor Time jest wyższa niż 80 w zakresie 90 i 99. percentylu:

    Kliknij, aby uruchomić zapytanie w środowisku demonstracyjnym usługi Log Analytics

    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
    

    Zestaw wyników tego zapytania składa się ze wszystkich komputerów, dla których 10% i 15% % Processor Time wartości są ponad 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.

Wyzwanie: Dodawanie informacji o systemie operacyjnym z tabeli Puls do wyników zapytania

Często możesz lepiej zrozumieć wyniki zapytania, korelując informacje z innej tabeli do wyników zapytania przy użyciu join operatora . Aby uzyskać więcej informacji, zobacz operator sprzężenia.

Czy można użyć join operatora , aby dodać informacje o systemie operacyjnym uruchomionym na każdym komputerze, który jest dostępny w Heartbeat tabeli, jak pokazano w pierwszym ćwiczeniu?

Rozwiązanie 2.

  1. Dodaj informacje z Heartbeat tabeli o systemie operacyjnym uruchomionym na każdym z komputerów w wynikach zapytania:

    Kliknij, aby uruchomić zapytanie w środowisku demonstracyjnym usługi Log Analytics

    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 
    

    Ta iteracja zapytania dodaje Computer kolumny i OSType z Heartbeat tabeli do poprzednich wyników zapytania.

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

    Kolumna Computer jest teraz wyświetlana dwa razy w wynikach zapytania — raz z zapytania w Perf tabeli i raz z zapytania w Heartbeat tabeli. Nazwa Computer kolumny z Heartbeat tabeli została zmieniona Computer1, ale obie tabele zawierają identyczne dane. Posiadanie obu kolumn umożliwia korelowanie wyników z dwóch tabel, ale teraz można odfiltrować zduplikowaną kolumnę.

  2. Usuń kolumnę Computer1 z wyników zapytania:

    Kliknij, aby uruchomić zapytanie w środowisku demonstracyjnym usługi Log Analytics

    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 
    

    Zestaw wyników tego zapytania zawiera listę wszystkich komputerów, które osiągnęły pełną pojemność procesora CPU i system operacyjny uruchomiony na każdym komputerze, co będzie pomocne w dalszej analizie.

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