Мониторинг вычислительных узлов пула пакетная служба Azure с помощью Azure Monitor Agent

Метрики платформы учетных записей пакетная служба Azure предоставляют информацию о пулах, узлах, ядрах, заданиях и задачах. Для мониторинга производительности гостевых операционных систем, таких как использование процессора, памяти, диска и сети, установите Azure Monitor Agent (AMA) на вычислительные узлы пула.

В этой статье показано, как сделать следующее:

  • Создайте пакетный пул с управляемой идентичностью, назначенной пользователем, и AMA.
  • Создайте правило сбора данных (DCR) для счётчиков производительности Linux и Syslog.
  • Свяжите DCR с ресурсом Batch Pool.
  • Проверьте данные в метриках Log Analytics и Azure Monitor.

Примеры используют Azure CLI и пул Linux. Та же архитектура поддерживает пулы Windows с расширением Windows AMA и источниками данных Windows.

Important

Мониторинг вычислительных узлов пула Batch с помощью AMA поддерживается только для учетных записей Batch, использующих режим выделения пула подписка пользователя. В режиме пакетного распределения пула сервисов вычислительные узлы создаются в подписках, управляемых пакетами, к которым клиенты не имеют доступа.

Как работает мониторинг узлов

Мониторируемый пул Batch использует следующие ресурсы:

  • Пакетный аккаунт в режиме распределения пользовательского пула подписки.
  • Пул Batch с управляемой идентичностью, назначаемой пользователем.
  • Расширение Azure Monitor Agent устанавливается при создании пула.
  • DCR, который указывает данные для сбора и пункты назначения.
  • Ассоциация DCR, целевым объектом которой является ресурс Azure Resource Manager для пула Batch.
  • Рабочее пространство Log Analytics для данных журналов и, по желанию, Azure Monitor Metrics для гостевых метрик.

Свяжите DCR с идентификатором ресурса пакетного пула:

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

Не связывайте DCR только с набором масштабов виртуальной машины, который Batch создаёт для пула. Batch управляет жизненным циклом этого набора масштабов. Когда пул масштабируется до нуля узлов, Batch может удалить набор масштабов и создать новый при последующем изменении размера.

Записи Log Analytics сохраняют идентификатор вычислительного ресурса, созданного Batch. Гостевые метрики доступны в текущем масштабируемом наборе виртуальных машин, созданном с помощью Batch, в пространстве имён azure.vm.linux.guestmetrics для Linux или в пространстве имён Virtual Machine Guest (Windows) для Windows.

Prerequisites

Прежде чем начать, вам понадобится следующее:

Создайте DCR, рабочее пространство Log Analytics и пакетный пул в одном регионе Azure. Если пул использует виртуальную сеть с ограниченным исходящим доступом, проверьте требования сети Azure Monitor Agent.

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) собирает общие счётчики производительности Linux каждые 60 секунд. Он отправляет счётчики как в таблицу Perf в Log Analytics, так и в Azure Monitor Metrics. Также она отправляет предупреждения и более серьёзные записи Syslog в Log Analytics.

Azure Monitor Metrics в качестве назначения для счётчиков производительности гостевой ОС находится на этапе предварительной версии. Для текущих ограничений см. Collect performance counters with 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. Замените <managed-identity-resource-id> на значение $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"
      }
    }
  }
}

Создайте пул с помощью API управления пакетами:

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

Для пула Windows используйте следующее:

  • Тип расширения AzureMonitorWindowsAgent.
  • Образ Windows и совместимый SKU агента узла Batch.
  • Windows DCR, в котором для kind задано значение Windows.
  • Счётчики производительности 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, гостевые метрики появляются в текущем наборе масштабирования виртуальной машины, созданной партией.

  1. В портале Azure откройте набор масштабов виртуальной машины, который Batch создал для пула.
  2. Выберите Метрики.
  3. Для Metric Namespace выберите azure.vm.linux.guestmetrics Linux или Virtual Machine Guest (Windows) для Windows.
  4. Выберите метрику и агрегацию.

