Azure cmdlet:如何使用Invoke-AzCostManagementQuery对结果进行分组?

ddhy6vgd  于 2023-03-13  发布在  其他
关注(0)|答案(1)|浏览(101)

Microsoft引入了一个强大的cmdlet,称为Invoke-AzCostManagementQuery,它是Az.CostManagement模块的一部分,这使得生成所有可能维度的自定义成本报告成为可能。
参数(实际上)非常简单:

1. The scope to be surveyed
 2. the desired time period
 3. the aggregation of the costs
 4. the granularity
 5. if necessary, grouping according to specifications

不幸的是,documentation太差了,甚至微软的支持团队在发出正确的命令时也有问题。
到目前为止,我能够成功地创建以下查询:

首先,我设置所需的范围:

$scope = "/subscriptions/xxxxxx"

其次,我定义了成本的合计:

$aggregation = @{
  
  totalCost = @{
    name     = "Cost"
    function = "SUM"
  }
}

第三,我运行以下命令:

Invoke-AzCostManagementQuery `
  -Scope $scope `
  -Timeframe 'DateToMonth' `
  -Type 'Usage' `
  -DatasetGranularity "Daily" `
  -DatasetAggregation $aggregation

我收到定义范围内的每日成本:

Column                      Row
------                      ---
{Cost, UsageDate, Currency} {922,7007638124661 20230301 EUR, 944,695760723976 20230302 EUR, 870,8345694362154 20230303 EUR, 731,7461005886661 20230304 EUR…}

添加分组筛选器时:

$grouping = @{
  name      = "azcosts"
  type      = "TagKey"
}

我在调试日志中收到了所需的输出,但查询以错误Invoke-AzCostManagementQuery: You cannot call a method on a null-valued expression.结束

ia2d9nvy

ia2d9nvy1#

要按已在资源上定义的单个标记对其进行分组,您可以执行以下操作:

$grouping = @{
    name      = "owner"
    type      = "TagKey"
  }

  
$test = Invoke-AzCostManagementQuery `
    -Scope $scope `
    -Timeframe 'DateToMonth' `
    -Type 'Usage' `
    -DatasetGranularity "Daily" `
    -DatasetAggregation $aggregation `
    -DatasetGrouping $grouping
Return $test

在我的资源中,它有一个名为owner的标签
在我的例子中,它返回如下内容:

Column   : {Cost, UsageDate, TagKey, TagValue…}
ETag     : 
Id       : 
Location : 
Name     : 
NextLink : 
Row      : {64,45890538046535 20230301 owner mynster DKK, 62,92332096662609 20230302 owner mynster DKK, 63,05880866997392 20230303 owner mynster DKK, 63,04782384544536 20230304 owner mynster DKK…}
Sku      : 
Tag      : Microsoft.Azure.PowerShell.Cmdlets.CostManagement.Models.Api20211001.ResourceTags
Type     : 
Property : Microsoft.Azure.PowerShell.Cmdlets.CostManagement.Models.Api20211001.QueryProperties

我确实没有一个简单的方法来解释我是如何发现的,但可以尝试一下。
如果您转到azure门户,然后转到成本管理,并在准备好继续查询后配置查询,请按F12并转到“网络”。
在那里,你会发现从你的电脑到网站的所有通信和它运行的查询。
它应该看起来像这样:

按下它并转到Payload,在这里您可以看到浏览器如何为您的结果构建有效负载,如下所示:

在本例中,我看到的是名为“costcenter”的标记
如果你想要更多的话,你可以把分组放在一个数组里,然后你想加多少就加多少

$grouping = @()
$grouping += @{
    name = "owner"
    type = "TagKey"
}
$grouping += @{
    name = "ResourceGroupName"
    type = "Dimension"
}

相关问题