使用 Azure 監視器監視虛擬機器:收集資料

本文是在 Azure 監視器中監視虛擬機器及其工作負載指引的一部分。 其說明如何將 Azure 監視器部署至 Azure 和混合式虛擬機器後,在 Azure 監視器中設定資料收集。

本文提供從虛擬機收集最常見遙測類型的指引。 您選擇的確切設定取決於您在機器上執行的工作負載。 包含在每個區段中的範例記錄搜尋警示,您可以搭配該資料使用。

注意

此案例描述如何實作 Azure 和混合式虛擬機器環境的完整監視。 若要開始監視您的第一部 Azure 虛擬機器,請參閱監視 Azure 虛擬機器

資料收集規則

Azure 監視器代理程序的資料收集是由一或多個資料收集規則 (DCR) 所定義,這些規則儲存在 Azure 訂用帳戶中,並與虛擬機相關聯。

針對虛擬機,DCR 會定義事件和效能計數器等資料,以收集並指定應該傳送資料的 Log Analytics 工作區。 DCR 也可以使用轉換來篩選掉不必要的資料,以及新增匯出資料行。 單一機器可以與多個 DCR 相關聯,而一個 DCR 可以與多個機器相關聯。 DCR 會傳遞給它們與 Azure 監視器代理程序處理所在位置相關聯的任何機器。

檢視資料收集規則

您可以從 Azure 入口網站中 [監視器] 功能表上的 [資料收集規則],檢視 Azure 訂用帳戶中的 DCR。 DCR 支援 Azure 監視器中的其他資料收集案例,因此所有 DCR 不一定都適用於虛擬機器。

Screenshot that shows DCRs in the Azure portal.

建立資料收集規則

根據資料收集方法,有多個案例可建立 DCR。 在某些情況下,Azure 入口網站會逐步引導您完成設定。 其他案例需要您直接編輯 DCR。 當您設定 VM 深入解析時,會自動為您建立預先設定的 DCR。 下列各節會識別要收集的常見資料,以及如何設定資料收集。

在某些情況下,您可能需要編輯現有的 DCR 以新增功能。 例如,您可以使用 Azure 入口網站來建立收集 Windows 或 Syslog 事件的 DCR。 然後,您想要將轉換新增至該 DCR,以篩選出您不想要收集之事件中的資料行。

隨著環境成熟且複雜度提升,您應該實作組織 DCR 以協助其管理的策略。 如需不同策略的指引,請參閱在 Azure 監視器中建立和管理資料收集規則的最佳做法

控制成本

因為您的 Azure 監視器成本取決於您收集的資料量,因此請確定您未收集超過您滿足監視需求所需的資料。 您的設定是預算與虛擬機作業所需的深入解析之間的平衡。

提示

如需降低 Azure 監視器成本的策略,請參閱成本最佳化和 Azure 監視器

典型的虛擬機每月會產生 1 GB 到 3 GB 的資料。 此資料大小取決於機器的設定、其上執行的工作負載,以及 DCR 的設定。 在設定整個虛擬機環境的資料收集之前,請先開始收集一些代表性機器,以更妥善地預測整個環境部署時的預期成本。 使用機器 Log Analytics工作區深入解析 記錄資料量中根據電腦的查詢,以判斷針對每部機器收集的可計費資料量,並據以調整。

評估收集的資料,並篩選出任何符合下列準則的準則,以降低成本。 您收集的每個資料來源可能有不同的方法來篩選掉垃圾資料。 如需每個常見資料來源的詳細資訊,請參閱下列各節。

  • 未用於警示。
  • 沒有已知的鑑識或診斷值。
  • 監管機構未要求。
  • 未用於任何儀表板或活頁簿。

您也可使用轉換來實作更細微的篩選,也將資料行中價值不高的資料篩選出來。 例如,您可能有一個 Windows 事件,對於警示而言十分有用,但其包含的資料行具有冗餘或過多的資料。 您可以建立允許收集事件、但會移除這些多餘資料的轉換。

在傳送至 Azure 監視器之前,盡可能篩選資料,以避免使用轉換篩選太多資料的潛在費用。 使用轉換利用複雜邏輯來篩選記錄,以及使用您不需要的資料來篩選資料行。

預設資料收集

Azure 監視器會自動執行下列資料收集,而不需要任何其他設定。

平台計量

Azure 虛擬機器的平台計量包括重要的計量,例如 CPU、網路和磁碟使用率。 這可以:

