我正在尝试获取 Azure 中每种资源上个月的成本。我知道 cmdlet Get-AzConsumUsageDetail
并且我能够使用以下命令获取所需的信息,该信息获取最后一个完整计费周期的费用:
$data = $data = Get-AzConsumptionUsageDetail -BillingPeriod $(Get-Date (Get-Date).AddMonths(-1) -Format "yyyyMM")
该命令运行大约需要 4 分钟,并且利用我们数千个资源返回超过 100,000 条记录。鉴于我们拥有大量资源,我意识到对每个资源甚至每个资源组进行单独的调用是不可行的。使用 Get-AzConsumUsageDetail
循环访问每个资源组超出了 Azure 允许的调用阈值。
最终目标是计算每个单独资源的每月总成本。由于我无法对每个资源进行单独的调用,因此我决定使用上面显示的命令来一次获取所有内容。但是,如果我将 $Resource 定义为
$Resources = Get-AzResource
并运行以下命令,由于 $data 的大小,$Resources 中所有资源的小样本花费了 57 秒:
measure-command {
$Resources | select-object -first 200 | foreach-object -parallel {
$test = $using:data | where-object InstanceName -eq $psitem.Name
}
}
我的问题是:有没有办法在数据已显示每月总计的情况下获取此定价/消费信息?这将大大减少 $data 中的记录总数,并大大加快速度。至少,有什么方法可以更有效地获取信息吗?
最佳答案
PowerShell get monthly consumption for all Azure resources: -
Get-AzConsumUsageDetail
通常在 PowerShell
中用于收集 Azure 资源的成本使用详细信息。但是,如果您有大量数据/资源,则应该使用其他 Cost details solutions如给定的 MSDoc 中详细说明。正如 @mclayton 提到的,消费使用信息 API 已被弃用,将不再存在。对于庞大的数据集,您可以使用 Power BI
或 成本导出
。您可以轻松使用 Portal download
或 PowerShell
命令来获取较少种类的数据。
我的 Azure 环境中有一些资源,但不多。我尝试使用下面的循环提取每个单独的成本信息,并成功了。
$cost=Get-AzConsumptionUsageDetail -StartDate 2023-08-07 -EndDate 2023-08-08 -Top 10 -IncludeMeterDetails
$cost | Group-Object -Property InstanceName | ForEach-Object {
$totalCost = ($_.Group | Measure-Object -Property PretaxCost -Sum).Sum
Write-Output "$($_.Name) - Total monthly cost: $totalCost"
}
您也可以引用 Cost API requests 数据量较少的样本。
关于azure - Powershell 获取所有 Azure 资源的每月消耗量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76854888/