Monitorare i nodi di calcolo del pool di Azure Batch con Monitoraggio di Azure Agent

Le metriche della piattaforma account Azure Batch forniscono informazioni su pool, nodi, core, job e task. Per monitorare le prestazioni del sistema operativo ospite, come CPU, memoria, disco e utilizzo di rete, installa Monitoraggio di Azure Agent (AMA) sui nodi di calcolo del pool.

Questo articolo illustra come:

  • Crea un pool batch con un'identità gestita assegnata dall'utente e un AMA.
  • Crea una regola di raccolta dati (DCR) per i contatori di prestazioni Linux e Syslog.
  • Associa il DCR alla risorsa del pool batch.
  • Verifica i dati in Log Analytics e Monitoraggio di Azure Metrics.

Gli esempi utilizzano interfaccia della riga di comando di Azure e un pool Linux. La stessa architettura supporta pool Windows con l'estensione Windows AMA e le fonti dati di Windows.

Importante

Il monitoraggio dei nodi di calcolo del pool batch con AMA è supportato solo per account batch che utilizzano la modalità di allocazione pool di abbonamento utente . Nella modalità di allocazione del pool del servizio Batch, i nodi di calcolo vengono creati in sottoscrizioni gestite da Batch alle quali i clienti non possono accedere.

Come funziona il monitoraggio dei nodi

Un pool batch monitorato utilizza le seguenti risorse:

  • Un account batch in modalità di allocazione del pool di abbonamenti utente.
  • Un pool batch che ha un'identità gestita assegnata dall'utente.
  • L'estensione Monitoraggio di Azure Agent installata quando il pool viene creato.
  • Un DCR che specifica i dati da raccogliere e le destinazioni.
  • Un'associazione DCR il cui target è la risorsa Azure Resource Manager del Batch pool.
  • Uno spazio di lavoro Log Analytics per i dati di log e, opzionalmente, Monitoraggio di Azure Metrics per le metriche ospite.

Associa il DCR all'ID risorsa del pool batch:

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

Non associare il DCR solo al set di scala della macchina virtuale che Batch crea per il pool. Il batch gestisce il ciclo di vita di quel set in scala. Quando un pool scala fino a nodi zero, Batch può eliminare il set di scala e crearne uno nuovo durante una successiva ridimensionazione.

I record di Log Analytics conservano l'ID della risorsa di calcolo creata da Batch. Le metriche ospiti sono disponibili sull'attuale scala di macchine virtuali create da batch, nel azure.vm.linux.guestmetrics namespace per Linux o sul namespace Virtual Machine Guest (Windows) per Windows.

Prerequisiti

Prima di iniziare, è necessario disporre di quanto segue:

Crea lo spazio di lavoro DCR, Log Analytics e il pool batch nella stessa regione Azure. Se il pool utilizza una rete virtuale con accesso in uscita limitato, si verificano i requisiti di rete di Monitoraggio di Azure Agent.

Tip

I pool con estensioni devono utilizzare la Configurazione della Macchina Virtuale. Non puoi aggiungere proroghe a una piscina esistente. Per aggiungere, rimuovere o aggiornare l'AMA, crea un nuovo pool. Per altre informazioni, vedere Usare le estensioni con i pool di Batch.

Impostare le variabili di ambiente

Imposta variabili per le tue risorse. Sostituire i valori dei segnaposto.

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"

Creare una regola di raccolta dati

La seguente regola di raccolta dati (DCR) raccoglie i contatori di prestazioni comuni di Linux ogni 60 secondi. Invia i contatori sia alla Perf tabella di Log Analytics che di Monitoraggio di Azure Metrics. Invia inoltre record Syslog di avvertimento e di gravità superiore a Log Analytics.

Monitoraggio di Azure Metrics come destinazione per i contatori di performance degli ospiti è in anteprima. Per le limitazioni attuali, vedi Collezionare contatori di prestazioni con Monitoraggio di Azure Agent.

Crea un file chiamatodcr.json. Sostituire <location> e <workspace-resource-id> con i propri valori.

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

Crea o aggiorna il DCR:

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

Per informazioni sulla selezione dei contatori e il controllo dei costi di ingestione, vedi Collezionare contatori di performance con Monitoraggio di Azure Agent.

Crea un pool con Monitoraggio di Azure Agent

Crea un file chiamatopool.json. Il seguente esempio utilizza Ubuntu 22.04 e installa l'estensione Linux AMA. Sostituisci <managed-identity-resource-id> con il valore di $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"
      }
    }
  }
}

Crea il pool usando l'API di gestione batch:

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

Per un pool Windows, usa:

  • Tipo di estensione AzureMonitorWindowsAgent.
  • Un'immagine di Windows e uno SKU dell'agente di nodo Batch compatibile.
  • Un DCR di Windows con kind impostato su Windows.
  • Contatori di prestazioni Windows e, se necessario, raccolta eventi Windows invece di Syslog.

Non usare un DCR unico sia per i contatori Windows che per quelli Linux. Alcuni nomi di contatore possono corrispondere alla stessa metrica e causare una raccolta duplicata.

Associare il DCR al pool Batch

Crea l'associazione nella risorsa del pool Batch:

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

Conferma l'associazione:

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

L'associazione rimane nel pool quando i nodi vengono rimossi o sostituiti. Non sostituirlo con un'associazione che prenda di mira solo il set di scala della macchina virtuale creata da Batch attuale.

