Monitorize os nós de computação do pool do Azure Batch com o Azure Monitor Agent

As métricas da plataforma da conta do Azure Batch fornecem informações sobre conjuntos, nós, núcleos, trabalhos e tarefas. Para monitorizar o desempenho do sistema operativo convidado, como CPU, memória, disco e utilização da rede, instale o Azure Monitor Agent (AMA) nos nós de computação do pool.

Este artigo mostra como:

  • Crie um pool de lote com uma identidade gerida atribuída pelo utilizador e AMA.
  • Crie uma regra de recolha de dados (DCR) para contadores de desempenho Linux e Syslog.
  • Associe o DCR ao recurso do pool de lotes.
  • Verifique dados no Log Analytics e no Azure Monitor Metrics.

Os exemplos usam CLI do Azure e um pool Linux. A mesma arquitetura suporta pools Windows com a extensão Windows AMA e fontes de dados do Windows.

Importante

A monitorização de nós de computação de pools do Batch com AMA é suportada apenas para contas do Batch que utilizam o modo de alocação do pool de subscrição do utilizador. No modo de atribuição de conjuntos do serviço Batch, os nós de computação são criados em subscrições geridas pelo Batch às quais os clientes não podem aceder.

Como funciona a monitorização de nós

Um lote monitorizado utiliza os seguintes recursos:

  • Uma conta Batch no modo de alocação de conjuntos de subscrição do utilizador.
  • Um pool Batch que tem uma identidade gerida atribuída pelo utilizador.
  • A extensão Azure Monitor Agent instalada quando o pool é criado.
  • Um DCR que especifica os dados a recolher e os destinos.
  • Uma associação DCR cujo alvo é o recurso Azure Resource Manager do Batch pool.
  • Um espaço de trabalho do Log Analytics para dados de registo e, opcionalmente, o Azure Monitor Metrics para métricas de convidado.

Associe o DCR ao ID do recurso do pool de lotes:

/subscriptions/<subscription-id>/resourceGroups/<resource-group>/
providers/Microsoft.Batch/batchAccounts/<batch-account>/pools/<pool-name>

Não associe o DCR apenas ao conjunto de escalas da máquina virtual que o Batch cria para o pool. O Batch gere o ciclo de vida desse conjunto de dimensionamento. Quando um pool é dimensionado para zero nós, o Batch pode eliminar o conjunto de dimensionamento e criar um novo num redimensionamento posterior.

Os registos do Log Analytics mantêm o ID do recurso de computação criado por lote. As métricas do convidado estão disponíveis no conjunto de dimensionamento de máquinas virtuais atual criado pelo Batch no espaço de nomes azure.vm.linux.guestmetrics para Linux ou no espaço de nomes Virtual Machine Guest (Windows) para Windows.

Pré-requisitos

Antes de começar, você precisa:

Crie o DCR, a área de trabalho do Log Analytics e o pool do Batch na mesma região do Azure. Se o pool usar uma rede virtual com acesso de saída restrito, reveja os requisitos de rede do Azure Monitor Agent.

Tip

Pools com extensões devem usar a Configuração de Máquina Virtual. Não podes adicionar extensões a uma piscina existente. Para adicionar, remover ou atualizar o AMA, crie um novo pool. Para mais informações, consulte Usar extensões com pools em lote.

Definir variáveis de ambiente

Define variáveis para os teus recursos. Substitua os valores substitutos.

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"

Criar uma regra de coleta de dados

A seguinte regra de recolha de dados (DCR) recolhe contadores de desempenho comuns do Linux a cada 60 segundos. Envia os contadores tanto para a tabela Perf no Log Analytics como para o Azure Monitor Metrics. Também envia registos Syslog de aviso e de maior gravidade para a Log Analytics.

O Azure Monitor Metrics como destino para contadores de desempenho de convidados está em pré-visualização. Para as limitações atuais, veja Recolher contadores de desempenho com o Azure Monitor Agent.

Crie um ficheiro chamado dcr.json. Substitui <location> e <workspace-resource-id> pelos teus valores.

{
  "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"
        ]
      }
    ]
  }
}

Crie ou atualize o DCR:

az rest \
  --method put \
  --url "https://management.azure.com${dcrId}?api-version=2022-06-01" \
  --body @dcr.json

Para informações sobre a seleção de contadores e o controlo do custo de ingestão, consulte Recolher contadores de desempenho com o Azure Monitor Agent.

Crie um pool com o Azure Monitor Agent

Crie um ficheiro chamado pool.json. O exemplo seguinte usa o Ubuntu 22.04 e instala a extensão Linux AMA. Substitua <managed-identity-resource-id> pelo valor de $identityId.

{
  "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"
      }
    }
  }
}

Crie o pool usando a API de gestão de lotes:

az rest \
  --method put \
  --url "https://management.azure.com${poolResourceId}?api-version=2024-07-01" \
  --body @pool.json

Para um pool do Windows, use:

  • Tipo AzureMonitorWindowsAgentde extensão .
  • Uma imagem do Windows e um SKU de agente de nó Batch compatível.
  • Um DCR do Windows com kind definido para Windows.
  • Contadores de desempenho do Windows e, se necessário, recolha de eventos do Windows em vez do Syslog.

Não utilize um único DCR para contadores do Windows e do Linux. Alguns nomes de contadores podem corresponder à mesma métrica e causar recolha duplicada.

Associe o DCR ao pool de lotes

Crie a associação no recurso do conjunto do Batch:

az monitor data-collection rule association create \
  --name "batch-pool-monitoring" \
  --resource "$poolResourceId" \
  --rule-id "$dcrId"

Confirme a associação:

az monitor data-collection rule association list \
  --resource "$poolResourceId" \
  --output table

