gke-cost-analysis について
gke-cost-analysisは、GKEの費用、最適化、請求に関する分析を支援するスキルです。GCP Billing Detailed BigQuery Exportを用いたクエリの要点と実行手順を案内します。
主な機能
- 01GKE請求データの分析
- 02BigQueryでの費用クエリ
- 03コスト配分設定の確認
- 04CLIクエリ手順の提示
活用シーン
- 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 Billing Detailed BigQuery Export に由来することに触れてください。
- コスト割り当てを確認する:名前空間およびワークロードレベルのコストデータを取得するには、GKE Cost Allocation を有効にする必要があることに触れてください。
- 実行可能な手順を提示する:可能な場合は、具体的な次の手順やコマンドを提示します。利用できる場合は、BigQuery Studio より BigQuery CLI(
bq)を優先してください。 - 関連リソースを参照する:関連する GCP ドキュメントやコンソールへのリンクを案内します。
覚えておくべきポイント
- データソース:GKE のコストは GCP Billing Detailed BigQuery Export に由来します。ユーザーは、BigQuery テーブルの完全なパス(Billing Account ID を含むデータセット名とテーブル名)を指定する必要があります。
- 粒度:名前空間およびワークロードレベルのコストデータを取得するには、GKE Cost Allocation を有効にする必要があります。
- ツール: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 対応