mcpField
D
dt-obs-gcp

dt-obs-gcp

github.com/dynatraceクラウド・DevOps1692.0k 回インストール今日更新
リポジトリ

dt-obs-gcp について

Smartscape と DQL で GCP インフラを監視・分析する Dynatrace 向けスキルです。GCP プロジェクト全体のリソース検出、設定、トポロジー、セキュリティ、所有者分析に使えるクエリパターンを提供します。

主な機能

  1. 01種類や範囲を指定した GCP リソース検出
  2. 02JSON からのリソース設定解析
  3. 03リソース間の関係のたどり
  4. 04ラベルによるリソース分類
  5. 05プロジェクトとリージョン階層の分析

活用シーン

  1. 01Compute Engine または GKE リソースの一覧作成
  2. 02リソース設定の詳細確認
  3. 03ネットワークとコンピュート間の関連追跡
  4. 04所有者や費用配賦に応じたリソース分類

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/dynatrace/dynatrace-for-ai --skill dt-obs-gcp

インストール後、Claude Code で/dt-obs-gcpを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
compute-instances.md
iam-security.md
kubernetes-gke.md
messaging-pubsub.md
monitoring-logging.md
networking-dns.md
README.md
resource-management.md
resource-ownership.md
serverless-containers.md

詳細

GCP クラウドインフラストラクチャ

Dynatrace Smartscape と DQL を使用して、GCP リソースを監視、分析します。GCP サービスをクエリし、組織階層を管理し、セキュリティ体制を監査して、GCP インフラストラクチャ全体でリソースの所有者を追跡します。

このスキルを使用するタイミング

ユーザーが Dynatrace で GCP リソースを操作する必要がある場合に、このスキルを使用します。タスクの種類に応じて、参照ファイルを読み込みます。

タスク読み込むファイル
インベントリとトポロジーのクエリ(追加ファイルは不要 — 上記の基本パターンを使用)
Compute Engine のインスタンス、マシンタイプ、IP アドレスreferences/compute-instances.md を読み込む
GKE クラスター、ノードプール、ポッド、デプロイ、サービス、RBACreferences/kubernetes-gke.md を読み込む
Cloud Run のサービス、リビジョン、実行references/serverless-containers.md を読み込む
VPC ネットワーク、サブネット、ルート、DNS レコードreferences/networking-dns.md を読み込む
Pub/Sub トピックreferences/messaging-pubsub.md を読み込む
IAM サービスアカウント、ロール、Secret Managerreferences/iam-security.md を読み込む
監視ダッシュボード、ログ、保存済みクエリreferences/monitoring-logging.md を読み込む
GCP プロジェクト、リージョン、組織階層references/resource-management.md を読み込む
リソースの所有者、GCP ラベル、組織構造references/resource-ownership.md を読み込む

基本概念

エンティティタイプ

GCP リソースには GCP_* プレフィックスが付与され、smartscapeNodes 関数を使用してクエリできます。すべての GCP エンティティは、Dynatrace Smartscape によって自動的に検出され、モデル化されます。

コンピューティング: GCP_COMPUTE_GOOGLEAPIS_COM_INSTANCE、GCP_COMPUTE_GOOGLEAPIS_COM_ADDRESS ネットワーク: GCP_COMPUTE_GOOGLEAPIS_COM_NETWORK、GCP_COMPUTE_GOOGLEAPIS_COM_SUBNETWORK、GCP_COMPUTE_GOOGLEAPIS_COM_ROUTE、GCP_DNS_GOOGLEAPIS_COM_RESOURCERECORDSET Kubernetes(GKE): GCP_K8S_IO_POD、GCP_K8S_IO_NODE、GCP_K8S_IO_SERVICE、GCP_K8S_IO_SERVICEACCOUNT、GCP_K8S_IO_PERSISTENTVOLUMECLAIM、GCP_APPS_K8S_IO_DEPLOYMENT、GCP_APPS_K8S_IO_STATEFULSET、GCP_CONTAINER_GOOGLEAPIS_COM_NODEPOOL、GCP_RBAC_AUTHORIZATION_K8S_IO_CLUSTERROLEBINDING、GCP_RBAC_AUTHORIZATION_K8S_IO_ROLEBINDING サーバーレス: GCP_RUN_GOOGLEAPIS_COM_SERVICE、GCP_RUN_GOOGLEAPIS_COM_REVISION、GCP_RUN_GOOGLEAPIS_COM_EXECUTION IAM とセキュリティ: GCP_IAM_GOOGLEAPIS_COM_SERVICEACCOUNT、GCP_IAM_GOOGLEAPIS_COM_ROLE、GCP_SECRETMANAGER_GOOGLEAPIS_COM_SECRETVERSION メッセージング: GCP_PUBSUB_GOOGLEAPIS_COM_TOPIC 監視: GCP_MONITORING_GOOGLEAPIS_COM_DASHBOARD、GCP_LOGGING_GOOGLEAPIS_COM_SAVEDQUERY インフラストラクチャ: GCP_REGION

