使用 Azure 監視器監視虛擬機器:警示

本文是在 Azure 監視器中監視虛擬機器及其工作負載指引的一部分。 Azure 監視器中的警示 會主動通知您在監視資料中有趣的資料和模式。 虛擬機器沒有預先設定的警示規則,但是您可以根據從 Azure 監視器代理程式所收集的資料建立自己的警示規則。 本文提供虛擬機器特有的警示概念和其他 Azure 監視器客戶所使用的常見警示規則。

此案例描述如何實作 Azure 和混合式虛擬機器環境的完整監視:

重要

大部分警示規則的成本取決於規則類型、包含多少維度,以及其執行頻率。 建立任何警示規則之前,請參閱 Azure 監視器定價中的警示規則一節。

資料集合

警示規則會檢查已在 Azure 監視器中收集的資料。 您必須確定要先針對特定案例收集資料,才能建立警示規則。 如需設定各種案例資料收集的指引,請參閱使用 Azure 監視器監視虛擬機器:收集資料,包括本文中的所有警示規則。

Azure 監視器提供一組建議的警示規則,可讓您針對任何 Azure 虛擬機器快速啟用。 這些規則是基本監視的絕佳起點。 但是,單靠這些規則不會針對大多數企業實作提供足夠的警示,原因如下:

  • 建議的警示僅適用於 Azure 虛擬機器,而非混合式機器。
  • 建議的警示只包含主機計量,而不包含客體計量或記錄。 這些計量有助於監視機器本身的健康情況。 但是,這些計量讓您只能對機器上執行的工作負載和應用程式進行基礎查看。
  • 建議的警示會與建立過多警示規則的個別機器相關聯。 並非每部機器皆仰賴這個方法,請參閱針對多部機器使用最少數量的警示規則來調整警示規則的策略。

警示類型

Azure 監視器中最常見的警示規則類型為計量警示記錄搜尋警示。 您針對特定案例所建立的警示規則類型取決於您要發出警示的資料所在位置。

您可能會有特定警示案例的資料在計量和記錄中均可使用。 如果是如此,您必須決定要使用的規則類型。 您也可以彈性地收集特定資料,並讓警示規則類型的決策推動資料收集方法的決策。

計量警示 \(部分機器翻譯\)

計量警示的常見用途:

  • 當特定計量超過閾值時發出警示。 例如,當電腦的 CPU 執行率高時。

計量警示的資料來源:

  • 自動收集的 Azure 虛擬機器主機計量
  • Azure 監視器代理程式從客體作業系統收集的計量

記錄搜尋警示

記錄搜尋警示的常見用途:

  • 從 Windows 事件記錄檔或 Syslog 找到特定事件或事件模式時發出警示。 這些警示規則通常會測量從查詢傳回的資料表資料列。
  • 根據多部機器上的數值資料計算發出警示。 這些警示規則通常會測量查詢結果中數值資料行的計算。

記錄搜尋警示的資料來源:

  • Log Analytics 工作區中收集到的所有資料

調整警示規則

因為您可能有許多虛擬機器需要相同的監視,因此不需要為每個虛擬機器建立個別的警示規則。 您也需要根據規則類型,確保有不同的策略可以限制您需要管理的警示規則數目。 每個策略都取決於了解警示規則的目標資源。

計量警示規則

虛擬機器支援多個資源計量警示規則,如監視多個資源中所述。 此功能可讓您建立單一計量警示規則,以套用至相同區域內資源群組或訂用帳戶中的所有虛擬機器。

建議的警示開始,並使用您的訂用帳戶或資源群組做為目標資源,為每個警示建立對應的規則。 如果您有多個區域中的機器,則必須為每個區域建立重複的規則。

當您識別更多計量警示規則的需求時,請使用訂用帳戶或資源群組做為目標資源來遵循相同的策略:

  • 將您需要管理的警示規則數目降至最低。
  • 確定其會自動套用至任何新的機器。

記錄搜尋警示規則

如果您將記錄搜尋警示規則的目標資源設定為特定機器,則查詢會受限於與該機器相關聯的資料,這可為您對其提供個別的警示。 此安排需要每部機器的個別警示規則。

如果您將記錄搜尋警示規則的目標資源設定為 Log Analytics 工作區,則可以存取該工作區中的所有資料。 基於這個理由,您可以使用單一規則來警示工作組中所有機器的資料。 此安排可讓您選擇為所有機器建立單一警示。 然後,您可以使用維度,為每部機器建立個別的警示。

例如,您可能需要在任何機器在 Windows 事件記錄檔中建立錯誤事件時發出警示。 您必須先建立資料收集規則,如使用 Azure 監視器代理程式從虛擬機器收集事件和效能計數器中所述,將這些事件傳送至 Log Analytics 工作區中的 Event 資料表。 然後,您會建立警示規則,以使用工作區做為目標資源和下圖所顯示的條件來查詢此資料表。

