本文是在 Azure 監視器中監視虛擬機器及其工作負載指引的一部分。 此文說明如何在將 Azure 監視代理程式部署至 Azure 和混合式虛擬機器後,在 Azure 監視器中設定資料收集。
本文提供從虛擬機收集最常見遙測類型的指引。 您選擇的確切設定取決於您在機器上執行的工作負載。 每個區段都包含範例的日誌搜尋警示,您可以搭配該資料使用。
- 如需分析從虛擬機收集的遙測的詳細資訊,請參閱使用 Azure 監視器來監視虛擬機:分析監視資料。
- 如需有關使用虛擬機器收集的遙測資料來在 Azure Monitor 中建立警示的詳情,請參閱使用 Azure Monitor 監視虛擬機器:警示。
附註
此案例描述如何實作 Azure 和混合式虛擬機器環境的完整監視。 若要開始監視您的第一部 Azure 虛擬機器,請參閱監視 Azure 虛擬機器。
資料收集規則
Azure 監視器代理程序的資料收集是由一或多個資料收集規則 (DCR) 所定義,這些規則儲存在 Azure 訂用帳戶中,並與虛擬機相關聯。
針對虛擬機,DCR 會定義事件和效能計數器等資料,以收集並指定應該傳送資料的 Log Analytics 工作區。 DCR 也可以使用轉換來過濾不需要的資料,並新增計算的資料行。 單一機器可以與多個 DCR 相關聯,而一個 DCR 可以與多個機器相關聯。 DCR 會被傳送到與 Azure 監視代理程式相關聯的任何機器,並由代理程式處理。
檢視資料收集規則
您可以從 Azure 入口網站中 [監視器] 功能表上的 [資料收集規則],檢視 Azure 訂用帳戶中的 DCR。 DCR 支援 Azure 監視器中的其他資料收集案例,因此所有 DCR 不一定都適用於虛擬機器。
建立資料收集規則
根據資料收集情境,有多種方法可以建立 DCR。 在某些情況下,Azure 入口網站會逐步引導您完成設定。 其他案例需要您直接編輯 DCR。 當您配置 VM Insights(虛擬機分析)時,系統會自動為您建立一個預先配置的資料收集規則(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 資料表。 不論作業系統類型為何,計數器名稱都會正規化為使用相同的一般名稱。
如果您指定要收集的程序和相依關係,則會填入下表:
- VMBoundPort:機器上開啟伺服器連接埠的流量
- VMComputer:機器的清查資料
- VMConnection:來自機器的輸入和輸出連線流量
- VMProcess:在電腦上執行的流程
根據預設,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 \| 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 Monitor Metrics,您可以使用它進行指標瀏覽和設定告警。
如需建立 DCR 以收集效能計數器的指引,請參閱使用 Azure 監視器代理程式從虛擬機收集事件和效能計數器。 您可以使用最常見的計數器快速建立 DCR。 如需依事件標識碼等準則進行更細微的篩選,您可以使用 XPath 查詢建立自定義篩選。
附註
您可以選擇在同一個 DCR 中結合效能表現和事件集合。
目的地 | 描述 |
---|---|
計量 | 主機計量會自動傳送至 Azure 監視器計量。 您可以使用 DCR 來收集用戶端計量,以便與計量瀏覽器一起進行分析,或搭配計量警示使用。 此資料會儲存 93 天。 |
日誌 | 儲存在 Azure 監視器記錄中的效能資料可以長期儲存。 您可以使用日誌查詢搭配 Log Analytics 或日誌搜尋警示,將資料與您的事件資料一起分析。 您也可以跨多部機器、區域和訂用帳戶使用複雜的邏輯來相互關聯資料。 效能資料會傳送至下列資料表: • VM 深入解析: InsightsMetrics • 其他效能數據: Perf |
記錄查詢範例
下列範例會使用 Perf
資料表搭配自定義效能資料。
查詢 | 描述 |
---|---|
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 |
每個處理程序標識碼在過去5分鐘內的 CPU 平均使用率。 |
收集文字記錄
有些應用程式會將事件寫入儲存在虛擬機器上的文字記錄檔中。 建立自定義資料表和 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 |
依主機 www.contoso.com 的 URL 計數 IIS 日誌條目。 |
W3CIISLog \| summarize sum(csBytes) by Computer |
檢閱每個 IIS 機器收到的位元組總數。 |
監視服務或精靈
若要監視 Windows 服務或 Linux 精靈的狀態,請在 Azure 自動化中啟用變更追蹤和清查解決方案。
Azure 監視器無法自行監視服務或精靈的狀態。 也許有些可供使用的方法,例如在 Windows 事件記錄檔中尋找事件,但此方法並不可靠。 您也可以從 VM 深入解析填入的 VMProcess 資料表尋找與機器上所執行服務建立關聯的程序。 此資料表每小時僅更新一次,如果您想要使用此資料,這通常不足以發出警示。
附註
變更追蹤和分析解決方案與 VM 見解中的變更分析功能不同。 這項功能處於公開預覽狀態,但尚未包含在此案例中。
如需在虛擬機器上啟用變更追蹤解決方案的不同選項,請參閱啟用變更追蹤和清查。 此解決方案包括大規模設定虛擬機器的方法。 您需要建立 Azure 自動化帳戶以支援解決方案。
當您啟用變更追蹤和清查時,Log Analytics 工作區中會建立兩個新資料表。 使用這些資料表進行日誌查詢和日誌搜尋警示規則。
表 | 描述 |
---|---|
設定變更 | 客體內設定資料的變更 |
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 洞察功能,您可以使用 VMConnection 和 VMBoundPort 來分析機器上的連線和連接埠。 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 監視器所收集。 建立在該記錄項目上觸發的記錄搜尋警示規則。