GCP の共通フィールド

すべての GCP エンティティには、次のフィールドが含まれます。

  • gcp.project.id — GCP プロジェクト識別子
  • gcp.region — GCP リージョン(例: us-central1)
  • gcp.zone — GCP ゾーン(例: us-central1-a)
  • gcp.organization.id — GCP 組織識別子
  • gcp.resource.name — リソース名
  • gcp.resource.type — リソースタイプ識別子
  • gcp.asset.type — GCP アセットタイプ
  • gcp.object — リソースの完全な構成を含む JSON BLOB
GCP の組織階層

GCP リソースは、次の階層に整理されています。

  • 組織 — 最上位のコンテナ(gcp.organization.id)
  • フォルダー — 組織内の論理グループ
  • プロジェクト — リソースコンテナ(gcp.project.id)
  • リージョン/ゾーン — 物理的な場所(gcp.region、gcp.zone)
エンティティの命名規則

GCP エンティティタイプは、GCP_<SERVICE_API>_<RESOURCE> のパターンに従います。

  • サービス API は Google API ドメインに対応します(例: compute.googleapis.com → COMPUTE_GOOGLEAPIS_COM)
  • リソースは特定のリソースタイプを表します(例: INSTANCE、NETWORK)

例:

  • GCP_COMPUTE_GOOGLEAPIS_COM_INSTANCE — Compute Engine VM
  • GCP_K8S_IO_POD — GKE ポッド
  • GCP_RUN_GOOGLEAPIS_COM_SERVICE — Cloud Run サービス

クエリパターン

すべての GCP クエリは、4 つの基本パターンに基づいています。これらを習得し、あらゆるエンティティタイプに応用してください。

パターン 1:リソースの検出

リソースを種類別に一覧表示し、プロジェクト/リージョン/ゾーンで絞り込み、件数を集計します。

smartscapeNodes "GCP_COMPUTE_GOOGLEAPIS_COM_INSTANCE"
| fields name, gcp.project.id, gcp.region, gcp.zone, gcp.resource.name

すべての GCP リソースタイプを一覧表示するには、"GCP_*" に置き換え、| summarize count = count(), by: {type} | sort count desc を追加します。結果を絞り込むには、| filter gcp.project.id == "<PROJECT_ID>" や | filter gcp.region == "<REGION>" などのフィルターを追加します。

パターン 2:構成の解析

詳細な構成フィールドを取得するには、gcp.object の JSON を解析します。

smartscapeNodes "GCP_COMPUTE_GOOGLEAPIS_COM_INSTANCE"
| parse gcp.object, "JSON:gcpjson"
| fieldsAdd machineType = gcpjson[configuration][resource][machineType],
            status = gcpjson[configuration][resource][status]
| fields name, gcp.project.id, machineType, status

GCP の構成フィールドは、主要なリソース属性については gcpjson[configuration][resource][...] に、拡張プロパティについては gcpjson[configuration][additionalAttributes][...] にネストされています。

パターン 3:リレーションシップのたどり方

リソース間のリレーションシップをたどります。

smartscapeNodes "GCP_COMPUTE_GOOGLEAPIS_COM_INSTANCE"
| traverse "*", "GCP_COMPUTE_GOOGLEAPIS_COM_SUBNETWORK"
| fields name, gcp.project.id

GCP エンティティには名前付きのリレーションシップタイプがないため、トラバーサルではリレーションシップ名として "*" を使用します。トラバーサル中にフィールドを引き継ぐには fieldsKeep を使用し、祖先のフィールドにアクセスするには dt.traverse.history[-N] を使用します。

パターン 4:ラベルに基づく所有権管理

GCP ラベルでリソースをグループ化し、所有権や組織構造を追跡します。

smartscapeNodes "GCP_*"
| filter isNotNull(`tags:gcp_labels`)
| fields name, gcp.project.id, `tags:gcp_labels`

GCP ラベルは tags:gcp_labels フィールドを通じて公開されており、バッククォート構文を使用してアクセスする必要があります。特定のサービスに絞り込むには、"GCP_*" を特定のタイプに置き換えます。


リファレンスガイド