Вы можете найти текущий идентификатор вычислительного ресурса в недавних записях Perf:

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

Note

Когда пул масштабируется до нуля узлов, Batch может удалить его базовый набор масштабирования виртуальных машин. Ресурс гостевой метрики недоступен, пока масштабируемый набор не существует. Данные Log Analytics, уже собранные в рабочем пространстве, остаются доступны согласно настройкам сохранения рабочего пространства.

Отслеживайте метрики платформы Batch с данными об узлах

Гостевые данные узлов дополняют автоматически собираемые метрики платформы пакетного аккаунта. Используйте оба источника:

  • Используйте метрики учётной записи Batch, такие как TotalNodeCount, RunningNodeCount, IdleNodeCount, UnusableNodeCount, TaskStartEvent и TaskCompleteEvent, для отслеживания состояния службы и планирования.
  • Используйте гостевые счётчики производительности для изучения состояний процессора, памяти, диска и сети на вычислительных узлах.
  • Используйте журналы пакетных сервисов для сопоставления событий жизненного цикла пулов, заданий и задач с поведением узлов.

Для определений метрик и рекомендаций по агрегированию см. пакетная служба Azure monitoring data reference и Monitor пакетная служба Azure.

Устранение неполадок сбора данных

Используйте следующие проверки, если данные не поступают:

Симптом Чеки
Нет пульса Убедитесь, что расширение AMA успешно развернуто, удостоверение, назначаемое пользователем, прикреплено к пулу и указано в параметрах расширения, а необходимые конечные точки Azure Monitor достижимы.
AMA сообщает, что ресурс не связан с DCR Подтвердите, что ассоциация DCR нацелена на идентификатор ресурса пакетного пула. Связь только с базовым масштабируемым набором виртуальных машин не заменяет связь с пулом.
Сердцебиение приходит, но Perf оно пустое Убедитесь, что Microsoft-Perf присутствует как в источнике данных счётчиков производительности, так и в потоке данных, направляемом в Log Analytics. Проверьте пути счётчика и тип операционной системы DCR.
Пространство имён гостевых метрик недоступно Подтвердите эти Microsoft-InsightsMetrics цели azureMonitorMetrics-default, выделите несколько минут на агрегацию и убедитесь, что в пуле уже есть узлы и установленная шкала поддержки.
Повторяющиеся записи Проверьте, есть ли несколько DCR, которые собирают одни и те же данные из пула. Сбор дубликатов данных увеличивает затраты на приём данных.

Для размещения логов AMA и требований к диску см. требования агента Azure Monitor. Сведения о выделении ресурсов Batch и сбоях узлов см. в статье пакетная служба Azure pool and node errors.

Рекомендации по затратам

Плата за Azure Monitor может применяться к загрузке, удержанию, оповещениям и другим активным функциям Log Analytics. Для контроля стоимости:

  • Собирайте только счётчики и логи, необходимые для ваших целей мониторинга.
  • Используйте частоту дискретизации, подходящую для вашей нагрузки.
  • Фильтруйте данные о дисках, используя значимые экземпляры точек монтирования в запросах и предупреждениях.
  • Избегайте связывать перекрывающиеся DCR с одним и тем же пулом.
  • Просмотрите параметры хранения рабочей области.

Дополнительные сведения см. в статьях Стоимость и использование Azure Monitor и Планирование управления затратами для пакетная служба Azure.

Очистите ресурсы

Когда вам больше не нужен контролируемый пул, удалите пул и все ресурсы мониторинга, которые не используются с другими нагрузками.

Чтобы сохранить конфигурацию пула без дальнейшего запуска вычислительных узлов, увеличите размер пула до нуля:

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, остаются доступны согласно настройкам сохранения рабочего пространства.