Ćwiczenie — wyświetlanie listy ostatnio aktywnych maszyn wirtualnych, które przestały wysyłać dzienniki

Ukończone

W tym miejscu napiszesz zapytania KQL, aby pobrać i przekształcić dane z Heartbeat tabeli w celu uzyskania szczegółowych informacji na temat stanu maszyn w środowisku.

1. Ustawianie celów

Pierwszym celem analizy dzienników jest upewnienie się, że uzyskujesz dane dotyczące wszystkich aktywnych maszyn wirtualnych w sieci. Chcesz zidentyfikować maszyny, które przestają wysyłać dane, aby zapewnić pełną widoczność wszystkich aktywnych maszyn wirtualnych.

Aby określić, które maszyny przestały wysyłać dane, potrzebne są następujące informacje:

  • Wszystkie maszyny, które niedawno zarejestrowały dane, ale nie zarejestrowały danych zgodnie z oczekiwaniami w ciągu ostatnich kilku minut.
  • W celu dokładniejszej analizy warto wiedzieć, który agent maszyny wirtualnej działa na każdej maszynie.

2. Ocena dzienników

Usługa Azure Monitor używa agenta usługi Azure Monitor do zbierania danych dotyczących działań i procesów systemu operacyjnego działających wewnątrz maszyn wirtualnych.

Uwaga

Niektóre starsze maszyny w twoim środowisku nadal używają starszych agentów usługi Log Analytics dla systemów Windows i Linux, których usługa Azure Monitor jest przestarzała.

Agent usługi Azure Monitor i agent usługi Log Analytics wysyłają dane kondycji maszyny wirtualnej do Heartbeat tabeli raz na minutę.

Uruchommy proste take 10 zapytanie w Heartbeat tabeli, aby zobaczyć typ danych przechowywanych w poszczególnych kolumnach:

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

Heartbeat
| take 10

Kolumny TimeGenerated, Computer, Categoryi OSType mają wszystkie dane, które są istotne dla naszej analizy.

Screenshot that shows the results of a take 10 query on the Heartbeat table with the TimeGenerated, Computer, Category, and OSType columns highlighted.

Teraz 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.
  • Zidentyfikuj ostatnio aktywne maszyny.
  • Znajdź ostatni dziennik wygenerowany dla każdej maszyny i sprawdź, czy został wygenerowany w ciągu ostatnich kilku minut.
  • where TimeGenerated >ago(48h)
  • summarize max(TimeGenerated)
  • max_TimeGenerated < ago(5m)
Aby uzyskać więcej informacji, zobacz where operator, summarize operator, ago() i max() (funkcja agregacji).
Computer Unikatowy identyfikator maszyny.
  • Podsumowywanie wyników według maszyny.
  • Grupuj maszyny według odrębnych wersji agentów.
  • summarize by Computer
  • summarize ComputersList=make_set(Computer)
Aby uzyskać więcej informacji, zobacz operator podsumowania i make_set() (funkcja agregacji).
Category Typ agenta:
  • Azure Monitor Agent Lub
  • Direct Agent, który reprezentuje agentów usługi Log Analytics. Agent usługi Log Analytics dla systemu Windows jest również nazywany MMA. Agent usługi Log Analytics dla systemu Linux jest również nazywany usługą OMS.
