Bewaak rekenknooppunten in een Azure Batch-pool met Azure Monitor Agent

Platformmetrische gegevens van het Azure Batch-account bieden informatie over pools, knooppunten, kernen, jobs en taken. Om de prestaties van gastbesturingssystemen, zoals CPU-, geheugen-, schijf- en netwerkgebruik, te monitoren, installeer je Azure Monitor Agent (AMA) op de compute-nodes van de pool.

In dit artikel wordt uitgelegd hoe u het volgende kunt doen:

  • Maak een Batchpool aan met een door de gebruiker toegewezen beheerde identiteit en AMA.
  • Maak een dataverzamelingsregel (DCR) aan voor Linux-prestatietellers en Syslog.
  • Koppel de DCR aan de Batch pool-resource.
  • Verifieer gegevens in Log Analytics en Azure Monitor Metrics.

De voorbeelden gebruiken Azure CLI en een Linux-pool. Dezelfde architectuur ondersteunt Windows-pools met de Windows AMA-extensie en Windows-databronnen.

Important

Het monitoren van Batchpool-rekenknooppunten met AMA wordt alleen ondersteund voor Batchaccounts die gebruikmaken van gebruikersabonnementspool-allocatiemodus . In de Batch service pool allocatiemodus worden compute-nodes aangemaakt in Batch-beheerde abonnementen waar klanten geen toegang toe hebben.

Hoe nodemonitoring werkt

Een gemonitorde batchpool gebruikt de volgende bronnen:

  • Een batchaccount in gebruikersabonnementspool-allocatiemodus.
  • Een batchpool met een door de gebruiker toegewezen beheerde identiteit.
  • De Azure Monitor Agent-extensie wordt geïnstalleerd wanneer de pool wordt aangemaakt.
  • Een DCR die de te verzamelen gegevens en de bestemmingen specificeert.
  • Een DCR-associatie waarvan het doel de Batch pool Azure Resource Manager resource is.
  • Een Log Analytics-werkruimte voor logboekgegevens en, optioneel, Azure Monitor Metrics voor gastmetingen.

Koppel de DCR aan de Batchpool resource ID:

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

Koppel de DCR niet alleen aan de virtual machine scale set die Batch voor de pool aanmaakt. Batch beheert de levenscyclus van die schaalset. Wanneer een pool schaalt naar nul nodes, kan Batch de scale set verwijderen en een nieuwe aanmaken tijdens een latere resize.

Log Analytics-records behouden de resource-ID van de batch-gegenereerde computeresource. Gastmetrische gegevens zijn beschikbaar voor de huidige door Batch gemaakte schaalset voor virtuele machines in de naamruimte azure.vm.linux.guestmetrics voor Linux of de naamruimte Virtual Machine Guest (Windows) voor Windows.

Prerequisites

Voordat u begint, hebt u het volgende nodig:

Maak de DCR, Log Analytics-werkruimte en Batchpool aan in dezelfde Azure-regio. Als de pool een virtueel netwerk gebruikt met beperkte uitgaande toegang, bekijk dan de netwerkvereisten van Azure Monitor Agent.

Tip

Pools met extensies moeten Virtual Machine Configuration gebruiken. Je kunt geen uitbreidingen toevoegen aan een bestaande pool. Om AMA toe te voegen, te verwijderen of bij te werken, maak je een nieuwe pool aan. Voor meer informatie, zie Gebruik extensies met batchpools.

Omgevingsvariabelen instellen

Stel variabelen in voor je middelen. Vervang de waarden van de tijdelijke aanduidingen.

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"

Een regel voor gegevensverzameling maken

De volgende dataverzamelingsregel (DCR) verzamelt elke 60 seconden veelvoorkomende Linux-prestatietellers. Het stuurt de tellers naar zowel de Perf tabel in Log Analytics als Azure Monitor Metrics. Het stuurt ook waarschuwings- en zwaardere Syslog-records naar Log Analytics.

Azure Monitor Metrics als bestemming voor prestatiemeteritems van gasten is beschikbaar als preview. Voor huidige beperkingen, zie Collect performance counters with Azure Monitor Agent.

Maak een bestand aan genaamd dcr.json. Vervang <location> en <workspace-resource-id> door uw waarden.

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

Maak de DCR aan of werk het bij:

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

Voor informatie over het selecteren van tellers en het beheersen van de invoerkosten, zie Collect performance counters with Azure Monitor Agent.

Een groep maken met Azure Monitor Agent

Maak een bestand aan genaamd pool.json. Het volgende voorbeeld gebruikt Ubuntu 22.04 en installeert de Linux AMA-extensie. Vervang <managed-identity-resource-id> door de waarde van $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"
      }
    }
  }
}

Maak de pool aan met behulp van de Batch Management API:

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

Voor een Windows pool gebruik je:

  • Extensietype AzureMonitorWindowsAgent.
  • Een Windows-image en een compatibele Batch node agent SKU.
  • Een Windows DCR met kind ingesteld op Windows.
  • Windows prestatietellers en, indien nodig, Windows event collection in plaats van Syslog.

Gebruik niet één DCR voor zowel Windows- als Linux-counters. Sommige tellernamen kunnen naar dezelfde metriek verwijzen en tot dubbele verzameling leiden.

Koppel de DCR aan de batchpool

Maak de associatie aan op de Batchpool-resource:

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

Bevestig de koppeling:

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

De associatie blijft gekoppeld aan de pool wanneer nodes worden verwijderd of vervangen. Vervang dit niet door een associatie die alleen is gericht op de huidige door Batch gemaakte schaalset voor virtuele machines.

