You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell提取Azure资源全量指标?为何仅获CpuTime?

问题描述

运行以下PowerShell脚本提取Azure App Service的资源指标:

#login to azure and set context
$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
 }
 }

预期获取AverageResponseTime、AverageMemoryWorkingSet、各类Http状态码指标等,但实际仅得到CpuTime指标,请问原因是什么?

原因分析及解决办法
  • 未指定目标指标名称:Get-AzMetric默认仅返回少量默认指标(如CpuTime),不会自动拉取所有可用指标。必须通过-MetricNames参数明确指定需要获取的指标名称,才能拿到目标数据。
  • 部分指标无有效数据:如果指定时间范围(过去24小时)内,某些指标没有产生任何数据,Get-AzMetric不会返回该指标的结果。可以先用Get-AzMetricDefinition确认指标是否存在,再检查对应时间窗口内是否有数据生成。
  • 时间粒度不匹配:部分指标仅支持特定的时间粒度(TimeGrain),如果设置的00:01:00(1分钟)不符合目标指标的粒度要求,也会导致无法返回对应数据。可通过Get-AzMetricDefinition查看每个指标支持的时间粒度。
修正后的脚本示例

在调用Get-AzMetric时添加-MetricNames参数,明确指定需要的指标:

#login to azure and set context
$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 = @()

# 指定需要获取的指标名称集合
$targetMetrics = @("AverageResponseTime", "AverageMemoryWorkingSet", "Http2xx", "Http3xx", "Http4xx", "Http5xx")
 
$Metrics = Get-AzMetric -ResourceId $ResourceID -StartTime (Get-date).AddHours(-24) -TimeGrain 00:01:00 -MetricNames $targetMetrics

$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
 }
 }

内容的提问来源于stack exchange,提问作者Veronica

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 12:40:22