你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。

使用 Azure Monitor Agent 监视 Azure Batch 池中的计算节点

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区域内创建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 创建的虚拟机规模集上。

  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

注释

当池缩放至零个节点时,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中已存储的数据根据工作区保留设置依然可用。