練習 - 列出最近停止傳送記錄的使用中虛擬機器

已完成

在這裡,您將會撰寫 KQL 查詢,從 Heartbeat 資料表擷取和轉換資料,以取得環境中機器狀態的深入解析。

1. 設定目標

您的第一個記錄分析目標是確保您取得網路中所有使用中虛擬機器的相關資料。 您想要識別停止傳送資料的機器,以確保您擁有所有使用中虛擬機器的完整可見度。

若要判斷哪些機器已停止傳送資料,您需要下列相關資訊:

  • 最近記錄過資料但過去幾分鐘未如預期記錄資料的所有機器。
  • 若要進行更深入的分析,了解每部機器上執行的虛擬機器代理程式會很有用。

2. 評估記錄

Azure 監視器會使用 Azure 監視器代理程式來收集虛擬機器內所執行活動和作業系統程序的相關資料。

注意

您環境中的某些較舊機器仍會使用舊版 Log Analytics Windows 和 Linux 代理程式,Azure 監視器即將淘汰。

Azure 監視器代理程式和 Log Analytics 代理程式會每分鐘將虛擬機器健康情況資料傳送至 Heartbeat 資料表一次。

讓我們在 Heartbeat 資料表上執行簡單的 take 10 查詢,以查看其每個資料行所保存的資料類型:

點擊以在 Log Analytics 示範環境中執行查詢

Heartbeat
| take 10

TimeGeneratedComputerCategoryOSType 資料行都有與我們的分析相關的資料。

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

現在讓我們評估如何使用這項資料,以及哪些 KQL 作業可協助擷取和轉換資料:

資料行 描述 分析目標 相關的 KQL 作業
TimeGenerated 指出虛擬機器產生每個記錄的時機。
  • 識別最近使用中的機器。
  • 尋找針對每部機器產生的最後一個記錄,並檢查是否在過去幾分鐘內產生。
  • where TimeGenerated >ago(48h)
  • summarize max(TimeGenerated)
  • max_TimeGenerated < ago(5m)
如需詳細資訊,請參閱 where 運算子summarize 運算子ago()max() (彙總函式)
Computer 機器的唯一識別碼。
  • 依機器摘要結果。
  • 依不同的代理程式版本將機器分組。
  • summarize by Computer
  • summarize ComputersList=make_set(Computer)
如需詳細資訊,請參閱 summarize 運算子make_set() (彙總函式)
Category 代理程式類型:
  • Azure Monitor Agent
  • Direct Agent,代表 Log Analytics 代理程式。 適用於 Windows 的 Log Analytics 代理程式也稱為 MMA。 適用於 Linux 的 Log Analytics 代理程式也稱為 OMS。
識別機器上執行的代理程式。 若要簡化結果並協助進一步分析,例如篩選:
  • 將這個資料行重新命名為 AgentType (AgentType=Category)
  • 針對 Windows 機器將 Direct Agent 值變更為 MMA (AgentType= iif(AgentType == "Direct Agent" and OSType =="Windows", "MMA", AgentType))。
  • 針對 Linux 機器將 Direct Agent 值變更為 OMS (AgentType= iif(AgentType == "Direct Agent" and OSType =="Linux", "OMS", AgentType)。
如需詳細資訊,請參閱 iff()== (equals) 運算子
OSType 在虛擬機器上執行的作業系統類型。 識別 Log Analytics 代理程式的代理程式類型,針對 Windows 與 Linux 有所不同。 summarize by... OSType
如需詳細資訊,請參閱 summarize 運算子
Version 監視虛擬機器的代理程式版本號碼。 識別每部機器上的代理程式版本。 將這個資料行重新命名為 AgentVersion (AgentVersion=Version)。

3. 撰寫查詢

撰寫查詢,其中列出過去 48 小時為使用中,但是在過去五分鐘未將資料記錄到 Heartbeat 資料表的機器。

  1. 擷取過去 48 小時的所有記錄:

    點擊以在 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
    

    此查詢的結果集包含過去 48 小時傳送記錄資料的所有機器的記錄。 這些結果可能包含每部使用中機器的許多記錄。

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

    若要了解哪些機器最近未傳送記錄,您只需要每部機器傳送的最後一個記錄。

  2. 尋找每部機器所產生的最後一個記錄,並依電腦、代理程式類型和作業系統摘要:

    點擊以在 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
    

    您現在有一個過去 48 小時記錄資料的每部機器的記錄 - 每部機器傳送的最後一個記錄。

    在此 summarize 行中,您已將 Category 資料行重新命名為 AgentType,更能描述您在此分析過程中於資料行中查看的資訊。

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

  3. 若要查看過去五分鐘有哪些機器未傳送記錄,請篩選掉過去五分鐘產生的所有記錄:

    點擊以在 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
    

    此查詢的結果集包含過去 48 小時記錄資料的所有機器產生的最後一個記錄,但是不包含過去五分鐘產生的記錄。 換句話說,過去五分鐘記錄資料的任何機器都不會包含在結果集中。

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

    您現在有要尋找的資料:過去 48 小時記錄資料,但是在過去五分鐘未如預期般記錄資料的所有機器清單。 結果集包含您要進一步調查的電腦集合。

  4. 操作查詢結果,以更清楚地呈現資訊。

    例如,您可以依產生的時間 (從最舊到最新) 來組織記錄,以查看哪些電腦未記錄資料的時間最久。

    AgentType 資料行中的 Direct Agent 值會告訴您 Log Analytics 代理程式正在機器上執行。 由於適用於 Windows 的 Log Analytics 代理程式也稱為 OMS,而適用於 Linux 的代理程式也稱為 MMS,因此將 Windows 機器的 Direct Agent 值重新命名為 MMA,以及將 Linux 機器的該值重新命名為 OMS 可簡化結果,並有助於進一步分析,例如篩選。

    按一下以在 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
    

    提示

    使用 max_TimeGenerated,將停止報告的機器的最後一個活動訊號,與機器記錄或大概同時發生的其他環境事件相互關聯。 以這種方式建立記錄的關聯有助於找出您正在調查的問題的根本原因。

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

挑戰:依監視代理程式和代理程式版本將機器分組

了解您的機器上正在執行哪些代理程式和代理程式版本,可協助您分析問題的根本原因,並找出您需要更新為新代理程式或新代理程式版本的機器。

您是否可以想到能夠對上述開發的查詢執行的一些快速調校,以取得這項資訊?

請考慮下列事項:

  • 您需要從記錄中擷取哪些額外資訊?
  • 您可以使用哪一個 KQL 作業,依其執行的代理程式版本來分組機器?

解決方案:

  1. 從查詢複製前五行,並將 Version 資料行新增至查詢的 summarize 行,以擷取代理程式版本資訊:

    點擊以在 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. 為了清楚起見,請將 Version 資料行重新命名為 AgentVersion,新增另一個 summarize 行來尋找代理程式類型、代理程式版本和作業系統類型的唯一組合,並使用 KQL make_set() 彙總函式列出執行每個代理程式類型和代理程式版本組合的所有電腦:

    點擊以在 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
    

    您現在有要尋找的資料:代理程式類型和代理程式版本的唯一組合清單,以及執行每個代理程式特定版本的一組所有最近使用中機器。

    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.