查詢會傳回任何機器上任何錯誤訊息的記錄。 使用 [依維度分割] 選項,並指定 _ResourceId,指示規則在結果中傳回多部機器時,為每部機器建立警示。

Screenshot that shows a new log search alert rule with split by dimensions.

維度

視您想要包含在警示中的資訊而定,您可能需要使用不同的維度進行分割。 在此情況下,請使用專案擴充運算子,確定查詢中投影必要的維度。 將 [資源識別碼資料行] 欄位設定為 [不要分割],並在清單中包含所有有意義的維度。 請確定已選取 [包含所有未來的值],以便包含從查詢傳回的任何值。

Screenshot that shows a new log search alert rule with split by multiple dimensions.

動態閾值

使用記錄搜尋警示規則的另一個優點,是能夠在查詢中包含複雜邏輯,以判斷臨界值。 您可以硬式編碼閾值、將其套用至所有資源,或根據某些欄位或計算值動態計算。 閾值只會根據特定條件套用至資源。 例如,您可以根據可用的記憶體建立警示,但僅適用於具有特定記憶體總計數量的機器。

常見警示規則

下一節列出 Azure 監視器中虛擬機器的常見警示規則。 計量警示和記錄搜尋警示的詳細資料會針對每個警示提供。 如需要使用的警示類型指引,請參閱警示類型。 如果您不熟悉在 Azure 監視器中建立警示規則的程序,請參閱建立新警示規則的指示

注意

此處提供的記錄搜尋警示詳細資料是使用透過 VM Insights 收集的資料,該資料會為用戶端作業系統提供一組常見的效能計數器。 此名稱與作業系統類型無關。

電腦無法使用

虛擬機最常見的監視需求之一,是在虛擬機停止執行時建立警示。 最好的方法是使用目前處於公開預覽狀態的 VM 可用性計量,在 Azure 監視器中建立計量警示規則。 如需此計量的逐步解說,請參閱建立 Azure 虛擬機器的可用性警示規則

調整警示規則中所述,使用訂用帳戶或資源群組做為目標資源來建立可用性警示規則。 此規則適用於多個虛擬機器,包括您在警示規則之後建立的新機器。

代理程式活動訊號

代理程式活動訊號與機器無法使用的警示稍有不同,因為其依賴 Azure 監視器代理程式傳送活動訊號。 代理程式活動訊號可以在機器執行但代理程式沒有回應時發出警示。

計量警示規則

每個 Log Analytics 工作區都包含稱為活動訊號的計量。 連線到該工作區的每個虛擬機器每分鐘都會傳送活動訊號計量值。 因為電腦是計量上的維度,所以當任何電腦無法傳送活動訊號時,您可以引發警示。 將 [彙總類型] 設定為 [計數],並將 [閾值] 設定為符合 [評估細微性]

記錄搜尋警示規則

記錄搜尋警示會使用活動訊號資料表,每部電腦每分鐘都應該有活動訊號記錄。

搭配下列查詢使用規則:

Heartbeat
| summarize TimeGenerated=max(TimeGenerated) by Computer, _ResourceId
| extend Duration = datetime_diff('minute',now(),TimeGenerated)
| summarize MinutesSinceLastHeartbeat = min(Duration) by Computer, bin(TimeGenerated,5m), _ResourceId

CPU 警示

本節說明 CPU 警示。

計量警示規則

Target 計量
Host CPU 百分比 (包含在建議的警示中)
Windows 來賓 \Processor Information(_Total)% Processor Time
Linux 來賓 cpu/usage_active

記錄搜尋警示規則

CPU 使用率

InsightsMetrics
| where Origin == "vm.azm.ms"
| where Namespace == "Processor" and Name == "UtilizationPercentage"
| summarize CPUPercentageAverage = avg(Val) by bin(TimeGenerated, 15m), Computer, _ResourceId

記憶體警示

本節描述記憶體警示。

計量警示規則

Target 計量
Host 可用的記憶體位元組 (預覽) (包含在建議的警示中)
Windows 來賓 \Memory% Committed Bytes in Use
\Memory\Available Bytes
Linux 來賓 mem/available
mem/available_percent

記錄搜尋警示規則

可用記憶體 (MB)

InsightsMetrics
| where Origin == "vm.azm.ms"
| where Namespace == "Memory" and Name == "AvailableMB"
| summarize AvailableMemoryInMBAverage = avg(Val) by bin(TimeGenerated, 15m), Computer, _ResourceId

可用記憶體 (百分比)

InsightsMetrics
| where Origin == "vm.azm.ms"
| where Namespace == "Memory" and Name == "AvailableMB"
| extend TotalMemory = toreal(todynamic(Tags)["vm.azm.ms/memorySizeMB"]) | extend AvailableMemoryPercentage = (toreal(Val) / TotalMemory) * 100.0
| summarize AvailableMemoryInPercentageAverage = avg(AvailableMemoryPercentage) by bin(TimeGenerated, 15m), Computer, _ResourceId  

磁碟警示