Controleer de agent en logverzameling

Wacht tot vijf minuten nadat de node de idle-status heeft bereikt voordat de eerste records binnenkomen.

Controleer de hartslag van de agent

Voer de volgende query uit in de Log Analytics-werkruimte:

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

Een operationeel agent stuurt normaal gesproken elke minuut één hartslag.

Controleer prestatietellers

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 logische schijftellers bevatten meerdere mount-point instanties. Filter op basis van InstanceName wanneer je grafieken of waarschuwingen maakt, zodat alleen-lezen-koppelingen en tijdelijke koppelingen het resultaat niet vertekenen.

Verifieer Syslog

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

Bekijk gaststatistieken

Als de DCR de Microsoft-InsightsMetrics-stroom naar de Azure Monitor Metrics-bestemming stuurt, worden gastgegevens weergegeven op de huidige, door Batch gemaakte schaalset voor virtuele machines.

  1. Open in het Azure-portaal de virtual machine scale-set die Batch voor de pool heeft aangemaakt.
  2. Selecteer Metrische gegevens.
  3. Voor Metric Namespace, selecteer azure.vm.linux.guestmetrics Linux of Virtual Machine Guest (Windows) voor Windows.
  4. Selecteer een metriek en aggregateer.

Je kunt de huidige computeresource-ID vinden in recente Perf records:

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

Note

Wanneer een pool naar nul knooppunten schaalt, kan Batch de onderliggende virtuele-machineschaalset verwijderen. De bron voor gastmetingen is niet beschikbaar zolang de schaalset niet bestaat. Log Analytics-gegevens die al in de werkruimte zijn verzameld, blijven beschikbaar volgens de instellingen voor werkruimteretentie.

Bewaak metrische gegevens van het Batch-platform met gegevens van knooppunten

Node-gastgegevens vullen de automatisch verzamelde Batch-accountplatformstatistieken aan. Gebruik beide bronnen:

  • Gebruik batch-accountstatistieken zoals TotalNodeCount, RunningNodeCount, , IdleNodeCount, UnusableNodeCount, TaskStartEvent, en TaskCompleteEvent om de status van service en planning te monitoren.
  • Gebruik gastprestatie-tellers om de condities van CPU, geheugen, schijf en netwerk op de rekenknopen te onderzoeken.
  • Gebruik batch-servicelogs om pool-, job- en taaklevenscyclusgebeurtenissen te correleren met het gedrag van de knooppunten.

Voor metriekdefinities en aggregatierichtlijnen, zie Azure Batch monitoring data reference en Monitor Azure Batch.

Problemen met het verzamelen van gegevens oplossen

Gebruik de volgende controles wanneer gegevens niet binnenkomen:

Symptoom Controles
Geen hartslag Bevestig dat de AMA-extensie succesvol is geprovisioneerd, dat de door de gebruiker toegewezen identiteit aan de pool is gekoppeld en in de extensie-instellingen wordt vermeld, en dat de benodigde Azure Monitor-endpoints bereikbaar zijn.
AMA meldt dat de bron niet verbonden is aan een DCR Bevestig dat de DCR-associatie zich richt op de Batchpool resource ID. Een associatie die alleen bestaat op de onderliggende Virtual Machine Scale Set, is geen vervanging voor de koppeling met de pool.
Heartbeat komt binnen maar Perf is leeg Controleer of Microsoft-Perf aanwezig is in zowel de gegevensbron voor prestatiemeteritems als in een gegevensstroom die is gericht op Log Analytics. Controleer de paden van de tellers en het type besturingssysteem van DCR.
Gastmetrieknaamruimte is niet beschikbaar Bevestig dat Microsoft-InsightsMetrics is gericht op azureMonitorMetrics-default, wacht enkele minuten tot de aggregatie is voltooid en bevestig dat de pool momenteel knooppunten en een onderliggende schaalset heeft.
Dubbele gegevens Controleer of er meerdere DCR's zijn die dezelfde data uit de pool verzamelen. Dubbele verzameling verhoogt de kosten voor gegevensinname.

Voor AMA-loglocaties en schijfvereisten, zie Azure Monitor Agent requirements. Zie Azure Batch-pool- en knooppuntfouten voor Batch-toewijzing en knooppuntfouten.

Kostenoverwegingen

Azure Monitor-kosten kunnen worden toegepast op Log Analytics-opname, retentie, alerts en andere ingeschakelde functies. Om de kosten te beheersen:

  • Verzamel alleen de tellers en logs die nodig zijn voor je monitoringdoelen.
  • Gebruik een samplefrequentie die geschikt is voor jouw werkdruk.
  • Filter schijfgegevens op relevante mountpoint-instanties in query's en waarschuwingen.
  • Vermijd het koppelen van overlappende DCR's aan dezelfde pool.
  • Controleer de retentie-instellingen van de werkruimte.

Voor meer informatie, zie Azure Monitor kosten en gebruik en Plan om kosten te beheren voor Azure Batch.

De hulpbronnen opschonen

Wanneer je de gemonitorde pool niet meer nodig hebt, verwijder dan de pool en alle monitoringbronnen die niet gedeeld worden met andere workloads.

Om de poolconfiguratie te behouden zonder steeds rekenknopen te laten draaien, verklein je de pool naar nul:

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

Scaling naar nul kan de backing virtual machine scale set verwijderen. Gegevens die al in Log Analytics zijn opgeslagen, blijven beschikbaar volgens de instellingen voor werkruimteretentie.