上記の基本パターンをサービス固有に調整する必要がある場合は、リファレンスファイルを読み込んで詳細なクエリを確認してください。

リファレンス読み込むタイミング主な内容
compute-instances.mdCompute Engine の VM、マシンタイプ、IP アドレス、ディスクを扱う場合インスタンス一覧、マシンタイプの分布、ステータスチェック
kubernetes-gke.mdGKE クラスター、ノードプール、Pod、デプロイメント、サービス、RBAC を扱う場合クラスターのトポロジー、ワークロードの分布、RBAC バインディング
serverless-containers.mdCloud Run のサービス、リビジョン、実行を扱う場合サービス一覧、リビジョンの追跡、実行の分析
networking-dns.mdVPC ネットワーク、サブネット、ルート、DNS レコードを扱う場合ネットワークのトポロジー、サブネット分析、ルートテーブル、DNS レコードセット
messaging-pubsub.mdPub/Sub トピックを扱う場合トピック一覧、メッセージングのトポロジー
iam-security.mdIAM サービスアカウント、ロール、Secret Manager を扱う場合サービスアカウントの監査、ロール分析、シークレットのバージョン追跡
monitoring-logging.mdMonitoring のダッシュボード、ログ、保存済みクエリを扱う場合ダッシュボード一覧、保存済みクエリの分析
resource-management.mdGCP プロジェクト、リージョン、組織階層を扱う場合プロジェクト一覧、リージョンの分布、階層のマッピング
resource-ownership.mdリソースの所有権、GCP ラベル、組織構造を扱う場合ラベルに基づくグループ化、プロジェクトレベルの集計、チャージバック

ベストプラクティス

構成の解析
  1. gcp.object は必ず JSON パーサーで解析します:parse gcp.object, "JSON:gcpjson"
  2. 主要なリソース属性には gcpjson[configuration][resource][...] を使用してアクセスします
  3. 拡張プロパティには gcpjson[configuration][additionalAttributes][...] を使用してアクセスします
  4. 解析後、isNotNull() で null 値を確認します
GCP の階層
  1. 組織 → フォルダー → プロジェクト → リージョン/ゾーン
  2. 主な絞り込みフィルターとして gcp.project.id を使用します
  3. プロジェクトをまたぐクエリには gcp.organization.id を使用します
  4. ロケーションに基づく分析には gcp.region と gcp.zone を使用します
エンティティの命名
  1. エンティティタイプは GCP_<SERVICE_API>_<RESOURCE> の形式に従います
  2. サービス API は Google API ドメインに対応し、ドットとハイフンはアンダースコアに置き換えられます
  3. 可能な場合は、具体的なエンティティタイプを使用します("GCP_*" のワイルドカードは避けてください)
ラベル
  1. GCP ラベルにはバッククォート構文でアクセスする必要があります:`tags:gcp_labels`
  2. ラベルに基づくフィルタリングには isNotNull(tags:gcp_labels) を使用します
  3. summarize 操作でラベルの適用範囲を追跡します
関係のたどり方
  1. 関係名には "*" を使用します — GCP エンティティには名前付きの関係タイプがありません
  2. トラバーサル中に重要なフィールドを保持するには、fieldsKeep を使用します
  3. トラバーサル履歴には dt.traverse.history[-N] でアクセスします
  4. 複雑なトポロジーでは、複数のトラバーサル操作が必要になる場合があります

制限事項と注意点

Smartscape の制限事項
  • Smartscape データには最新のスキャン結果が反映されます。GCP の変更が Dynatrace に反映されるまで、遅延が生じる場合があります
  • すべての GCP サービスがエンティティタイプとして表されるわけではありません
  • リソースの設定によっては、一部の構成フィールドが null になる場合があります
  • リソースの検出は、GCP 統合の構成に依存します
GCP 固有の注意点
  • GCP ラベルにはバッククォート構文でアクセスする必要があります:`tags:gcp_labels`
  • GCP エンティティの関係のトラバーサルには "*" を使用します(名前付きの関係タイプはありません)
  • GCP オブジェクトの構成は、parse gcp.object, "JSON:gcpjson" で解析する必要があります
  • 構成フィールドは gcpjson[configuration][resource][...] の下にネストされます(AWS のパターンとは異なります)
一般的なヒント
  • パフォーマンスを向上させるには、プロジェクトとリージョンで早めにフィルタリングします
  • null を適切に処理するには、isNotNull() と isNull() を使用します
  • 大規模な環境では、プロジェクトとリージョンのフィルターを組み合わせます
  • 一意のリソース数を集計するには、countDistinct() を使用します
  • 調査中は | limit N で結果を制限します

コメント