本節描述磁碟警示。

計量警示規則

Target 計量
Windows 來賓 \Logical Disk(_Total)% Free Space
\Logical Disk(_Total)\Free Megabytes
Linux 來賓 disk/free
disk/free_percent

記錄搜尋警示規則

使用的邏輯磁碟 - 每部電腦上的所有磁碟

InsightsMetrics
| where Origin == "vm.azm.ms"
| where Namespace == "LogicalDisk" and Name == "FreeSpacePercentage"
| summarize LogicalDiskSpacePercentageFreeAverage = avg(Val) by bin(TimeGenerated, 15m), Computer, _ResourceId 

使用的邏輯磁碟 - 個別磁碟

InsightsMetrics
| where Origin == "vm.azm.ms"
| where Namespace == "LogicalDisk" and Name == "FreeSpacePercentage"
| extend Disk=tostring(todynamic(Tags)["vm.azm.ms/mountId"])
| summarize LogicalDiskSpacePercentageFreeAverage = avg(Val) by bin(TimeGenerated, 15m), Computer, _ResourceId, Disk 

邏輯磁碟 IOPS

InsightsMetrics
| where Origin == "vm.azm.ms" 
| where Namespace == "LogicalDisk" and Name == "TransfersPerSecond"
| extend Disk=tostring(todynamic(Tags)["vm.azm.ms/mountId"])
| summarize DiskIOPSAverage = avg(Val) by bin(TimeGenerated, 15m), Computer, _ResourceId, Disk 

邏輯磁碟資料速率

InsightsMetrics
| where Origin == "vm.azm.ms" 
| where Namespace == "LogicalDisk" and Name == "BytesPerSecond"
| extend Disk=tostring(todynamic(Tags)["vm.azm.ms/mountId"])
| summarize DiskBytesPerSecondAverage = avg(Val) by bin(TimeGenerated, 15m), Computer, _ResourceId, Disk 

網路警示

計量警示規則

Target 計量
Host 網路總計、網路輸出總計 (包含在建議的警示中)
Windows 來賓 \Network Interface\Bytes Sent/sec
\Logical Disk(_Total)\Free Megabytes
Linux 來賓 disk/free
disk/free_percent

記錄搜尋警示規則

接收的網路介面位元組 - 所有介面

InsightsMetrics
| where Origin == "vm.azm.ms"
| where Namespace == "Network" and Name == "ReadBytesPerSecond"
| summarize BytesReceivedAverage = avg(Val) by bin(TimeGenerated, 15m), Computer, _ResourceId  

接收的網路介面位元組 - 個別介面

InsightsMetrics
| where Origin == "vm.azm.ms"
| where Namespace == "Network" and Name == "ReadBytesPerSecond"
| extend NetworkInterface=tostring(todynamic(Tags)["vm.azm.ms/networkDeviceId"])
| summarize BytesReceievedAverage = avg(Val) by bin(TimeGenerated, 15m), Computer, _ResourceId, NetworkInterface 

傳送的網路介面位元組 - 所有介面

InsightsMetrics
| where Origin == "vm.azm.ms"
| where Namespace == "Network" and Name == "WriteBytesPerSecond"
| summarize BytesSentAverage = avg(Val) by bin(TimeGenerated, 15m), Computer, _ResourceId 

傳送的網路介面位元組 - 個別介面

InsightsMetrics
| where Origin == "vm.azm.ms"
| where Namespace == "Network" and Name == "WriteBytesPerSecond"
| extend NetworkInterface=tostring(todynamic(Tags)["vm.azm.ms/networkDeviceId"])
| summarize BytesSentAverage = avg(Val) by bin(TimeGenerated, 15m), Computer, _ResourceId, NetworkInterface 

Windows 和 Linux 事件

下列範例會在建立特定 Windows 事件時建立警示。 此範例會使用計量測量警示規則,為每部電腦建立個別警示。

  • 針對特定 Windows 事件建立警示規則。 此範例會顯示應用程式記錄檔中的事件。 指定閾值為 0,且連續違規大於 0。

    Event 
    | where EventLog == "Application"
    | where EventID == 123 
    | summarize NumberOfEvents = count() by Computer, bin(TimeGenerated, 15m)
    
  • 針對具有特定嚴重性的 Syslog 事件建立警示規則。 下列範例顯示錯誤授權事件。 指定閾值為 0,且連續違規大於 0。

    Syslog
    | where Facility == "auth"
    | where SeverityLevel == "err"
    | summarize NumberOfEvents = count() by Computer, bin(TimeGenerated, 15m)
    

自訂效能計數器

  • 針對計數器最大值建立警示。

    Perf 
    | where CounterName == "My Counter" 
    | summarize AggregatedValue = max(CounterValue) by Computer
    
  • 針對計數器平均值建立警示。

    Perf 
    | where CounterName == "My Counter" 
    | summarize AggregatedValue = avg(CounterValue) by Computer
    

下一步

分析針對虛擬機器所收集的監視資料