文档

通过Cost V2 API获取成本数据

更新时间:

您可以通过Cost V2 API查询集群工作负载的实时估算成本。Cost V2 API支持设定更为灵活的时间范围,对Pod、命令空间、Label、Controller、Controller Kind(ReplicaSet、DaemonSet、Job等)等维度的资源进行过滤查询,可用于实时成本趋势分析。

前提条件

已参见通过API获取成本数据概述完成准备工作。

请求和返回参数

请求语法

GET /v2/cost

请求参数

名称

类型

是否必选

描述

window

string

查询的持续时间。接受以下几种格式的输入:

  • 关键词:如“today”、“week”、“month”、“yesterday”、“lastweek”、“lastmonth”。

  • 持续时间:如“30m”、“12h”、“7d”。

  • RFC3339日期:逗号分隔的RFC3339格式的日期对,如“2024-03-26T00:00:00Z,2024-03-27T00:00:00Z”。

  • Unix时间戳:逗号分隔的Unix时间戳(秒)对,例如“1711382400,1711468800”。

filter

string

对指定资源类别进行过滤。支持的类别包括:

  • namespace

  • controllerName

  • controllerKind (replicaset、daemonSet、job等)

  • pod

  • label

同一个类别支持指定多个过滤项,使用英文半角逗号(,)分隔,例如namespace:"default","kube-system"

同时,支持多字段组合过滤,使用+分隔,例如namespace:"default"+label[app]:"nginx"

step

string

对返回结果按时间段切分为多个成本集,step描述单个成本集的持续时间,例如“1d”、“1w”。如果未指定,默认为window的时间范围。

说明

成本集指一个时间段内Kubernetes对象成本的集合,例如一个Pod在持续时间内的成本集合。

aggregate

string

对返回结果按照不同维度进行聚合。支持的类别包括:

  • namespace

  • controller

  • controllerKind

format

string

成本导出格式。支持的类别包括:

  • json(默认值)

  • csv

返回参数

名称

类型

描述

properties

object

描述关联Kubernetes对象的属性。

pod

string

Pod名称。

namespace

string

命名空间。

controllerKind

string

控制器类型。

controller

string

控制器名称。

start

string

成本集的开始时间。

end

string

成本集的结束时间。

cpuCoreRequestAverage

float

请求的平均CPU核心数。

cpuCoreUsageAverage

float

使用的平均CPU核心数。

ramByteRequestAverage

float

请求的平均内存量。

ramByteUsageAverage

float

使用的平均内存量。

cost

float

估算成本。默认成本估算策略为CPU权重100%,自定义资源权重请参见成本估算策略介绍

costRatio

float

成本占比。描述当前成本占集群总成本的比例。

customCost

float

自定义成本。

(可选)步骤一:自定义资源成本权重

Cost V2 API默认使用CPU权重100%的成本估算策略。如需自定义资源成本权重,请参见以下步骤。

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择应用 > Helm

  3. Helm页面的操作列,单击ack-alibaba-cloud-metrics-adapter对应的更新

  4. 修改AlibabaCloudMetricsAdapter.costWeights(默认值为:{"cpu": "1.0", "memory": "0.0"}),然后单击确定

    image

    关于权重混合(CPU-内存混合)资源估算策略,请参见成本估算策略介绍

步骤二:获取成本数据

本小节使用curl命令访问Kubernetes API。具体操作,请参见使用Kubernetes API

示例一:获取某个DaemonSet昨天的估算成本明细

获取命令

curl -G -k --cert ./client-cert.pem --key ./client-key.pem \
-d 'window=yesterday' \
-d 'filter=namespace:"kube-system"+controllerKind:"DaemonSet"+label[app]:"terway-eniip"' \
"$APISERVER/api/v1/namespaces/kube-system/services/ack-metrics-adapter-api-service:8080/proxy/v2/cost" | jq .

返回示例(JSON格式)

展开查看返回示例