活動記錄檔

自動收集活動記錄。 這包括機器的最新活動,例如任何組態變更,以及停止和啟動的時間。 您可以在 Azure 入口網站中,檢視針對每部虛擬機器主機收集的平台計量和活動記錄。

您可以檢視個別電腦或訂用帳戶中所有資源的活動記錄檔建立診斷設定以傳送資料到代理程式 Azure 監視器同樣使用的 Log Analytics 工作區,以使用針對虛擬機器所收集的其他監視資料進行分析。 擷取或保留活動記錄資料不需要任何成本。

Azure Resource Graph 中的 VM 可用性資訊

有了 Azure Resource Graph,您可以使用記錄查詢中使用的相同 Kusto 查詢語言,以複雜的篩選、分組和依資源屬性排序大規模查詢您的 Azure 資源。 您可以使用 VM 健康情況註釋 至 Resource Graph,進行詳細的失敗歸因和停機時間分析。

如需收集哪些資料以及如何檢視資料的資訊,請參閱使用 Azure 監視器監視虛擬機器:分析監視資料

VM 深入解析

當您啟用 VM 深入解析時,會使用收集下列資訊的 MSVMI- 前置詞來建立 DCR。 您可以將這個相同的 DCR 與其他電腦搭配使用,而不是為每個 VM 建立新的 DCR。

  • 用戶端作業系統的常見效能計數器會傳送至 Log Analytics 工作區中的 InsightsMetrics 資料表。 不論作業系統類型為何,計數器名稱都會正規化為使用相同的一般名稱。 如需收集的效能計數器清單,請參閱如何從 VM 深入解析查詢記錄

  • 如果您指定要收集的行程和相依性,則會填入下表:

根據預設,VM 深入解析不會啟用流程和相依性的收集,以節省資料擷取成本。 對應功能需要此資料,也會將相依性代理程式部署至機器。 如果您想要使用此功能,請啟用此集合

收集 Windows 和 Syslog 事件

虛擬機中的操作系統和應用程式通常會寫入 Windows 事件記錄檔或 Syslog。 您可以在找到單一事件或等候特定時間範圍內一系列相符的事件時,立即建立警示。 您也可以收集事件以供日後分析,例如識別特定趨勢,或在發生問題之後執行疑難排解。

如需如何建立 DCR 以收集 Windows 和 Syslog 事件的指引,請參閱使用 Azure 監視器代理程式從虛擬機收集事件和效能計數器。 您可以使用最常見的 Windows 事件記錄和事件層級篩選 Syslog 設施,快速建立 DCR。

如需依事件標識碼等準則進行更細微的篩選,您可以使用 XPath 查詢建立自定義篩選。 您可以編輯 DCR 來進一步篩選收集的資料,以新增轉換

使用下列指引作為事件收集的建議起點。 修改 DCR 設定以篩選不必要的事件,並根據需求新增其他事件。

來源 策略
Windows 事件 針對系統應用程式記錄收集至少重大錯誤警告事件,以支援警示。 新增資訊事件,以分析趨勢和支援疑難排解。 詳細資訊事件很少有用,通常不應該收集。
Syslog 事件 針對每個設施至少收集 LOG_WARNING 事件以支援警示。 新增資訊事件,以分析趨勢和支援疑難排解。 LOG_DEBUG 事件很少有用,通常不應該收集。

樣本記錄查詢:Windows 事件

查詢 描述
Event 所有的 Windows 事件
Event | where EventLevelName == "Error" 所有 Windows 事件與錯誤的嚴重性
Event | summarize count() by Source 依據來源的 Windows 事件計數
Event | where EventLevelName == "Error" | summarize count() by Source 依據來源的 Windows 錯誤事件計數

樣本記錄查詢:Syslog 事件

查詢 描述
Syslog 所有 Syslog
Syslog | where SeverityLevel == "error" 所有具有錯誤嚴重性的 Syslog 記錄
Syslog | summarize AggregatedValue = count() by Computer 依電腦分類的 Syslog 記錄數
Syslog | summarize AggregatedValue = count() by Facility 按設施分類的 Syslog 記錄數

收集效能計數器

用戶端的效能資料可以傳送至 Azure 監視器計量Azure 監視器記錄,而且您通常會同事傳送至這兩個目的地。 如果您已啟用 VM 深入解析,則會在記錄中收集一組常見的效能計數器,以支援其效能圖表。 您無法修改這組計數器,但您可以建立其他 DCR 來收集更多計數器,並將其傳送至不同的目的地。

