練習 - 列出最近停止傳送記錄的使用中虛擬機器
在這裡,您將會撰寫 KQL 查詢,從 Heartbeat
資料表擷取和轉換資料,以取得環境中機器狀態的深入解析。
1. 設定目標
您的第一個記錄分析目標是確保您取得網路中所有使用中虛擬機器的相關資料。 您想要識別停止傳送資料的機器,以確保您擁有所有使用中虛擬機器的完整可見度。
若要判斷哪些機器已停止傳送資料,您需要下列相關資訊:
- 最近記錄過資料但過去幾分鐘未如預期記錄資料的所有機器。
- 若要進行更深入的分析,了解每部機器上執行的虛擬機器代理程式會很有用。
2. 評估記錄
Azure 監視器會使用 Azure 監視器代理程式來收集虛擬機器內所執行活動和作業系統程序的相關資料。
注意
您環境中的某些較舊機器仍會使用舊版 Log Analytics Windows 和 Linux 代理程式,Azure 監視器即將淘汰。
Azure 監視器代理程式和 Log Analytics 代理程式會每分鐘將虛擬機器健康情況資料傳送至 Heartbeat
資料表一次。
讓我們在 Heartbeat
資料表上執行簡單的 take 10
查詢,以查看其每個資料行所保存的資料類型:
Heartbeat
| take 10
TimeGenerated
、Computer
、Category
和 OSType
資料行都有與我們的分析相關的資料。
現在讓我們評估如何使用這項資料,以及哪些 KQL 作業可協助擷取和轉換資料:
資料行 | 描述 | 分析目標 | 相關的 KQL 作業 |
---|---|---|---|
TimeGenerated |
指出虛擬機器產生每個記錄的時機。 |
|
|
Computer |
機器的唯一識別碼。 |
|
|
Category |
代理程式類型:
|
識別機器上執行的代理程式。 | 若要簡化結果並協助進一步分析,例如篩選:
|
OSType |
在虛擬機器上執行的作業系統類型。 | 識別 Log Analytics 代理程式的代理程式類型,針對 Windows 與 Linux 有所不同。 | summarize by... OSType 如需詳細資訊,請參閱 summarize 運算子。 |
Version |
監視虛擬機器的代理程式版本號碼。 | 識別每部機器上的代理程式版本。 | 將這個資料行重新命名為 AgentVersion (AgentVersion=Version )。 |
3. 撰寫查詢
撰寫查詢,其中列出過去 48 小時為使用中,但是在過去五分鐘未將資料記錄到 Heartbeat
資料表的機器。
擷取過去 48 小時的所有記錄:
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 小時傳送記錄資料的所有機器的記錄。 這些結果可能包含每部使用中機器的許多記錄。
若要了解哪些機器最近未傳送記錄,您只需要每部機器傳送的最後一個記錄。
尋找每部機器所產生的最後一個記錄,並依電腦、代理程式類型和作業系統摘要:
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
,更能描述您在此分析過程中於資料行中查看的資訊。若要查看過去五分鐘有哪些機器未傳送記錄,請篩選掉過去五分鐘產生的所有記錄:
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 小時記錄資料的所有機器產生的最後一個記錄,但是不包含過去五分鐘產生的記錄。 換句話說,過去五分鐘記錄資料的任何機器都不會包含在結果集中。
您現在有要尋找的資料:過去 48 小時記錄資料,但是在過去五分鐘未如預期般記錄資料的所有機器清單。 結果集包含您要進一步調查的電腦集合。
操作查詢結果,以更清楚地呈現資訊。
例如,您可以依產生的時間 (從最舊到最新) 來組織記錄,以查看哪些電腦未記錄資料的時間最久。
AgentType 資料行中的
Direct Agent
值會告訴您 Log Analytics 代理程式正在機器上執行。 由於適用於 Windows 的 Log Analytics 代理程式也稱為 OMS,而適用於 Linux 的代理程式也稱為 MMS,因此將 Windows 機器的Direct Agent
值重新命名為MMA
,以及將 Linux 機器的該值重新命名為OMS
可簡化結果,並有助於進一步分析,例如篩選。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
,將停止報告的機器的最後一個活動訊號,與機器記錄或大概同時發生的其他環境事件相互關聯。 以這種方式建立記錄的關聯有助於找出您正在調查的問題的根本原因。
挑戰:依監視代理程式和代理程式版本將機器分組
了解您的機器上正在執行哪些代理程式和代理程式版本,可協助您分析問題的根本原因,並找出您需要更新為新代理程式或新代理程式版本的機器。
您是否可以想到能夠對上述開發的查詢執行的一些快速調校,以取得這項資訊?
請考慮下列事項:
- 您需要從記錄中擷取哪些額外資訊?
- 您可以使用哪一個 KQL 作業,依其執行的代理程式版本來分組機器?
解決方案:
從查詢複製前五行,並將
Version
資料行新增至查詢的summarize
行,以擷取代理程式版本資訊: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
為了清楚起見,請將
Version
資料行重新命名為AgentVersion
,新增另一個summarize
行來尋找代理程式類型、代理程式版本和作業系統類型的唯一組合,並使用 KQLmake_set()
彙總函式列出執行每個代理程式類型和代理程式版本組合的所有電腦: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
您現在有要尋找的資料:代理程式類型和代理程式版本的唯一組合清單,以及執行每個代理程式特定版本的一組所有最近使用中機器。