使用 Azure 監視器 Agent 監視 Azure Batch 集區計算節點

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 區域內建立 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 目的地,訪客指標會出現在目前批次建立的虛擬機器尺度集上。

  1. 在 Azure 入口網站中,打開 Batch 為池子建立的虛擬機器縮放集。
  2. 選取 [計量]。
  3. 對於 計量命名空間,Linux 請選取 azure.vm.linux.guestmetrics,Windows 請選取 虛擬機器來賓(Windows)
  4. 選擇指標並彙整。

你可以從最近的 Perf 紀錄中找到目前的運算資源 ID:

Perf
| where TimeGenerated > ago(30m)
| summarize arg_max(TimeGenerated, _ResourceId) by Computer

Note

當集區擴展至零個節點時,Batch 可以刪除其後端虛擬機擴展集。 當擴展集不存在時,客體計量資源將無法使用。 工作區中已收集的 Log Analytics 資料,仍會依照工作區的保留設定可供使用。

使用節點資料監控 Batch 平台指標

節點訪客資料補充自動收集的批次帳戶平台指標。 同時使用兩個來源:

  • 使用 Batch 帳戶指標,例如 TotalNodeCountRunningNodeCountTaskStartEventIdleNodeCountUnusableNodeCountTaskCompleteEvent,來監控服務和排程狀態。
  • 使用訪客效能計數器來調查計算節點的 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 中的資料,依照工作區保留設定仍可存取。