您想要建立 DCR 以收集客體效能的原因有很多:

  • 您未使用 VM 深入解析,因此尚未收集用戶端效能資料。
  • 收集 VM 深入解析未收集的其他效能計數器。
  • 從客戶端上執行的其他工作負載收集效能計數器。
  • 將效能資料傳送至 Azure 監視器計量,您可以在其中搭配計量瀏覽器和計量警示使用。

如需建立 DCR 以收集效能計數器的指引,請參閱使用 Azure 監視器代理程式從虛擬機收集事件和效能計數器。 您可以使用最常見的計數器快速建立 DCR。 如需依事件標識碼等準則進行更細微的篩選,您可以使用 XPath 查詢建立自定義篩選。

注意

您可以選擇在同一個 DCR 中結合效能和事件集合。

Destination 描述
計量 主機計量會自動傳送至 Azure 監視器計量。 您可以使用 DCR 來收集用戶端計量,以便與計量瀏覽器一起進行分析,或搭配計量警示使用。 此資料會儲存 93 天。
記錄 儲存在 Azure 監視器記錄中的效能資料可以長期儲存。 您可以使用記錄查詢搭配 Log Analytics記錄搜尋警示,來分析資料與事件資料。 您也可以跨多部機器、區域和訂用帳戶使用複雜的邏輯來相互關聯資料。

效能資料會傳送至下列資料表:
- VM 深入解析:InsightsMetrics
- 其他效能資料:Perf

記錄查詢範例

下列範例會使用 Perf 資料表搭配自定義效能資料。 如需 VM 深入解析所收集效能資料的資訊,請參閱如何從 VM 深入解析查詢記錄

查詢 描述
Perf 所有效能資料
Perf | where Computer == "MyComputer" 來自特定電腦的所有效能資料
Perf | where CounterName == "Current Disk Queue Length" 來自特定計數器的所有效能資料
Perf | where ObjectName == "Processor" and CounterName == "% Processor Time" and InstanceName == "_Total" | summarize AVGCPU = avg(CounterValue) by Computer 所有電腦的平均 CPU 使用率
Perf | where CounterName == "% Processor Time" | summarize AggregatedValue = max(CounterValue) by Computer 所有電腦的最大 CPU 使用率
Perf | where ObjectName == "LogicalDisk" and CounterName == "Current Disk Queue Length" and Computer == "MyComputerName" | summarize AggregatedValue = avg(CounterValue) by InstanceName 指定電腦之所有執行個體的平均目前磁碟佇列長度
Perf | where CounterName == "Disk Transfers/sec" | summarize AggregatedValue = percentile(CounterValue, 95) by Computer 所有電腦之第 95 個百分位數的 Disk Transfers/Sec
Perf | where CounterName == "% Processor Time" and InstanceName == "_Total" | summarize AggregatedValue = avg(CounterValue) by bin(TimeGenerated, 1h), Computer 所有電腦每小時平均 CPU 使用率
Perf | where Computer == "MyComputer" and CounterName startswith_cs "%" and InstanceName == "_Total" | summarize AggregatedValue = percentile(CounterValue, 70) by bin(TimeGenerated, 1h), CounterName 特定電腦每小時每個 % 百分比計數器的 70 個百分位數
Perf | where CounterName == "% Processor Time" and InstanceName == "_Total" and Computer == "MyComputer" | summarize ["min(CounterValue)"] = min(CounterValue), ["avg(CounterValue)"] = avg(CounterValue), ["percentile75(CounterValue)"] = percentile(CounterValue, 75), ["max(CounterValue)"] = max(CounterValue) by bin(TimeGenerated, 1h), Computer 特定電腦每小時平均、最小、最大和 75 個百分位數的 CPU 使用量
Perf | where ObjectName == "MSSQL$INST2:Databases" and InstanceName == "master" 資料庫效能物件中的所有效能資料適用於來自具名 SQL Server 執行個體 INST2 的 master 資料庫。
Perf | where TimeGenerated >ago(5m) | where ObjectName == "Process" and InstanceName != "_Total" and InstanceName != "Idle" | where CounterName == "% Processor Time" | summarize cpuVal=avg(CounterValue) by Computer,InstanceName | join (Perf| where TimeGenerated >ago(5m)| where ObjectName == "Process" and CounterName == "ID Process" | summarize arg_max(TimeGenerated,*) by ProcID=CounterValue ) on Computer,InstanceName | sort by TimeGenerated desc | summarize AvgCPU = avg(cpuVal) by InstanceName,ProcID 每個流程標識碼的 CPU 平均超過過去5分鐘。

