你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure Batch 账户平台的指标提供关于池、节点、核心、作业和任务的信息。 为了监控访客操作系统的性能,如CPU、内存、磁盘和网络使用情况,可以在池计算节点上安装Azure Monitor代理(AMA)。
本文介绍以下操作:
- 创建一个带有用户分配管理身份和AMA的批处理池。
- 为Linux性能计数器和Syslog创建数据收集规则(DCR)。
- 将DCR与批处理池资源关联。
- 在Log Analytics和Azure Monitor Metrics中验证数据。
示例中使用了 Azure CLI 和 Linux 池。 同一架构也支持使用 Windows AMA 扩展和 Windows 数据源的 Windows 池。
Important
仅支持对使用 用户订阅 池分配模式的 Batch 帐户中的 Batch 池计算节点使用 AMA 进行监视。 在批处理服务池分配模式下,计算节点被创建在批量管理的订阅中,客户无法访问。
节点监控的工作原理
一个受监控的批处理池使用以下资源:
- 一个用户订阅池分配模式下的批处理账户。
- 一个拥有用户分配管理身份的批处理池。
- 创建池时安装了Azure Monitor代理扩展。
- 一个指定要收集数据和目的地的DCR。
- 一个DCR关联,其目标是批处理池的Azure 资源管理器资源。
- 一个用于日志数据的 Log Analytics 工作空间,以及可选的 Azure Monitor Metrics 用于访客指标。
将DCR与批处理池资源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 的 Virtual Machine Guest (Windows) 命名空间获取来宾指标。
先决条件
在开始之前,需要:
- 一个Azure Batch账户,处于用户订阅池分配模式。
- 使用Batch 管理平面创建池的权限。
- Log Analytics 工作区。
- 一个用户分配的托管身份,位于与批处理账户相同的 Microsoft Entra 租户中。
- 创建 DCR 及 DCR 关联的权限 详情请参见 Azure Monitor 中的创建和编辑数据收集规则。
- Azure CLI 已安装并认证订阅。
在同一Azure区域内创建DCR、Log Analytics工作区和批处理池。 如果池使用出站访问受限的虚拟网络,请查看 Azure Monitor 代理网络要求。
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 Monitor Metrics。 它还会向 Log Analytics 发送警告和更高严重级别的 Syslog 记录。
Azure Monitor Metrics 作为访客性能计数器的目的地目前处于预览阶段。 有关当前限制,请参见“用 Azure Monitor 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 Monitor Agent 收集性能计数器”。
使用 Azure Monitor Agent 创建池
创建一个名为 pool.json的文件。 以下示例使用 Ubuntu 22.04 并安装了 Linux AMA 扩展。 用 $poolName 的值替换 <pool-name>,并用 $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 Monitor Metrics 目标,则来宾指标会显示在当前由 Batch 创建的虚拟机规模集上。
- 在 Azure 门户中,打开 Batch 为该池创建的虚拟机规模集。
- 选择 指标。
- 对于指标命名空间,Linux 请选择
azure.vm.linux.guestmetrics,Windows 请选择虚拟机来宾(Windows)。 - 选择一个指标并进行聚合。
您可以通过最近的 Perf 记录找到当前的计算资源ID:
Perf
| where TimeGenerated > ago(30m)
| summarize arg_max(TimeGenerated, _ResourceId) by Computer
注释
当池缩放至零个节点时,Batch 可以删除其底层虚拟机规模集。 当刻度集不存在时,访客度量资源也不可用。 工作区中已收集的 Log Analytics 数据仍可按工作区保留设置使用。
通过节点数据监控批处理平台的指标
节点访客数据补充了自动收集的批量账户平台指标。 同时使用两个资源:
- 使用批处理账户指标,如
TotalNodeCount、RunningNodeCount、TaskStartEventIdleNodeCountUnusableNodeCount、 ,TaskCompleteEvent来监控服务和调度状态。 - 使用访客性能计数器来调查计算节点的CPU、内存、磁盘和网络状况。
- 使用批处理服务日志将池、作业和任务生命周期事件与节点行为关联起来。
有关度量定义和聚合指导,请参见 Azure Batch 监控数据参考和 Monitor Azure Batch。
对数据收集进行故障排除
当数据未到达时,请使用以下检查:
| 症状 | 检查 |
|---|---|
| 无心跳 | 确认AMA扩展已成功配置,用户分配的身份已连接到池中并在扩展设置中引用,且所需的Azure Monitor端点可访问。 |
| AMA报告说该资源并未与DCR关联 | 确认DCR关联针对的是批处理池资源ID。 仅在后端虚拟机规模集上的关联不能替代与池的关联。 |
心跳到来了,但 Perf 空无一物 |
确认 Microsoft-Perf 同时存在于性能计数器数据源和以 Log Analytics 为目标的数据流中。 检查计数器路径和DCR操作系统类型。 |
| 来宾指标命名空间不可用 | 确认 Microsoft-InsightsMetrics 的目标为 azureMonitorMetrics-default,等待几分钟以完成聚合,并确认池当前具有节点和底层规模集。 |
| 重复记录 | 检查是否有多个 DCR 从同一池中收集相同的数据。 重复收集会增加摄入成本。 |
关于AMA日志位置和磁盘需求,请参见Azure Monitor Agent demands。 关于批处理分配和节点失败,请参见 Azure Batch 池和节点错误。
成本注意事项
Azure Monitor 费用可能适用于 Log Analytics 的数据采集、数据保留、警报以及已启用的其他功能。 控制成本:
- 只收集监测目标所需的计数器和日志。
- 使用适合你工作量的采样频率。
- 在查询和警报中通过有意义的挂载点实例过滤磁盘数据。
- 避免将重叠的DCR与同一池关联。
- 查看工作区保留设置。
欲了解更多信息,请参见 Azure Monitor 成本与使用情况及 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中已存储的数据根据工作区保留设置依然可用。