{
  "data": [
    {
      "kube-system/terway-eniip-88286": {
        "name": "kube-system/terway-eniip-88286",
        "properties": {
          "controller": "terway-eniip",
          "controllerKind": "DaemonSet",
          "namespace": "kube-system",
          "pod": "terway-eniip-88286"
        },
        "start": "2024-03-25T00:00:00+08:00",
        "end": "2024-03-26T00:00:00+08:00",
        "cpuCoreRequestAverage": 0.35,
        "cpuCoreUsageAverage": 0.001,
        "ramByteRequestAverage": 209715200,
        "ramByteUsageAverage": 65815511.04,
        "cost": 1.622,
        "costRatio": 0.016,
        "customCost": 0.972
      },
      "kube-system/terway-eniip-fqxk8": {
        "name": "kube-system/terway-eniip-fqxk8",
        "properties": {
          "controller": "terway-eniip",
          "controllerKind": "DaemonSet",
          "namespace": "kube-system",
          "pod": "terway-eniip-fqxk8"
        },
        "start": "2024-03-25T00:00:00+08:00",
        "end": "2024-03-26T00:00:00+08:00",
        "cpuCoreRequestAverage": 0.35,
        "cpuCoreUsageAverage": 0.001,
        "ramByteRequestAverage": 209715200,
        "ramByteUsageAverage": 72787722.24,
        "cost": 1.622,
        "costRatio": 0.016,
        "customCost": 0.972
      },
      "kube-system/terway-eniip-xjsr8": {
        "name": "kube-system/terway-eniip-xjsr8",
        "properties": {
          "controller": "terway-eniip",
          "controllerKind": "DaemonSet",
          "namespace": "kube-system",
          "pod": "terway-eniip-xjsr8"
        },
        "start": "2024-03-25T00:00:00+08:00",
        "end": "2024-03-26T00:00:00+08:00",
        "cpuCoreRequestAverage": 0.35,
        "cpuCoreUsageAverage": 0.001,
        "ramByteRequestAverage": 209715200,
        "ramByteUsageAverage": 53661380.923,
        "cost": 0.843,
        "costRatio": 0.008,
        "customCost": 0.505
      }
    }
  ]
}

示例二:获取某个Pod三小时内的估算成本明细,成本集按小时维度拆分

获取命令

curl -G -k --cert ./client-cert.pem --key ./client-key.pem \
-d 'window=2024-03-24T00:00:00Z,2024-03-24T03:00:00Z' \
-d 'step=1h' \
-d 'filter=namespace:"kube-system"+pod:"terway-eniip-kz68n"' \
"$APISERVER/api/v1/namespaces/kube-system/services/ack-metrics-adapter-api-service:8080/proxy/v2/cost" | jq .

返回示例(JSON格式)

展开查看返回示例

{
  "data": [
    {
      "kube-system/terway-eniip-kz68n": {
        "name": "kube-system/terway-eniip-kz68n",
        "properties": {
          "controller": "terway-eniip",
          "controllerKind": "DaemonSet",
          "namespace": "kube-system",
          "pod": "terway-eniip-kz68n"
        },
        "start": "2024-03-24T00:00:00Z",
        "end": "2024-03-24T01:00:00Z",
        "cpuCoreRequestAverage": 0.35,
        "cpuCoreUsageAverage": 0.001,
        "ramByteRequestAverage": 209715200,
        "ramByteUsageAverage": 63583378.285,
        "cost": 0.075,
        "costRatio": 0.025,
        "customCost": 0.045
      }
    },
    {
      "kube-system/terway-eniip-kz68n": {
        "name": "kube-system/terway-eniip-kz68n",
        "properties": {
          "controller": "terway-eniip",
          "controllerKind": "DaemonSet",
          "namespace": "kube-system",
          "pod": "terway-eniip-kz68n"
        },
        "start": "2024-03-24T01:00:00Z",
        "end": "2024-03-24T02:00:00Z",
        "cpuCoreRequestAverage": 0.35,
        "cpuCoreUsageAverage": 0.001,
        "ramByteRequestAverage": 209715200,
        "ramByteUsageAverage": 63111168,
        "cost": 0.075,
        "costRatio": 0.025,
        "customCost": 0.045
      }
    },
    {
      "kube-system/terway-eniip-kz68n": {
        "name": "kube-system/terway-eniip-kz68n",
        "properties": {
          "controller": "terway-eniip",
          "controllerKind": "DaemonSet",
          "namespace": "kube-system",
          "pod": "terway-eniip-kz68n"
        },
        "start": "2024-03-24T02:00:00Z",
        "end": "2024-03-24T03:00:00Z",
        "cpuCoreRequestAverage": 0.35,
        "cpuCoreUsageAverage": 0.001,
        "ramByteRequestAverage": 209715200,
        "ramByteUsageAverage": 63430656,
        "cost": 0.075,
        "costRatio": 0.025,
        "customCost": 0.045
      }
    }
  ]
}

相关文档

Allocation API结合了账单数据,提供业务分摊账单的费用,可用于对账,请参见通过Allocation API获取