收集文字記錄

有些應用程式會寫入已於儲存在虛擬機器上文字記錄檔寫入的事件。 建立自定義資料表和 DCR 以收集此資料。 您可以定義文字記錄檔的位置及其詳細設定,以及自訂資料表的結構描述。 在工作區中擷取和保留此資料均須付費。

記錄查詢範例

此處使用的資料行名稱僅供參考。 記錄的資料行名稱很可能會有所不同。

查詢 描述
MyApp_CL | summarize count() by code 依程式碼計算事件數目。
MyApp_CL | where status == "Error" | summarize AggregatedValue = count() by Computer, bin(TimeGenerated, 15m) 針對任何錯誤事件建立警示規則。

收集 IIS 記錄

在 Windows 電腦上執行的 IIS 會將記錄寫入文字檔。 使用 利用 Azure 監視器代理程式收集 IIS 記錄,設定 IIS 記錄收集。 在工作區中擷取和保留此資料均須付費。

來自 IIS 記錄的記錄會儲存在 Log Analytics 工作區的 W3CIISLog 資料表中。 在工作區中擷取和保留此資料均須付費。

記錄查詢範例

查詢 描述
W3CIISLog | where csHost=="www.contoso.com" | summarize count() by csUriStem 依據主機 URL www.contoso.com 的 IIS 記錄項目計數。
W3CIISLog | summarize sum(csBytes) by Computer 檢閱每個 IIS 機器收到的位元組總數。

監視服務或精靈

若要監視 Windows 服務或 Linux 精靈的狀態,請在 Azure 自動化中啟用變更追蹤和清查解決方案。

Azure 監視器無法自行監視服務或精靈的狀態。 也許有些可供使用的方法,例如在 Windows 事件記錄檔中尋找事件,但此方法並不可靠。 您也可以從 VM 深入解析填入的 VMProcess 資料表尋找與機器上所執行服務建立關聯的程序。 此資料表每小時僅更新一次,如果您想要使用此資料,這通常不足以發出警示。

注意

變更追蹤和分析解決方案與 VM 見解中的變更分析功能不同。 這項功能處於公開預覽狀態,但尚未包含在此案例中。

如需在虛擬機器上啟用變更追蹤解決方案的不同選項,請參閱啟用變更追蹤和清查。 此解決方案包括大規模設定虛擬機器的方法。 您需要建立 Azure 自動化帳戶以支援解決方案。

當您啟用變更追蹤和清查時,Log Analytics 工作區中會建立兩個新資料表。 使用這些資料表進行記錄查詢和記錄搜尋警示規則。

資料表 Description
ConfigurationChange 客體內設定資料的變更
ConfigurationData 客體內設定資料的最後報告狀態

記錄查詢範例

  • 列出最近啟動的所有服務和精靈。

    ConfigurationChange
    | where ConfigChangeType == "Daemons" or ConfigChangeType == "WindowsServices"
    | where SvcState == "Running"
    | sort by Computer, SvcName
    
  • 當特定服務停止時發出警示。 在記錄搜尋警示規則中使用此查詢。

    ConfigurationData
    | where SvcName == "W3SVC" 
    | where SvcState == "Stopped"
    | where ConfigDataType == "WindowsServices"
    | where SvcStartupType == "Auto"
    | summarize AggregatedValue = count() by Computer, SvcName, SvcDisplayName, SvcState, bin(TimeGenerated, 15m)
    
  • 當一組服務停止時發出警示。 在記錄搜尋警示規則中使用此查詢。

    let services = dynamic(["omskd","cshost","schedule","wuauserv","heathservice","efs","wsusservice","SrmSvc","CertSvc","wmsvc","vpxd","winmgmt","netman","smsexec","w3svc","sms_site_vss_writer","ccmexe","spooler","eventsystem","netlogon","kdc","ntds","lsmserv","gpsvc","dns","dfsr","dfs","dhcp","DNSCache","dmserver","messenger","w32time","plugplay","rpcss","lanmanserver","lmhosts","eventlog","lanmanworkstation","wnirm","mpssvc","dhcpserver","VSS","ClusSvc","MSExchangeTransport","MSExchangeIS"]);
    ConfigurationData
    | where ConfigDataType == "WindowsServices"
    | where SvcStartupType == "Auto"
    | where SvcName in (services)
    | where SvcState == "Stopped"
    | project TimeGenerated, Computer, SvcName, SvcDisplayName, SvcState
    | summarize AggregatedValue = count() by Computer, SvcName, SvcDisplayName, SvcState, bin(TimeGenerated, 15m)
    

