Как я могу получить все показатели для ресурса в Azure с помощью Powershell?
В настоящее время я запускаю следующий скрипт Powershell, извлекающий метрики из Azure.
` #войдите в Azure и установите контекст
$Resource = Get-AzResource -ResourceName <appservicename> -ResourceGroupName <resourcegroup> - ResourceType "Microsoft.Web/sites"
$ResourceID = $Resource.ResourceId
$MetricsDefinition = Get-AzMetricDefinition -ResourceId $ResourceID
$MetricsDefinitionHash = @{}
$MetricsDefinition | % {
$Name = $_.Name
$Unit = $_.Unit
$MetricsDefinitionHash.Add($Name,$Unit)
}
$TotalResult = @()
$Metrics = Get-AzMetric -ResourceId $ResourceID -StartTime (Get-date).AddHours(-24) -TimeGrain 00:01:00
$Metrics | % {
if($_.Data -ne $null)
{
$Calc, $metricName, $Result = $Null
$i=0;
$MetricName = $_.Name
$_.Data | % {
$calc += $_.Average
$i++
}
$Result = $Calc/$i
$MetricUnit = $MetricsDefinitionHash["$MetricName"]
$MetricResult = New-Object PSObject
$MetricResult | add-member Noteproperty MetricName $metricName
$MetricResult | add-member Noteproperty MetricValue $Result
$MetricResult | add-member Noteproperty MetricUnit $MetricUnit
$TotalResult += $MetricResult
}
}
`
I expected a result of MetricName MetricValue MetricUnit AverageResponseTime 0.7866443 SecondsAverageMemoryWorkingSet 80747385.625 BytesMemoryWorkingSet
Http5xx Http4xx Http406 Http404 Http403 Http401 Http3xx 0 Http2xx 0 BytesSent 4699.123BytesReceived 7.8
Requests 9.4444CpuTime 0.1111
Я оставил некоторые значения пустыми, но вы поняли идею. Проблема в том, что я получаю только CpuTime . Любые идеи о том, почему я получил бы только это?
1 ответ
Я пытался в своей среде получить эти показатели
$Resource = Get-AzResource -ResourceName “metricdemoapp” -ResourceGroupName “xxx” -ResourceType "Microsoft.Web/sites"
$ResourceID = $Resource.ResourceId
$Metrics = Get-AzMetric -ResourceId $ResourceID -StartTime (Get-date).AddHours(-24) -TimeGrain 00:01:00
The above returns variable $Metrics returns only metrics of CpuTime and its details like Id, name, type ,unit ,Data,timeseries as it is the first metric that appears
С идентификатором:/subscriptions/xxxxxx23f/resourceGroups/xxxxx/providers/Microsoft.Web/sites/metricdemoapp/providers/Microsoft.Insights/metrics/CpuTime
После проверки поддерживаемых метрик на портале в моем случае служба веб-приложений
при попытке с другим именем метрики получил требуемые единицы измерения.
Где, как показано ниже, команда для определения дает подробную информацию обо всех метриках вместе с подробностями одну за другой.
$MetricsDefinition = Get-AzMetricDefinition -ResourceId $ResourceID$MetricsDefinition
PowerShell:
$Resource = Get-AzResource -ResourceName “metricdemoapp” -ResourceGroupName “xxx” -ResourceType "Microsoft.Web/sites"
$ResourceID = $Resource.ResourceId
$MetricsDefinition = Get-AzMetricDefinition -ResourceId $ResourceID
$MetricsDefinition
$i=0
foreach($metric in $MetricsDefinition)
{
$MetricName=$MetricsDefinition.Name.Value[$i]
$MetricDetails= Get-AzMetric -ResourceId $ResourceID -MetricName $MetricName
$MetricDataValue=$MetricDetails.Data
$Timestamp=$MetricDetails.Data.TimeStamp
$Average=$MetricDetails.Data.Average
$mCount=$MetricName.Value.Count
$count=$mCount-1
$MetricUnit=$metric.Unit
$MetricUnit
$MetricValue=$MetricName.Value
$MetricValue
$MetricResult = New-Object PSObject
$MetricResult | add-member Noteproperty MetricName $MetricName
$MetricResult | add-member Noteproperty MetricUnit $MetricUnit
$MetricResult | add-member Noteproperty MetricDetails $MetricDetails
$MetricResult | add-member Noteproperty MetricDataValue $MetricDataValue
$MetricResult | add-member Noteproperty TimeStamp $Timestamp
$MetricResult | add-member Noteproperty Average $Average
$MetricResult
$i++
}
Выход:
Будет что-то вроде:
MetricName : CpuTime
MetricUnit : Seconds
MetricDetails : Microsoft.Azure.Commands.Insights.OutputClasses.PSMetricNoDetails
MetricDataValue : {Microsoft.Azure.Commands.Insights.OutputClasses.PSMetricValue, Microsoft.Azure.Commands.Insights.OutputClasses.PSMetricValue, Microsoft.Azure.Commands.Insights.OutputClasses.PSMetricValue,
Microsoft.Azure.Commands.Insights.OutputClasses.PSMetricValue…}
TimeStamp : {11/24/2022 6:23:00 AM, 11/24/2022 6:24:00 AM, 11/24/2022 6:25:00 AM, 11/24/2022 6:26:00 AM…}
Average : {$null, $null, $null, $null…}
И продолжается для каждой метрики, как показано ниже.
Где AverageResponseTime — это одна из метрик, которую вы можете увидеть.
РЕДАКТИРОВАТЬ: 28.11.2022
Попробуйте добавить тип агрегации Средняя ложь$MetricDetails= Get-AzMetric -ResourceId $ResourceID -MetricName $MetricName -AggregationType Average -TimeGrain 06:00:00
$MetricsDefinition = Get-AzMetricDefinition -ResourceId $ResourceID
$i=0
foreach($metric in $MetricsDefinition)
{
$MetricName=$MetricsDefinition.Name.Value[$i]
$MetricDetails= Get-AzMetric -ResourceId $ResourceID -MetricName $MetricName -AggregationType Average -TimeGrain 06:00:00
$MetricDataValue=$MetricDetails.Data
$Timestamp=$MetricDetails.Data.TimeStamp
$Average=$MetricDetails.Data.Average
$mCount=$MetricName.Value.Count
$count=$mCount-1
$MetricUnit=$metric.Unit
$MetricUnit
$MetricValue=$MetricName.Value
$MetricValue
$MetricResult = New-Object PSObject
$MetricResult | add-member Noteproperty MetricName $MetricName
$MetricResult | add-member Noteproperty MetricUnit $MetricUnit
$MetricResult | add-member Noteproperty MetricDetails $MetricDetails
$MetricResult | add-member Noteproperty MetricDataValue $MetricDataValue
$MetricResult | add-member Noteproperty TimeStamp $Timestamp
$MetricResult | add-member Noteproperty Average $Average
$MetricResult
$i++
}