Zidentyfikuj agenta uruchomionego na maszynie. Aby uprościć wyniki i ułatwić dalszą analizę, taką jak filtrowanie:
  • Zmień nazwę kolumny na AgentType (AgentType=Category)
  • Zmień wartość na Direct Agent MMA dla maszyn z systemem Windows (AgentType= iif(AgentType == "Direct Agent" and OSType =="Windows", "MMA", AgentType).
  • Zmień wartość na Direct Agent OMS dla maszyn z systemem Linux (AgentType= iif(AgentType == "Direct Agent" and OSType =="Linux", "OMS", AgentType).
Aby uzyskać więcej informacji, zobacz operator iff() i == (equals).
OSType Typ systemu operacyjnego uruchomionego na maszynie wirtualnej. Zidentyfikuj typ agenta dla agentów usługi Log Analytics, które są różne dla systemów Windows i Linux. summarize by... OSType
Aby uzyskać więcej informacji, zobacz operator podsumowania.
Version Numer wersji agenta monitorujący maszynę wirtualną. Zidentyfikuj wersję agenta na każdej maszynie. Zmień nazwę kolumny na AgentVersion (AgentVersion=Version).

3. Napisz zapytanie

Napisz zapytanie zawierające listę maszyn, które były aktywne w ciągu ostatnich 48 godzin, ale nie zarejestrowało danych w Heartbeat tabeli w ciągu ostatnich pięciu minut.

  1. Pobierz wszystkie dzienniki z ostatnich 48 godzin:

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

    Heartbeat // The table you’re querying
    | where TimeGenerated >ago(48h) // Time range for the query - in this case, logs generated in the past 48 hours
    

    Zestaw wyników tego zapytania zawiera dzienniki ze wszystkich maszyn, które wysyłały dane dziennika w ciągu ostatnich 48 godzin. Wyniki te prawdopodobnie obejmują wiele dzienników dla każdej aktywnej maszyny.

    Screenshot that shows the results of a query on the Heartbeat table for all records generated in the past 48 hours.

    Aby dowiedzieć się, które maszyny nie wysłały ostatnio dzienników, wystarczy tylko ostatnie dzienniki wysyłane przez każdą maszynę.

  2. Znajdź ostatni dziennik wygenerowany przez każdą maszynę i podsumuj według komputera, typu agenta i systemu operacyjnego:

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

    Heartbeat // The table you’re querying
    | where TimeGenerated >ago(48h) // Time range for the query - in this case, logs generated in the past 48 hours
    | summarize max(TimeGenerated) by Computer, AgentType=Category, OSType // Retrieves the last record generated by each computer and provides information about computer, agent type, and operating system
    

    Masz teraz jeden dziennik z każdej maszyny, która zarejestrowała dane w ciągu ostatnich 48 godzin — ostatni dziennik wysyłany przez każdą maszynę.

    summarize W wierszu zmieniono nazwę kolumny Category na AgentType, która lepiej opisuje informacje przeglądane w kolumnie w ramach tej analizy.

    Screenshot that shows the results of a query for the last log generated by each machine.

  3. Aby sprawdzić, które maszyny nie wysłały dzienników w ciągu ostatnich pięciu minut, odfiltruj wszystkie dzienniki wygenerowane w ciągu ostatnich pięciu minut:

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

    Heartbeat // The table you’re querying
    | where TimeGenerated >ago(48h) // Time range for the query - in this case, logs generated in the past 48 hours
    | summarize max(TimeGenerated) by Computer, AgentType=Category, OSType // Retrieves the last record generated by each computer and provides information about computer, agent type, and operating system
    | where max_TimeGenerated < ago(5m) // Filters away all records generated in the last five minutes
    

    Zestaw wyników tego zapytania zawiera ostatni dziennik wygenerowany przez wszystkie maszyny, które zarejestrowały dane w ciągu ostatnich 48 godzin, ale nie zawiera dzienników wygenerowanych w ciągu ostatnich pięciu minut. Innymi słowy, każda maszyna, która zarejestrowała dane w ciągu ostatnich pięciu minut, nie jest uwzględniona w zestawie wyników.

    Screenshot that shows the results of a query that filters away all records generated in the last five minutes.

    Masz teraz dane, których szukasz: listę wszystkich maszyn, które rejestrowały dane w ciągu ostatnich 48 godzin, ale nie były rejestrowane zgodnie z oczekiwaniami w ciągu ostatnich pięciu minut. Zestaw wyników składa się z zestawu komputerów, które chcesz dokładniej zbadać.

  4. Manipuluj wynikami zapytania, aby bardziej wyraźnie przedstawić informacje.

    Można na przykład zorganizować dzienniki według czasu wygenerowanego — od najstarszych do najnowszych — aby zobaczyć, które komputery przeszły najdłużej bez rejestrowania danych.

    Wartość Direct Agent w kolumnie AgentType informuje o tym, że agent usługi Log Analytics jest uruchomiony na maszynie. Ponieważ agent usługi Log Analytics dla systemu Windows jest również nazywany usługą OMS, a w przypadku systemu Linux agent jest również nazywany mmS, zmiana Direct Agent nazwy wartości na MMA dla maszyn z systemem Windows i OMS maszyn z systemem Linux upraszcza wyniki i ułatwia dalszą analizę, taką jak filtrowanie.

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

    Heartbeat // The table you’re querying
    | where TimeGenerated >ago(48h) // Time range for the query - in this case, logs generated in the past 48 hours 
    | summarize max(TimeGenerated) by Computer,AgentType=Category, OSType // Retrieves the last record generated by each computer and provides information about computer, agent type, and operating system
    | where max_TimeGenerated < ago(5m) // Filters away all records generated in the last five minutes
    | extend AgentType= iif(AgentType == "Direct Agent" and OSType =="Windows", "MMA", AgentType) // Changes the AgentType value from "Direct Agent" to "MMA" for Windows machines
    | extend AgentType= iif(AgentType == "Direct Agent" and OSType =="Linux", "OMS", AgentType) // Changes the AgentType value from "Direct Agent" to "OMS" for Linux machines
    | order by max_TimeGenerated asc // Sorts results by max_TimeGenerated from oldest to newest
    | project-reorder max_TimeGenerated,Computer,AgentType,OSType  // Reorganizes the order of columns in the result set
    

    Napiwek

    Służy max_TimeGenerated do korelowania ostatniego pulsu maszyny, która przestała zgłaszać dzienniki maszyn lub inne zdarzenia środowiskowe, które wystąpiły w tym samym czasie. Korelowanie dzienników w ten sposób może pomóc w znalezieniu głównej przyczyny badanego problemu.

    Screenshot that shows the results of a query that changes the AgentType values to MMA for Windows machines and to OMS for Linux machines.

Wyzwanie: Grupowanie maszyn przez monitorowanie wersji agenta i agenta

Zrozumienie, którzy agenci i wersje agentów są uruchomione na maszynach, mogą pomóc w analizie głównej przyczyny problemów i zidentyfikowaniu maszyn, które należy zaktualizować do nowego agenta lub nowej wersji agenta.

Czy możesz pomyśleć o kilku szybkich poprawkach, które można wprowadzić w zapytaniu opracowanym powyżej, aby uzyskać te informacje?

Rozważ następujące kwestie:

  • Jakie dodatkowe informacje należy wyodrębnić z dzienników?
  • Której operacji KQL można użyć do grupowania maszyn według uruchomionej wersji agenta?

Rozwiązanie 2.

  1. Skopiuj pierwsze pięć wierszy z zapytania i dodaj kolumnę Version do summarize wiersza zapytania, aby wyodrębnić informacje o wersji agenta:

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

    Heartbeat // The table you’re querying
    | where TimeGenerated >ago(48h) // Time range for the query - in this case, logs generated in the past 48 hours 
    | summarize max(TimeGenerated) by Computer,AgentType=Category, OSType, Version // Retrieves the last record generated by each computer and provides information about computer, agent type, operating system, and agent version 
    | extend AgentType= iif(AgentType == "Direct Agent" and OSType =="Windows", "MMA", AgentType) // Changes the AgentType value from "Direct Agent" to "MMA" for Windows machines
    | extend AgentType= iif(AgentType == "Direct Agent" and OSType =="Linux", "OMS", AgentType) // Changes the AgentType value from "Direct Agent" to "OMS" for Linux machines
    

    Screenshot that shows the results of the first five lines of the query we've built up in this exercise, with the Version column added to the Summarize line to add agent version information to the results.

  2. Zmień nazwę kolumny na Version AgentVersion , aby uzyskać jasność, dodaj kolejny summarize wiersz, aby znaleźć unikatowe kombinacje typu agenta, wersji agenta i typu systemu operacyjnego, a następnie użyj funkcji agregującej KQL make_set() , aby wyświetlić listę wszystkich komputerów z każdą kombinacją typu agenta i wersji agenta:

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

    Heartbeat // The table you’re querying
    | where TimeGenerated >ago(48h) // Time range for the query - in this case, logs generated in the past 48 hours 
    | summarize max(TimeGenerated) by Computer,AgentType=Category, OSType, Version // Retrieves the last record generated by each computer and provides information about computer, agent type, operating system, and agent version 
    | extend AgentType= iif(AgentType == "Direct Agent" and OSType =="Windows", "MMA", AgentType) // Changes the AgentType value from "Direct Agent" to "MMA" for Windows machines
    | extend AgentType= iif(AgentType == "Direct Agent" and OSType =="Linux", "OMS", AgentType) // Changes the AgentType value from "Direct Agent" to "OMS" for Linux machines
    | summarize ComputersList=make_set(Computer) by AgentVersion=Version, AgentType, OSType // Summarizes the result set by unique combination of agent type, agent version, and operating system, and lists the set of all machines running the specific agent version
    

    Masz teraz dane, których szukasz: listę unikatowych kombinacji typu agenta i wersji agenta oraz zestaw wszystkich ostatnio aktywnych maszyn z uruchomioną określoną wersją każdego agenta.

    Screenshot that shows the results of a query that creates a list of all machines running each unique combination of agent type, agent version, and operating system.