監視連接埠

連接埠監視會確認機器正在接聽特定連接埠。 此處說明連接埠監視的兩個潛在策略。

相依性代理程式資料表

如果您使用已啟用流程和相依性集合的 VM 深入解析 ,您可以使用 VMConnectionVMBoundPort 來分析機器上的連線和連接埠。 VMBoundPort 資料表每分鐘更新一次,包括電腦上執行的每個程序以及正在接聽的連接埠。 您可以建立類似於遺漏活動訊號警示的記錄搜尋警示,藉此尋找已停止的程序,或在機器未接聽特定連接埠時發出警示。

  • 檢閱 VM 上開啟的連接埠計數,可評定哪些 VM 具有設定和安全性弱點。

    VMBoundPort
    | where Ip != "127.0.0.1"
    | summarize by Computer, Machine, Port, Protocol
    | summarize OpenPorts=count() by Computer, Machine
    | order by OpenPorts desc
    
  • 列出 VM 上的繫結連接埠,可評估哪些 VM 具有設定和安全性弱點。

    VMBoundPort
    | distinct Computer, Port, ProcessName
    
  • 依連接埠分析網路活動,以判斷應用程式或服務的設定方式。

    VMBoundPort
    | where Ip != "127.0.0.1"
    | summarize BytesSent=sum(BytesSent), BytesReceived=sum(BytesReceived), LinksEstablished=sum(LinksEstablished), LinksTerminated=sum(LinksTerminated), arg_max(TimeGenerated, LinksLive) by Machine, Computer, ProcessName, Ip, Port, IsWildcardBind
    | project-away TimeGenerated
    | order by Machine, Computer, Port, Ip, ProcessName
    
  • 檢閱 VM 的位元組傳送及接收趨勢。

    VMConnection
    | summarize sum(BytesSent), sum(BytesReceived) by bin(TimeGenerated,1hr), Computer
    | order by Computer desc
    | render timechart
    
  • 使用一段時間的連線失敗,確定失敗率為穩定或變更狀態。

    VMConnection
    | where Computer == <replace this with a computer name, e.g. 'acme-demo'>
    | extend bythehour = datetime_part("hour", TimeGenerated)
    | project bythehour, LinksFailed
    | summarize failCount = count() by bythehour
    | sort by bythehour asc
    | render timechart
    
  • 連結狀態趨勢以分析機器的行為和連線狀態。

    VMConnection
    | where Computer == <replace this with a computer name, e.g. 'acme-demo'>
    | summarize  dcount(LinksEstablished), dcount(LinksLive), dcount(LinksFailed), dcount(LinksTerminated) by bin(TimeGenerated, 1h)
    | render timechart
    

連線管理員

網路監看員連線監視器功能可用於測試虛擬機器上連接埠的連線。 測試會確認機器正在接聽連接埠,且可在網路上存取。

連線管理員需要起始測試的用戶端機器上的網路監看員延伸模組。 連線管理員無須安裝在要測試的機器上。 如需更多資料,請參閱教學課程:使用 Azure 入口網站監視網路通訊

連線管理員需要額外付費。 如需詳細資訊,請參閱網路監看員定價

在本機電腦上執行程序

監視某些工作負載需要本機程序。 例如,PowerShell 指令碼會在本機電腦上執行,以連線至應用程式並收集或處理資料。 您可以使用屬於 Azure 自動化混合式 Runbook 背景工作角色來執行本機 PowerShell 指令碼。 混合式 Runbook 背景工作角色不會直接收費,但執行每個 Runbook 都會產生相應費用。

Runbook 可以存取本機電腦上的任何資源,以收集必要資料。 其無法將資料直接傳送至 Azure 監視器或建立警示。 若要建立警示,請讓 Runbook 將項目寫入自定義記錄。 然後將該記錄設定為 Azure 監視器所收集。 建立在該記錄項目上觸發的記錄搜尋警示規則。

下一步