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

Azure定时触发Function获取存储容量指标异常排查

问题:Azure Function定时触发时存储账户UsedCapacity指标返回0(手动触发正常)

问题描述

我有一个基于Timer Trigger的Azure Function,运行PowerShell代码,通过SPN认证按标签筛选Azure存储账户,获取其UsedCapacity使用容量指标。手动触发时代码运行正常,能返回准确数据;但定时调度运行时,所有存储账户的指标值均为0。

排查发现

对比手动与调度运行的日志,确认核心差异:

  • 手动运行时,Metrics API的响应包含average字段,可正确计算容量值
  • 调度运行时,Metrics API的响应缺少average字段,导致计算得到的容量值为0

可能的原因及解决方案

1. 时间范围参数设置不当

定时触发时的时间范围参数可能未覆盖有数据的时间段,或未对齐指标聚合周期,导致API返回无有效数据的结果。

解决方案:
在调用Get-AzMetric时显式设置合理的时间范围和时间粒度,确保覆盖有数据的时段:

$endTime = Get-Date
$startTime = $endTime.AddHours(-1) # 取过去1小时的数据
$metrics = Get-AzMetric -ResourceId $storageAccount.Id `
    -MetricName "UsedCapacity" `
    -TimeGrain 01:00:00 `
    -StartTime $startTime `
    -EndTime $endTime `
    -AggregationType Average

2. SPN权限上下文异常

定时触发时的SPN令牌可能存在时效问题,或权限未正确应用,导致Metrics API返回不完整数据。

解决方案:

  • 在代码开头显式重新认证SPN,确保使用有效令牌:
# 证书认证示例
Connect-AzAccount -ServicePrincipal -Tenant $env:TENANT_ID -ApplicationId $env:APP_ID -CertificateThumbprint $env:CERT_THUMBPRINT
# ClientSecret认证示例
# Connect-AzAccount -ServicePrincipal -Tenant $env:TENANT_ID -ApplicationId $env:APP_ID -ClientSecret $env:CLIENT_SECRET
  • 确认SPN已分配Monitoring Reader或Storage Account Contributor权限,且权限已生效(避免权限延迟)。

3. 聚合类型参数缺失

定时触发时的代码可能未明确指定聚合类型,导致Metrics API未返回average字段。

解决方案:
调用Get-AzMetric时必须显式指定-AggregationType Average参数,强制API返回平均聚合值:

$metrics = Get-AzMetric -ResourceId $storageAccount.Id `
    -MetricName "UsedCapacity" `
    -AggregationType Average `
    -TimeGrain 01:00:00 `
    -StartTime $startTime `
    -EndTime $endTime

4. PowerShell模块版本不一致

手动与定时触发的运行环境中,Az.Monitor模块版本可能不同,导致API调用行为差异。

解决方案:

  • 在requirements.psd1中指定稳定的Az.Monitor版本:
@{
    'Az.Monitor' = '3.0.0'
}
  • 在代码中显式导入指定版本的模块:
Import-Module Az.Monitor -RequiredVersion 3.0.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 09:23:18