dt-obs-gcp について
Smartscape と DQL で GCP インフラを監視・分析する Dynatrace 向けスキルです。GCP プロジェクト全体のリソース検出、設定、トポロジー、セキュリティ、所有者分析に使えるクエリパターンを提供します。
主な機能
- 01種類や範囲を指定した GCP リソース検出
- 02JSON からのリソース設定解析
- 03リソース間の関係のたどり
- 04ラベルによるリソース分類
- 05プロジェクトとリージョン階層の分析
活用シーン
- 01Compute Engine または GKE リソースの一覧作成
- 02リソース設定の詳細確認
- 03ネットワークとコンピュート間の関連追跡
- 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.mdiam-security.mdkubernetes-gke.mdmessaging-pubsub.mdmonitoring-logging.mdnetworking-dns.mdREADME.mdresource-management.mdresource-ownership.mdserverless-containers.md詳細
GCP クラウドインフラストラクチャ
Dynatrace Smartscape と DQL を使用して、GCP リソースを監視、分析します。GCP サービスをクエリし、組織階層を管理し、セキュリティ体制を監査して、GCP インフラストラクチャ全体でリソースの所有者を追跡します。
このスキルを使用するタイミング
ユーザーが Dynatrace で GCP リソースを操作する必要がある場合に、このスキルを使用します。タスクの種類に応じて、参照ファイルを読み込みます。
| タスク | 読み込むファイル |
|---|---|
| インベントリとトポロジーのクエリ | (追加ファイルは不要 — 上記の基本パターンを使用) |
| Compute Engine のインスタンス、マシンタイプ、IP アドレス | references/compute-instances.md を読み込む |
| GKE クラスター、ノードプール、ポッド、デプロイ、サービス、RBAC | references/kubernetes-gke.md を読み込む |
| Cloud Run のサービス、リビジョン、実行 | references/serverless-containers.md を読み込む |
| VPC ネットワーク、サブネット、ルート、DNS レコード | references/networking-dns.md を読み込む |
| Pub/Sub トピック | references/messaging-pubsub.md を読み込む |
| IAM サービスアカウント、ロール、Secret Manager | references/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 VMGCP_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.md | Compute Engine の VM、マシンタイプ、IP アドレス、ディスクを扱う場合 | インスタンス一覧、マシンタイプの分布、ステータスチェック |
| kubernetes-gke.md | GKE クラスター、ノードプール、Pod、デプロイメント、サービス、RBAC を扱う場合 | クラスターのトポロジー、ワークロードの分布、RBAC バインディング |
| serverless-containers.md | Cloud Run のサービス、リビジョン、実行を扱う場合 | サービス一覧、リビジョンの追跡、実行の分析 |
| networking-dns.md | VPC ネットワーク、サブネット、ルート、DNS レコードを扱う場合 | ネットワークのトポロジー、サブネット分析、ルートテーブル、DNS レコードセット |
| messaging-pubsub.md | Pub/Sub トピックを扱う場合 | トピック一覧、メッセージングのトポロジー |
| iam-security.md | IAM サービスアカウント、ロール、Secret Manager を扱う場合 | サービスアカウントの監査、ロール分析、シークレットのバージョン追跡 |
| monitoring-logging.md | Monitoring のダッシュボード、ログ、保存済みクエリを扱う場合 | ダッシュボード一覧、保存済みクエリの分析 |
| resource-management.md | GCP プロジェクト、リージョン、組織階層を扱う場合 | プロジェクト一覧、リージョンの分布、階層のマッピング |
| resource-ownership.md | リソースの所有権、GCP ラベル、組織構造を扱う場合 | ラベルに基づくグループ化、プロジェクトレベルの集計、チャージバック |
ベストプラクティス
構成の解析
gcp.objectは必ず JSON パーサーで解析します:parse gcp.object, "JSON:gcpjson"- 主要なリソース属性には
gcpjson[configuration][resource][...]を使用してアクセスします - 拡張プロパティには
gcpjson[configuration][additionalAttributes][...]を使用してアクセスします - 解析後、
isNotNull()で null 値を確認します
GCP の階層
- 組織 → フォルダー → プロジェクト → リージョン/ゾーン
- 主な絞り込みフィルターとして
gcp.project.idを使用します - プロジェクトをまたぐクエリには
gcp.organization.idを使用します - ロケーションに基づく分析には
gcp.regionとgcp.zoneを使用します
エンティティの命名
- エンティティタイプは
GCP_<SERVICE_API>_<RESOURCE>の形式に従います - サービス API は Google API ドメインに対応し、ドットとハイフンはアンダースコアに置き換えられます
- 可能な場合は、具体的なエンティティタイプを使用します(
"GCP_*"のワイルドカードは避けてください)
ラベル
- GCP ラベルにはバッククォート構文でアクセスする必要があります:
`tags:gcp_labels` - ラベルに基づくフィルタリングには
isNotNull(tags:gcp_labels)を使用します - summarize 操作でラベルの適用範囲を追跡します
関係のたどり方
- 関係名には
"*"を使用します — GCP エンティティには名前付きの関係タイプがありません - トラバーサル中に重要なフィールドを保持するには、
fieldsKeepを使用します - トラバーサル履歴には
dt.traverse.history[-N]でアクセスします - 複雑なトポロジーでは、複数のトラバーサル操作が必要になる場合があります
制限事項と注意点
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で結果を制限します