Get-AzMetrics выдает ошибку неверного запроса, когда предоставленный ResourceId принадлежит подключенному диску данных (не идентификатору виртуальной машины)

Я пытаюсь получить максимальное значение числа байт чтения диска данных/сек и записи диска данных байт/сек в течение 30 дней для всех дисков данных (премиум-SSD) в моей подписке с помощью Get-AzMetric.

Я получаю следующую ошибку при использовании команды Get-AzMetric.

Get-AzMetric: тип исключения: ErrorResponseException, сообщение: Microsoft.Azure.Management.Monitor.Models.ErrorResponseException: операция вернула недопустимый код состояния "BadRequest"

Что следует изменить? Я должен использовать идентификатор диска, а не идентификатор виртуальной машины, и мне нужно использовать PowerShell для автоматизации значений.

Это мой код:

      $write_metricName = "Data Disk Write Bytes/Sec"
$et = Get-Date
$st = (Get-Date).AddDays(-30)
# Resource Id is of data disk
$resourceId = "/subscriptions/XXXXX/resourceGroups/rg-xxxxx/providers/Microsoft.Compute/disks/disk-xxxx-01"
$write_metric_avg = Get-AzMetric -ResourceId $resourceId -StartTime $st -EndTime $et -TimeGrain 00:01:00 -MetricName $write_metricName -DetailedOutput -AggregationType Maximum

Если я предоставлюresourceId виртуальной машины вместо диска данных, это отлично работает для меня .

В настоящее время я запускаю это в Cloudshell с портала Azure. Ниже приведены сведения о версии:

      PS /home/o365> Get-InstalledModule -Name Az -AllVersions | select Name,Version                                                                                                                
Name Version
---- -------
Az   9.4.0
PS /home/o365> $PSVersionTable.PSVersion                                                                                                                                                      
Major  Minor  Patch  PreReleaseLabel BuildLabel
-----  -----  -----  --------------- ----------
7      3      2  

1 ответ

Если диск подключен к виртуальной машине и вы хотите рассчитать максимальные значения дискаread bytes/sec & write bytes/secтогда вам нужно использовать имя метрики как « Байт записи на диск данных/сек», «Байт чтения диска данных/сек» для-MetricNameсвойство, а также вам необходимо передать идентификатор ресурса виртуальной машины в-resourceIdсвойство в командлете Get-AzMetric .

Судя по общему описанию, мы понимаем, что вы хотите получить максимальные значенияDisk Read Bytes/secиDisk Write Bytes/secметрики (с использованием Get-AzMetric) для всех дисков данных (только премиум-класса), которые подключены к виртуальной машине, без передачи идентификатора ресурса виртуальной машины, вы можете использовать приведенный ниже скрипт.

Приведенный ниже скрипт предоставит вам список дисков с данными, подключенных к различным виртуальным машинам в рамках подписки, и проверит, является ли этот конкретный уровень Sku диска уровнем «Премиум» или нет, и будет дополнительно собирать показатели диска соответствующим образом.

Мы протестировали приведенный выше сценарий в нашей локальной среде, он работает нормально, и мы предлагаем вам проверить его со своей стороны.

Вот пример сценария PowerShell:

      $read_metricName = "Composite Disk Read Bytes/sec"
$write_metricName = "Composite Disk Write Bytes/sec"
$et = Get-Date
$st = (Get-Date).AddDays(-30)
$vmlist=Get-AzVM  #pulling list of VM under subscription
foreach( $item in $vmlist)
{
    #list only data disk Names associated with a specific VM
    $disks=$item.StorageProfile.dataDisks.Name 

    foreach( $disk in $disks){
        
        #pulling repective diskId's
        $rdids=Get-AzDisk -Name $disk

        foreach( $id in $rdids){
                
            #checking whether the data disk is premium tier or not

            if( $id.Sku.Tier -eq "Premium"){
                #Write-Host $id.Id
                $read_metric_avg = Get-AzMetric -ResourceId $id.Id -StartTime $st -EndTime $et -TimeGrain 00:01:00 -DetailedOutput -AggregationType Maximum -MetricName $read_metricName 
                $write_metric_avg=Get-AzMetric -ResourceId $id.Id -StartTime $st -EndTime $et -TimeGrain 00:01:00 -DetailedOutput -AggregationType Maximum -MetricName $write_metricName 
            }
        }
    }
}

Вы можете использовать этот REST API , чтобы получить дополнительную информацию об определении метрики монитора Azure для определенного ресурса.

Другие вопросы по тегам