mcpField
G
gke-cost-analysis

gke-cost-analysis

github.com/googlecloudplatform云与 DevOps16948 次安装3 天前更新
代码仓库

关于 gke-cost-analysis

gke-cost-analysis 指导如何回答 GKE 费用、优化和账单问题,面向需要分析云成本的用户。它提供基于 GCP Billing Detailed BigQuery Export 的查询要点与操作建议。

主要功能

  1. 01分析 GKE 账单数据
  2. 02使用 BigQuery 查询成本
  3. 03检查成本分摊配置
  4. 04提供 CLI 查询建议

适用场景

  1. 01比较多个项目的 GKE 费用
  2. 02定位成本最高的命名空间或工作负载
  3. 03查询特定集群或工作负载成本

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/googlecloudplatform/gke-mcp --skill gke-cost-analysis

安装后在 Claude Code 中输入/gke-cost-analysis确认已加载。

详细介绍

GKE 成本分析

本技能提供有关如何回答 GKE 成本、优化或账单相关自然语言问题的指导。

概述

当用户询问 GKE 成本时(例如,“各项目的成本是多少?”、“哪个命名空间最贵?”),请使用本技能提供结构清晰、专业的回答。

说明

处理成本相关问题时:

  1. 直接回答:针对具体的成本问题或优化需求作答。
  2. 说明 BigQuery 集成:如适用,说明如何使用 BigQuery 进行成本分析。指出 GKE 成本数据来自 GCP 账单详细 BigQuery 导出。
  3. 检查成本分配:说明必须启用 GKE 成本分配,才能获取命名空间和工作负载级别的成本数据。
  4. 提供可执行步骤:尽可能提供具体的后续步骤或命令。有条件时,优先使用 BigQuery CLI(bq),而不是 BigQuery Studio。
  5. 引用资源:提供相关的 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