如何用PowerShell获取Azure应用服务的CPU及内存使用率?
Azure应用服务CPU/内存百分比指标获取与告警方案
问题描述
需要获取Azure应用服务的CPU使用率(百分比)和内存占用率(百分比),监测特定时段内CPU是否处于高占用状态,以此判断资源是否过载,并触发邮件告警。当前使用Get-AzMetricDefinition命令,但无法获取实际的百分比数据,寻求可行的PowerShell解决方案。
当前使用的命令:
Get-AzMetricDefinition -ResourceId "/subscriptions/<subscriptionid>/resourceGroups/Default-Web- EastUS/providers/microsoft.web/sites/website2" -DetailedOutput -MetricName "BytesSent,CpuTime"
解决方案
1. 明确核心命令差异
Get-AzMetricDefinition仅用于查询可用的指标定义(比如指标名称、支持的聚合类型),不能获取实时/历史的指标数值。要获取实际指标数据,需使用Get-AzMetric命令。
2. 获取CPU/内存百分比指标数据
Azure应用服务提供直接的百分比类指标:
- CPU使用率:
CPUPercentage - 内存占用率:
MemoryPercentage
示例命令(获取过去1小时、粒度5分钟的指标数据):
# 定义资源ID $resourceId = "/subscriptions/<subscriptionid>/resourceGroups/Default-Web-EastUS/providers/microsoft.web/sites/website2" # 获取指定时段的CPU、内存百分比数据 $metrics = Get-AzMetric -ResourceId $resourceId ` -MetricName "CPUPercentage", "MemoryPercentage" ` -StartTime (Get-Date).AddHours(-1) ` # 起始时间:1小时前 -EndTime (Get-Date) ` # 结束时间:当前时间 -TimeGrain 00:05:00 ` # 指标粒度:5分钟 -AggregationType Average, Maximum # 聚合方式:平均值、最大值
3. 筛选CPU高占用时段
可以通过筛选指标数据中CPU最大值超过阈值(比如80%)的记录,判断是否存在资源过载:
# 筛选CPU占用率最大值超过80%的时段 $highCpuRecords = $metrics | Where-Object { $_.Name.Value -eq "CPUPercentage" } | Select-Object -ExpandProperty Data | Where-Object { $_.Maximum -gt 80 }
4. 触发邮件告警
如果检测到高占用记录,使用PowerShell内置的Send-MailMessage发送告警邮件:
if ($highCpuRecords.Count -gt 0) { # 构造邮件内容 $alertContent = "Azure应用服务检测到CPU高占用情况:`n`n" $alertContent += $highCpuRecords | Format-Table TimeStamp, Maximum -AutoSize | Out-String # 发送邮件(根据实际SMTP配置调整参数) Send-MailMessage -From "azure-alert@yourdomain.com" ` -To "admin@yourdomain.com" ` -Subject "[告警] Azure应用服务CPU占用过高" ` -Body $alertContent ` -SmtpServer "smtp.yourdomain.com" ` -Port 587 ` -UseSsl ` -Credential (Get-Credential) # 若SMTP需要认证,保留此参数 }
5. 验证可用指标(可选)
如果不确定指标名称是否正确,可再次用Get-AzMetricDefinition确认:
Get-AzMetricDefinition -ResourceId $resourceId -MetricName "CPUPercentage", "MemoryPercentage"
内容的提问来源于stack exchange,提问作者Tracey
相关产品推荐
相关产品推荐

