Azure Batch 帳號平台的指標提供有關池、節點、核心、工作與任務的資訊。 要監控訪客作業系統的效能,如 CPU、記憶體、磁碟和網路使用情況,請在池的運算節點上安裝 Azure 監視器 Agent(AMA)。
本文說明如何:
- 建立具有使用者指派受控識別和 AMA 的 Batch 集區。
- 為 Linux 效能計數器和 Syslog 建立資料收集規則(DCR)。
- 將 DCR 與批次池資源關聯起來。
- 請在 Log Analytics 和 Azure 監視器 Metrics 中驗證資料。
範例使用 Azure CLI 和 Linux 池。 同一架構支援 Windows 池,並搭配 Windows AMA 擴充功能及 Windows 資料來源。
Important
僅針對使用 使用者訂用帳戶 集區配置模式的 Batch 帳戶,才支援使用 AMA 監視 Batch 集區中的計算節點。 在批次服務池分配模式下,計算節點會建立在批次管理的訂閱中,客戶無法存取。
節點監控的運作方式
受監控的批次池會使用以下資源:
- 一個處於用戶訂閱池分配模式的批次帳戶。
- 一個由使用者指派管理身份的批次池。
- 建立池時安裝的 Azure 監視器 Agent 擴充功能。
- 一個指定要收集資料及目的地的 DCR。
- 一個 DCR 關聯,其目標為 Batch pool 的 Azure Resource Manager 資源。
- 用於記錄資料的 Log Analytics 工作區,以及可選擇使用 Azure 監視器 Metrics 來收集訪客計量。
將 DCR 與 Batch 集區資源 ID 建立關聯:
/subscriptions/<subscription-id>/resourceGroups/<resource-group>/
providers/Microsoft.Batch/batchAccounts/<batch-account>/pools/<pool-name>
不要只將 DCR 關聯至 Batch 為集區建立的虛擬機器擴展集。 Batch 會管理該擴展集的生命週期。 當池子縮小到零節點時,Batch 可以在後續調整時刪除縮放集並建立新的。
Log Analytics 紀錄會保留批次建立的運算資源的資源 ID。 客體計量可在目前 Batch 建立的虛擬機器擴展集上取得,Linux 位於azure.vm.linux.guestmetrics命名空間中,Windows 則位於虛擬機器客體 (Windows) 命名空間中。
先決條件
在開始之前,您需要:
- 一個 Azure Batch 帳戶,處於用戶訂閱池分配模式。
- 允許透過 批次管理平面建立集區。
- Log Analytics 工作區。
- 一個使用者指派的管理身份,與批次帳號同屬 Microsoft Entra 租戶。
- 申請建立DCR及DCR協會的許可。 詳情請參閱 Azure 監視器 中的建立與編輯資料收集規則。
- Azure CLI 已安裝並認證為訂閱。
在同一 Azure 區域內建立 DCR、Log Analytics 工作區和批次池。 如果集區使用對外輸出存取受限的虛擬網路,請檢閱 Azure 監視器 Agent 網路需求。
Tip
帶有擴充功能的池必須使用虛擬機設定。 你不能在現有的池子裡新增擴充功能。 要新增、移除或更新 AMA,請建立一個新的池。 更多資訊請參閱 「使用批次池的擴充功能」。
設定環境變數
設定資源變數。 替換占位符值。
subscriptionId="<subscription-id>"
resourceGroup="<resource-group>"
location="<location>"
batchAccount="<batch-account-name>"
poolName="<pool-name>"
workspaceName="<log-analytics-workspace-name>"
identityName="<managed-identity-name>"
dcrName="<data-collection-rule-name>"
az account set --subscription "$subscriptionId"
identityId=$(az identity show \
--resource-group "$resourceGroup" \
--name "$identityName" \
--query id \
--output tsv)
workspaceId=$(az monitor log-analytics workspace show \
--resource-group "$resourceGroup" \
--workspace-name "$workspaceName" \
--query id \
--output tsv)
batchAccountId="/subscriptions/$subscriptionId/resourceGroups/$resourceGroup/providers/Microsoft.Batch/batchAccounts/$batchAccount"
poolResourceId="$batchAccountId/pools/$poolName"
dcrId="/subscriptions/$subscriptionId/resourceGroups/$resourceGroup/providers/Microsoft.Insights/dataCollectionRules/$dcrName"
建立資料收集規則
以下資料收集規則(DCR)每 60 秒收集一次 Linux 的常見效能計數器。 它會將計數器傳送到 Log Analytics 中的 Perf 資料表,以及 Azure 監視器 Metrics。 它也會將警告及較高嚴重程度的 Syslog 紀錄傳送至 Log Analytics。
以 Azure 監視器計量作為客體效能計數器的目的地,目前為預覽版階段。 關於目前的限制,請參見「用 Azure 監視器 Agent 收集效能計數器」。
建立一個名為 dcr.json的檔案。 用你的數值替換 <location> 和 <workspace-resource-id>。
{
"location": "<location>",
"kind": "Linux",
"properties": {
"dataSources": {
"performanceCounters": [
{
"name": "batchNodePerformance",
"streams": [
"Microsoft-Perf",
"Microsoft-InsightsMetrics"
],
"samplingFrequencyInSeconds": 60,
"counterSpecifiers": [
"\\Processor(*)\\% Processor Time",
"\\Processor(*)\\% User Time",
"\\Processor(*)\\% Privileged Time",
"\\Processor(*)\\% Idle Time",
"\\Memory\\% Available Memory",
"\\Memory\\Used Memory MBytes",
"\\Memory\\% Used Memory",
"\\Logical Disk(*)\\% Free Space",
"\\Logical Disk(*)\\Free Megabytes",
"\\Logical Disk(*)\\Disk Reads/sec",
"\\Logical Disk(*)\\Disk Writes/sec",
"\\Logical Disk(*)\\Disk Read Bytes/sec",
"\\Logical Disk(*)\\Disk Write Bytes/sec",
"\\Network(*)\\Total Bytes Transmitted",
"\\Network(*)\\Total Bytes Received",
"\\Network(*)\\Total Bytes",
"\\System\\Uptime"
]
}
],
"syslog": [
{
"name": "batchNodeSyslog",
"streams": [
"Microsoft-Syslog"
],
"facilityNames": [
"auth",
"authpriv",
"cron",
"daemon",
"kern",
"syslog",
"user"
],
"logLevels": [
"Warning",
"Error",
"Critical",
"Alert",
"Emergency"
]
}
]
},
"destinations": {
"logAnalytics": [
{
"name": "batchMonitorWorkspace",
"workspaceResourceId": "<workspace-resource-id>"
}
],
"azureMonitorMetrics": {
"name": "azureMonitorMetrics-default"
}
},
"dataFlows": [
{
"streams": [
"Microsoft-Perf"
],
"destinations": [
"batchMonitorWorkspace"
]
},
{
"streams": [
"Microsoft-InsightsMetrics"
],
"destinations": [
"azureMonitorMetrics-default"
]
},
{
"streams": [
"Microsoft-Syslog"
],
"destinations": [
"batchMonitorWorkspace"
]
}
]
}
}
建立或更新DCR:
az rest \
--method put \
--url "https://management.azure.com${dcrId}?api-version=2022-06-01" \
--body @dcr.json
如需有關選擇計數器及控制資料擷取成本的資訊,請參閱 使用 Azure 監視器 Agent 收集效能計數器。
使用 Azure 監視器代理程式建立集區
建立一個名為 pool.json的檔案。 以下範例使用 Ubuntu 22.04 並安裝 Linux AMA 擴充套件。 將 <pool-name> 替換為 $poolName 的值,並將 $identityId 替換為 <managed-identity-resource-id> 的值。
{
"name": "<pool-name>",
"type": "Microsoft.Batch/batchAccounts/pools",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"<managed-identity-resource-id>": {}
}
},
"properties": {
"vmSize": "STANDARD_D2S_V3",
"taskSlotsPerNode": 1,
"taskSchedulingPolicy": {
"nodeFillType": "Pack"
},
"deploymentConfiguration": {
"virtualMachineConfiguration": {
"imageReference": {
"publisher": "canonical",
"offer": "0001-com-ubuntu-server-jammy",
"sku": "22_04-lts",
"version": "latest"
},
"nodeAgentSkuId": "batch.node.ubuntu 22.04",
"extensions": [
{
"name": "AzureMonitorAgent",
"publisher": "Microsoft.Azure.Monitor",
"type": "AzureMonitorLinuxAgent",
"typeHandlerVersion": "1.0",
"autoUpgradeMinorVersion": true,
"enableAutomaticUpgrade": true,
"settings": {
"authentication": {
"managedIdentity": {
"identifier-name": "mi_res_id",
"identifier-value": "<managed-identity-resource-id>"
}
}
}
}
]
}
},
"scaleSettings": {
"fixedScale": {
"targetDedicatedNodes": 1,
"targetLowPriorityNodes": 0,
"resizeTimeout": "PT15M"
}
}
}
}
使用批次管理 API 建立池:
az rest \
--method put \
--url "https://management.azure.com${poolResourceId}?api-version=2024-07-01" \
--body @pool.json
若為 Windows 集區,請使用:
- 延伸類型
AzureMonitorWindowsAgent。 - 一個 Windows 映像檔及相容的批次節點代理程式 SKU。
- 將
kind設定為Windows的 Windows DCR - Windows 效能計數器,必要時則用 Windows 事件收集取代 Syslog。
不要同時用一個 DCR 來管理 Windows 和 Linux 計數器。 有些計數器名稱可能會解析成相同的指標,導致重複收集。
將 DCR 與批次池關聯起來
在批次池資源上建立關聯:
az monitor data-collection rule association create \
--name "batch-pool-monitoring" \
--resource "$poolResourceId" \
--rule-id "$dcrId"
確認關聯:
az monitor data-collection rule association list \
--resource "$poolResourceId" \
--output table
當節點被移除或替換時,該關聯仍會留在池中。 不要用僅以目前由 Batch 建立的虛擬機器擴展集為目標的關聯來取代它。
驗證代理程式與日誌收集
節點進入閒置狀態後,最多可待五分鐘,讓第一批紀錄抵達。
確認代理程式的心跳訊號
請在 Log Analytics 工作空間執行以下查詢:
Heartbeat
| where TimeGenerated > ago(30m)
| summarize
Samples = count(),
FirstSeen = min(TimeGenerated),
LastSeen = max(TimeGenerated),
AgentVersion = any(Version)
by Computer, _ResourceId
操作人員通常每分鐘發送一次心跳。
驗證效能計數器
Perf
| where TimeGenerated > ago(30m)
| summarize
Samples = count(),
Average = avg(CounterValue),
P95 = percentile(CounterValue, 95),
Maximum = max(CounterValue)
by Computer, ObjectName, CounterName, InstanceName
| order by ObjectName asc, CounterName asc
Linux 邏輯磁碟計數器包含多個掛載點實例。 建立圖表或警示時,請依據 InstanceName 進行篩選,以免唯讀掛載和暫時掛載使結果失真。
驗證 Syslog
Syslog
| where TimeGenerated > ago(30m)
| project
TimeGenerated,
Computer,
Facility,
SeverityLevel,
ProcessName,
SyslogMessage,
_ResourceId
| order by TimeGenerated desc
查看賓客指標
如果 DCR 將Microsoft-InsightsMetrics串流傳送到 Azure 監視器 Metrics 目的地,訪客指標會出現在目前批次建立的虛擬機器尺度集上。
- 在 Azure 入口網站中,打開 Batch 為池子建立的虛擬機器縮放集。
- 選取 [計量]。
- 對於 計量命名空間,Linux 請選取
azure.vm.linux.guestmetrics,Windows 請選取 虛擬機器來賓(Windows)。 - 選擇指標並彙整。
你可以從最近的 Perf 紀錄中找到目前的運算資源 ID:
Perf
| where TimeGenerated > ago(30m)
| summarize arg_max(TimeGenerated, _ResourceId) by Computer
Note
當集區擴展至零個節點時,Batch 可以刪除其後端虛擬機擴展集。 當擴展集不存在時,客體計量資源將無法使用。 工作區中已收集的 Log Analytics 資料,仍會依照工作區的保留設定可供使用。
使用節點資料監控 Batch 平台指標
節點訪客資料補充自動收集的批次帳戶平台指標。 同時使用兩個來源:
- 使用 Batch 帳戶指標,例如
TotalNodeCount、RunningNodeCount、TaskStartEvent、IdleNodeCount、UnusableNodeCount和TaskCompleteEvent,來監控服務和排程狀態。 - 使用訪客效能計數器來調查計算節點的 CPU、記憶體、磁碟和網路狀況。
- 使用 Batch Service 日誌將池、工作及任務生命週期事件與節點行為相關聯。
關於度量定義與聚合指引,請參閱 Azure Batch 監控資料參考及 Monitor Azure Batch。
針對資料收集進行疑難排解
當資料未到達時,請使用以下檢查:
| 癥狀 | 檢查 |
|---|---|
| 沒有心跳 | 確認 AMA 擴充功能是否成功配置,使用者指派的身份已附加到池中並在擴充功能設定中參考,且所需的 Azure 監視器 端點可存取。 |
| AMA 報告該資源並未與 DCR 相關聯 | 確認 DCR 關聯鎖定的是批次池資源 ID。 僅在底層虛擬機器擴展集上建立關聯,並不能取代集區關聯。 |
已收到心跳訊號,但 Perf 為空 |
確認 Microsoft-Perf 同時存在於效能計數器資料來源以及以 Log Analytics 為目標的資料流中。 檢查計數器路徑和 DCR 作業系統類型。 |
| 訪客指標命名空間無法提供 | 確認Microsoft-InsightsMetrics的目標為azureMonitorMetrics-default,預留數分鐘供彙總處理,並確認該集區目前具有節點及底層擴展集。 |
| 重複記錄 | 檢查是否有多個 DCR 從池中收集相同資料。 重複採集會增加攝取成本。 |
關於 AMA 日誌位置與磁碟需求,請參閱 Azure 監視器 Agent 需求。 關於批次分配與節點失敗,請參見 Azure Batch 池與節點錯誤。
成本考量
Azure 監視器 收費可適用於 Log Analytics 的擷取、保留、警示及其他啟用功能。 控制成本:
- 只收集監測目標所需的計數器和日誌。
- 使用適合你工作量的取樣頻率。
- 在查詢與警示中,透過有意義的掛載點實例來過濾磁碟資料。
- 避免將重疊的 DCR 與同一池關聯。
- 檢視工作區保留設定。
如需詳細資訊,請參閱 Azure 監視器 成本與使用量 及 規劃 Azure Batch 的成本管理。
清理資源
當你不再需要監控池時,刪除池以及所有沒有與其他工作負載共享的監控資源。
若要保留池組態而不繼續執行運算節點,請將池大小調整為零:
az batch account login \
--resource-group "$resourceGroup" \
--name "$batchAccount"
az batch pool resize \
--pool-id "$poolName" \
--target-dedicated-nodes 0 \
--target-low-priority-nodes 0
縮放到零可以移除虛擬機的後備縮放集。 已儲存在 Log Analytics 中的資料,依照工作區保留設定仍可存取。