Verifica agente e raccolta log

Attendi fino a cinque minuti dopo che il nodo raggiunge lo stato di inattività per l'arrivo dei primi registri.

Verifica il battito cardiaco dell'agente

Esegui la seguente query nello spazio di lavoro di Log Analytics:

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

Un agente operativo normalmente invia un battito cardiaco ogni minuto.

Verifica i contatori di prestazioni

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

I contatori logici del disco Linux includono più istanze di mount-point. Filtra in base a InstanceName quando crei grafici o avvisi, in modo che i punti di montaggio temporanei e quelli in sola lettura non alterino il risultato.

Verificare Syslog

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

Visualizza le metriche degli ospiti

Se il DCR invia il flusso Microsoft-InsightsMetrics alla destinazione Monitoraggio di Azure Metrics, le metriche guest vengono visualizzate nel set di scalabilità di macchine virtuali attualmente creato da Batch.

  1. Nel portale Azure, apri il set di scalabilità della macchina virtuale creato da Batch per il pool.
  2. Selezionare Metriche.
  3. Per spazio dei nomi delle metriche, seleziona azure.vm.linux.guestmetrics per Linux o Virtual Machine Guest (Windows) per Windows.
  4. Seleziona una metrica e l'aggregazione.

Puoi trovare l'ID attuale della risorsa di calcolo dai record recenti Perf :

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

Annotazioni

Quando un pool viene ridotto a zero nodi, Batch può eliminare il set di scalabilità di macchine virtuali sottostante. La risorsa della metrica ospite non è disponibile mentre il set di scala non esiste. I dati di Log Analytics già raccolti nello spazio di lavoro restano disponibili secondo le impostazioni di conservazione dello spazio di lavoro.

Monitorare le metriche della piattaforma Batch con i dati dei nodi

I dati degli ospiti dei nodi completano le metriche raccolte automaticamente dalla piattaforma degli account Batch. Usa entrambe le fonti:

  • Utilizzare metriche di account batch come TotalNodeCount, RunningNodeCount, IdleNodeCount, UnusableNodeCount, TaskStartEvent, , e TaskCompleteEvent per monitorare lo stato del servizio e della programmazione.
  • Usa i contatori di performance degli ospiti per indagare le condizioni di CPU, memoria, disco e rete sui nodi di calcolo.
  • Usa i log di servizio batch per correlare eventi del ciclo di vita di pool, job e task con il comportamento dei nodi.

Per definizioni di metriche e guida sull'aggregazione, vedi Azure Batch monitoring data reference e Monitor Azure Batch.

Risolvere i problemi relativi alla raccolta dati

Utilizzare i seguenti controlli quando i dati non arrivano:

Sintomo Controlli
Nessun segnale di attività Conferma che l'estensione AMA sia stata provisionata correttamente, che l'identità assegnata dall'utente sia collegata al pool e referenziata nelle impostazioni dell'estensione, e che gli endpoint Monitoraggio di Azure richiesti siano raggiungibili.
AMA riporta che la risorsa non è associata a un DCR Conferma che l'associazione DCR ha come destinazione l'ID della risorsa del Batch pool. Un'associazione presente solo nel set di scalabilità di macchine virtuali sottostante non sostituisce l'associazione del pool.
Heartbeat viene ricevuto ma Perf è vuoto Conferma che Microsoft-Perf sia presente sia nell'origine dati dei contatori delle prestazioni sia in un flusso di dati che ha come destinazione Log Analytics. Controlla i percorsi dei contatori e il tipo di sistema operativo del DCR.
Il namespace delle metriche guest non è disponibile Conferma che Microsoft-InsightsMetrics abbia come destinazione azureMonitorMetrics-default, attendi alcuni minuti per l'aggregazione e conferma che il pool disponga attualmente di nodi e di un set di scalabilità sottostante.
Record duplicati Verifica se sono presenti più DCR che raccolgono gli stessi dati dallo stesso pool. La raccolta dei duplicati aumenta i costi di ingestione.

Per le posizioni dei log AMA e i requisiti del disco, vedi Monitoraggio di Azure Agent requirements. Per l'allocazione batch e i guasti dei nodi, vedi Azure Batch pool e errori di nodo.

Considerazioni sui costi

Le spese di Monitoraggio di Azure possono applicarsi all'ingestione, alla retention, agli avvisi e ad altre funzionalità abilitate di Log Analytics. Per controllare i costi:

  • Raccogli solo i contatori e i log necessari per i tuoi obiettivi di monitoraggio.
  • Usa una frequenza di campionamento adatta al tuo carico di lavoro.
  • Filtra i dati del disco per istanze significative di punto di montaggio nelle query e negli avvisi.
  • Evita di associare DCR sovrapposti allo stesso pool.
  • Esaminare le impostazioni di conservazione dell'area di lavoro.

Per maggiori informazioni, consulta Monitoraggio di Azure costi e utilizzo e Pianifica la gestione dei costi per Azure Batch.

Pulire le risorse

Quando non avrai più bisogno del pool monitorato, elimina il pool e tutte le risorse di monitoraggio che non sono condivise con altri carichi di lavoro.

Per mantenere la configurazione del pool senza continuare a eseguire nodi di calcolo, ridimensionare il pool a 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

Scalare a zero può rimuovere il set di scala della macchina virtuale di supporto. I dati già memorizzati in Log Analytics rimangono disponibili secondo le impostazioni di conservazione dello spazio di lavoro.