Как я могу получить все показатели для ресурса в 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++


}

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