关于 gke-cost-analysis
gke-cost-analysis 指导如何回答 GKE 费用、优化和账单问题,面向需要分析云成本的用户。它提供基于 GCP Billing Detailed BigQuery Export 的查询要点与操作建议。
主要功能
- 01分析 GKE 账单数据
- 02使用 BigQuery 查询成本
- 03检查成本分摊配置
- 04提供 CLI 查询建议
适用场景
- 01比较多个项目的 GKE 费用
- 02定位成本最高的命名空间或工作负载
- 03查询特定集群或工作负载成本
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ googlecloudplatform/ gke-mcp --skill gke-cost-analysis安装后在 Claude Code 中输入/gke-cost-analysis确认已加载。
详细介绍
GKE 成本分析
本技能提供有关如何回答 GKE 成本、优化或账单相关自然语言问题的指导。
概述
当用户询问 GKE 成本时(例如,“各项目的成本是多少?”、“哪个命名空间最贵?”),请使用本技能提供结构清晰、专业的回答。
说明
处理成本相关问题时:
- 直接回答:针对具体的成本问题或优化需求作答。
- 说明 BigQuery 集成:如适用,说明如何使用 BigQuery 进行成本分析。指出 GKE 成本数据来自 GCP 账单详细 BigQuery 导出。
- 检查成本分配:说明必须启用 GKE 成本分配,才能获取命名空间和工作负载级别的成本数据。
- 提供可执行步骤:尽可能提供具体的后续步骤或命令。有条件时,优先使用 BigQuery CLI(
bq),而不是 BigQuery Studio。 - 引用资源:提供相关的 GCP 文档或控制台链接。
需要记住的要点
- 数据来源:GKE 成本数据来自 GCP 账单详细 BigQuery 导出。用户必须提供其 BigQuery 表的完整路径(包含账单账号 ID 的数据集名称和表名)。
- 粒度:必须启用 GKE 成本分配,才能获取命名空间和工作负载级别的成本数据。
- 工具:优先使用 BigQuery CLI(
bq)。编写 Standard SQL 查询时,请使用点号(.)而不是冒号(:)分隔项目 ID 和数据集名称。 - 默认值:除非另有说明,否则默认查询最近 30 天的数据,行数限制为 10,并按成本降序排列。
BigQuery 查询示例
使用这些查询作为回答问题的模板。所有参数(数据集、表、项目、集群等)都需要替换。
单个集群中单个工作负载的成本
bq query --nouse_legacy_sql '
SELECT
SUM(cost) + SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0)) AS cost,
SUM(cost) AS cost_before_credits
FROM {{.BQDatasetProjectID}}.{{.BQDatasetName}}.gcp_billing_export_resource_v1_XXXXXX_XXXXXX_XXXXXX AS bqe
WHERE _PARTITIONTIME >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
AND project.id = "sample-project-id"
AND EXISTS(SELECT * FROM bqe.labels AS l WHERE l.key = "goog-k8s-cluster-location" AND l.value = "us-central1")
AND EXISTS(SELECT * FROM bqe.labels AS l WHERE l.key = "goog-k8s-cluster-name" AND l.value = "sample-cluster-name")
AND EXISTS(SELECT * FROM bqe.labels AS l WHERE l.key = "k8s-namespace" AND l.value = "sample-namespace")
AND EXISTS(SELECT * FROM bqe.labels AS l WHERE l.key = "k8s-workload-type" AND l.value = "apps/v1-Deployment")
AND EXISTS(SELECT * FROM bqe.labels AS l WHERE l.key = "k8s-workload-name" AND l.value = "sample-workload-name")
;
'
每个集群中各个工作负载的成本
bq query --nouse_legacy_sql '
SELECT
project.id AS project_id,
(SELECT l.value FROM bqe.labels AS l WHERE l.key = "goog-k8s-cluster-location" LIMIT 1) AS cluster_location,
(SELECT l.value FROM bqe.labels AS l WHERE l.key = "goog-k8s-cluster-name" LIMIT 1) AS cluster_name,
(SELECT l.value FROM bqe.labels AS l WHERE l.key = "k8s-namespace" LIMIT 1) AS k8s_namespace,
(SELECT l.value FROM bqe.labels AS l WHERE l.key = "k8s-workload-type" LIMIT 1) AS k8s_workload_type,
(SELECT l.value FROM bqe.labels AS l WHERE l.key = "k8s-workload-name" LIMIT 1) AS k8s_workload_name,
SUM(cost) + SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0)) AS cost,
SUM(cost) AS cost_before_credits
FROM {{.BQDatasetProjectID}}.{{.BQDatasetName}}.gcp_billing_export_resource_v1_XXXXXX_XXXXXX_XXXXXX AS bqe
WHERE _PARTITIONTIME >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
AND EXISTS(SELECT * FROM bqe.labels AS l WHERE l.key = "goog-k8s-cluster-name")
GROUP BY 1, 2, 3, 4, 5, 6
ORDER BY 7 DESC
LIMIT 10
;
'
注意:检查是否存在 "goog-k8s-cluster-name" 标签,可将账单数据范围限定为 GKE 成本。
评论
支持 Markdown