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 для определенного ресурса.