A associação mantém-se no pool quando os nós são removidos ou substituídos. Não o substituas por uma associação que tenha como alvo apenas o conjunto de escalas atual da máquina virtual criada por lotes.

Verificar o agente e a recolha de registos

Espere até cinco minutos após o nó atingir o estado de repouso para que os primeiros registos cheguem.

Verifica o batimento cardíaco do agente

Execute a seguinte consulta no espaço de trabalho Log Analytics:

Heartbeat
| where TimeGenerated > ago(30m)
| summarize
    Samples = count(),
    FirstSeen = min(TimeGenerated),
    LastSeen = max(TimeGenerated),
    AgentVersion = any(Version)
    by Computer, _ResourceId

Um agente operacional normalmente envia um batimento cardíaco por minuto.

Verificar contadores de desempenho

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

Os contadores lógicos de disco Linux incluem múltiplas instâncias de pontos de montagem. Filtra por InstanceName ao criares gráficos ou alertas para que as montagens em modo só de leitura e as montagens temporárias não distorçam o resultado.

Verifique Syslog

Syslog
| where TimeGenerated > ago(30m)
| project
    TimeGenerated,
    Computer,
    Facility,
    SeverityLevel,
    ProcessName,
    SyslogMessage,
    _ResourceId
| order by TimeGenerated desc

Ver métricas de convidados

Se o DCR enviar o fluxo Microsoft-InsightsMetrics para o destino Azure Monitor Metrics, as métricas do convidado são apresentadas no conjunto de dimensionamento de máquinas virtuais atual criado pelo Batch.

  1. No portal Azure, abra o conjunto de escalas da máquina virtual que o Batch criou para o pool.
  2. Selecione Métricas.
  3. Para Espaço de Nomes Métrico, selecione azure.vm.linux.guestmetrics Linux ou Convidado para Máquina Virtual (Windows) para Windows.
  4. Selecione uma métrica e faça a agregação.

Pode localizar o ID atual do recurso computacional a partir de registos recentes Perf :

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

Note

Quando um pool é dimensionado para zero nós, o Batch pode eliminar o conjunto de dimensionamento de máquinas virtuais subjacente. O recurso de métrica convidada não está disponível enquanto o conjunto de escalas não existe. Os dados do Log Analytics já recolhidos no espaço de trabalho continuam disponíveis de acordo com as definições de retenção do espaço de trabalho.

Monitorize métricas da plataforma Batch com dados dos nós

Os dados de convidados de nós complementam as métricas da plataforma de contas Batch recolhidas automaticamente. Use ambas as fontes:

  • Use métricas de conta em lote como TotalNodeCount, RunningNodeCount, IdleNodeCount, UnusableNodeCount, TaskStartEvent, , e TaskCompleteEvent para monitorizar o estado do serviço e do agendamento.
  • Use contadores de desempenho convidados para investigar as condições da CPU, memória, disco e rede nos nós de computação.
  • Utilize os registos do serviço Batch para correlacionar eventos do ciclo de vida do conjunto, trabalho e tarefa com o comportamento dos nós.

Para definições de métricas e orientações de agregação, consulte Azure Batch monitoring data reference e Monitor Azure Batch.

Solucionar problemas de coleta de dados

Use as seguintes verificações quando os dados não chegarem:

Symptom Cheques
Sem sinal de vida Confirme que a extensão AMA foi provisionada com sucesso, que a identidade atribuída pelo utilizador está associada ao pool e referenciada nas definições da extensão, e que os endpoints necessários do Azure Monitor são acessíveis.
A AMA relata que o recurso não está associado a um DCR Confirme que a associação DCR tem como destino o ID de recurso do pool do Batch. Uma associação apenas no conjunto de escalas de máquinas virtuais de suporte não substitui a associação de pool.
O batimento cardíaco chega, mas Perf está vazio Confirme se Microsoft-Perf está presente tanto na origem de dados do contador de desempenho como num fluxo de dados que tem como destino o Log Analytics. Verifique os caminhos dos contadores e o tipo de sistema operativo do DCR.
O namespace da métrica convidada não está disponível Confirme que Microsoft-InsightsMetrics tem como alvo azureMonitorMetrics-default, aguarde alguns minutos pela agregação e confirme que o conjunto tem atualmente nós e um conjunto de dimensionamento subjacente.
Registos duplicados Verifique se há múltiplos DCRs que recolham os mesmos dados do pool. Uma coleção duplicada aumenta o custo de ingestão.

Para localizações de logs AMA e requisitos de disco, consulte requisitos do Azure Monitor Agent. Para alocação no Batch e falhas de nós, veja conjunto do Azure Batch e erros de nós.

Considerações de custos

Os encargos do Azure Monitor podem aplicar-se à ingestão, retenção, alertas e outras funcionalidades ativadas do Log Analytics. Para controlar o custo:

  • Recolhe apenas os contadores e registos necessários para os seus objetivos de monitorização.
  • Usa uma frequência de amostragem adequada à tua carga de trabalho.
  • Filtre os dados de disco por instâncias relevantes de pontos de montagem em consultas e alertas.
  • Evite associar DCRs sobrepostos ao mesmo pool.
  • Analise as definições de retenção da área de trabalho.

Para mais informações, consulte custos e utilização do Azure Monitor e Planear gerir os custos do Azure Batch.

Limpeza de recursos

Quando já não precisares do pool monitorizado, elimina o pool e quaisquer recursos de monitorização que não sejam partilhados com outras cargas de trabalho.

Para manter a configuração do pool sem continuar a correr nós de computação, redimensione o pool para zero:

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

Reduzir para zero pode remover o conjunto de dimensionamento de máquinas virtuais subjacente. Os dados já armazenados no Log Analytics continuam disponíveis de acordo com as definições de retenção do espaço de trabalho.