Community研究&データ分析github.com

Dynatrace/dynatrace-for-ai

Dynatrace の本番コンテキスト上にAIエージェントを構築するためのスキル、プロンプト、指示を提供します。

dynatrace-for-ai とは?

このスキルは、AIエージェントがDynatraceのSmartscapeとDQL(Dynatrace Query Language)を活用して、AWSクラウドインフラストラクチャを監視・分析するための機能を提供します。EC2インスタンスのインベントリ管理、VPCネットワーク構成の分析、RDSデータベースの監視、LambdaやECS/EKSといったサーバーレス/コンテナワークロードの管理、ロードバランサートポロジのマッピング、コスト最適化、セキュリティコンプライアンスのチェックなど、主要なユースケースをカバーします。DQLを使用したリソース検出、設定解析、関係トラバース(関係を辿る)などのパターンを提供し、効率的なクエリのベストプラクティスも含まれています。Dynatrace AIエージェントや、Dynatraceと統合されたカスタムAIツールで使用するように設計されています。

対応~Claude Code~Codex CLI~Cursor
npx skills add Dynatrace/dynatrace-for-ai

Installed? Explore more 研究&データ分析 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

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

Dynatrace SmartscapeとDQLを使用して、AWSリソースの監視と分析を行います。AWSサービスをクエリし、コストを最適化し、セキュリティを管理し、AWSインフラストラクチャ全体のキャパシティ計画を実施します。

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

ユーザーがDynatraceでAWSリソースを操作する必要がある場合にこのスキルを使用します。タスクの種類に応じてリファレンスファイルを読み込んでください。

  • インベントリ: 「us-east-1のすべてのEC2インスタンスを表示して」
  • ネットワーク: 「VPC vpc-abc123 内の全リソースを検索して」
  • データベース: 「Multi-AZが有効なRDSインスタンスをすべてリストして」
  • サーバーレス: 「VPCアクセスを持つLambda関数を表示して」
  • コスト: 「コスト削減のために未接続のEBSボリュームを見つけて」
  • セキュリティ: 「パブリックアクセス可能なデータベースを特定して」
  • コンプライアンス: 「Environmentタグが欠落しているリソースを見つけて」
  • キャパシティ: 「サブネットのIP使用率を分析して」
  • トラブルシュート: 「ロードバランサーからターゲットグループを経由してインスタンスまでのマッピング」
  • 問題分析: 「このAWS問題の前に何が変更された?」 / 「このリソースに影響を与えたイベントは?」
  • ワークロードコンテキスト: 「このインスタンスはロードバランサーの背後にあるか、EKSクラスター内にあるか、ECSで管理されているか?」
  • イベント: 「このリソースに影響を与える最近のAWSイベントはありますか?」

コアコンセプト

エンティティタイプ

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

コンピュート: AWS_EC2_INSTANCE、AWS_LAMBDA_FUNCTION、AWS_ECS_CLUSTER、AWS_ECS_SERVICE、AWS_EKS_CLUSTER ネットワーキング: AWS_EC2_VPC、AWS_EC2_SUBNET、AWS_EC2_SECURITYGROUP、AWS_EC2_NATGATEWAY、AWS_EC2_VPCENDPOINT データベース: AWS_RDS_DBINSTANCE、AWS_RDS_DBCLUSTER、AWS_DYNAMODB_TABLE、AWS_ELASTICACHE_CACHECLUSTER ストレージ: AWS_S3_BUCKET、AWS_EC2_VOLUME、AWS_EFS_FILESYSTEM ロードバランシング: AWS_ELASTICLOADBALANCINGV2_LOADBALANCER、AWS_ELASTICLOADBALANCINGV2_TARGETGROUP メッセージング: AWS_SQS_QUEUE、AWS_SNS_TOPIC、AWS_EVENTS_EVENTBUS、AWS_MSK_CLUSTER

共通AWSフィールド

すべてのAWSエンティティには以下が含まれます:

  • aws.account.id - AWSアカウント識別子
  • aws.region - AWSリージョン (例:us-east-1)
  • aws.resource.id - 一意のリソース識別子
  • aws.resource.name - リソース名
  • aws.arn - Amazonリソースネーム
  • aws.vpc.id - VPC識別子 (VPC接続リソースの場合)
  • aws.subnet.id - サブネット識別子
  • aws.availability_zone - アベイラビリティゾーン
  • aws.security_group.id - セキュリティグループID (配列)
  • tags - リソースタグ (tags[TagName] を使用)

ログとBizEventsにおけるAWSフィールド

AWS発信のログ (fetch logs) には、これらのフィールドが含まれます — 探索は不要です:

  • aws.region、aws.account.id、aws.service、aws.log_group、aws.log_stream
  • さらに標準ログフィールド: content、loglevel、timestamp、k8s.*、dt.smartscape.*

AWS発信のbizevents (fetch bizevents) には以下が含まれます:

  • aws.region、aws.account.id、event.type、event.provider

filter isNotNull(aws.region) を使用して、AWS発信のレコードにスコープを絞ります。

関係タイプ

AWSエンティティは以下の関係タイプを使用します:

  • is_attached_to - 排他的アタッチメント (例:ボリュームからインスタンスへ)
  • uses - 依存関係 (例:インスタンスがセキュリティグループを使用)
  • runs_on - 垂直関係 (例:インスタンスがAZ上で動作)
  • is_part_of - 構成関係 (例:クラスター内のインスタンス)
  • belongs_to - 集約関係 (例:サービスがクラスターに所属)
  • balances - ロードバランシング (例:ターゲットグループがインスタンスを負荷分散)
  • balanced_by - 逆ロードバランシング関係 (例:ロードバランサーがターゲットグループによって負荷分散される)

AWSメトリクスキーの命名規則

DynatraceはAWS CloudWatchメトリクスを次のパターンで取り込みます:

cloud.aws.<service>.<MetricName>.By.<DimensionName>

<service> は小文字のAWSサービス名、<MetricName> はCloudWatchメトリクス名 (大文字小文字は保持)、<DimensionName> はCloudWatchディメンションです。

例:cloud.aws.ec2.CPUUtilization.By.InstanceId、cloud.aws.lambda.Invocations.By.FunctionName、cloud.aws.rds.CPUUtilization.By.DBInstanceIdentifier

これらのメトリクスには fetch ではなく timeseries を使用します。エンティティごとに分割するには dt.smartscape_source.id でグループ化します。

→ 完全なメトリクスカタログ(サービス別、DQLクエリテンプレート付き)については references/metrics-performance.md を参照してください。


主要ワークフロー

1. AWS リソース検出

タイプ別にすべてのAWSリソースを取得:

smartscapeNodes "AWS_*"
| summarize count = count(), by: {type}
| sort count desc

アカウントとリージョンでフィルタリング:

smartscapeNodes "AWS_*"
| filter aws.account.id == "123456789012" and aws.region == "us-east-1"
| fields type, name, aws.resource.id

タグを使ったフィルタリング:

smartscapeNodes "AWS_*"
| filter tags[Environment] == "production"
| summarize count = count(), by: {type, aws.region}

→ 完全なリソースインベントリパターンについては、references/resource-management.md を参照してください。

2. VPC ネットワーク分析

すべてのVPCをリスト:

smartscapeNodes "AWS_EC2_VPC"
| fields name, aws.account.id, aws.region, aws.vpc.id

VPC内のリソースを検索:

smartscapeNodes "AWS_*"
| filter aws.vpc.id == "vpc-0be61db7c5d2d1bd1"
| summarize resource_count = count(), by: {type, aws.subnet.id}
| sort resource_count desc

セキュリティグループの使用状況を分析:

smartscapeNodes "AWS_EC2_INSTANCE"
| filter contains(aws.security_group.id, "sg-abc123")
| fields name, aws.resource.id, aws.vpc.id, aws.subnet.id

→ VPCネットワーキングについては、references/vpc-networking-security.md を参照してください。 → セキュリティグループのパターンについては、references/security-compliance.md を参照してください。

3. データベース監視

すべてのRDSインスタンスをリスト:

smartscapeNodes "AWS_RDS_DBINSTANCE"
| fields name, aws.account.id, aws.region, aws.vpc.id, aws.availability_zone

Multi-AZデータベースを検索:

smartscapeNodes "AWS_RDS_DBINSTANCE"
| parse aws.object, "JSON:awsjson"
| fieldsAdd multiAZ = awsjson[configuration][multiAZ]
| filter multiAZ == true
| fields name, aws.resource.id, aws.region

エンジンタイプでグループ化:

smartscapeNodes "AWS_RDS_DBINSTANCE"
| parse aws.object, "JSON:awsjson"
| fieldsAdd engine = awsjson[configuration][engine]
| summarize db_count = count(), by: {engine, aws.region}
| sort db_count desc

→ データベース監視については、references/database-monitoring.md を参照してください。

4. サーバーレスおよびコンテナワークロード

Lambda関数をリスト:

smartscapeNodes "AWS_LAMBDA_FUNCTION"
| fields name, aws.account.id, aws.region, aws.vpc.id

クラスター内のECSサービスを検索:

smartscapeNodes "AWS_ECS_SERVICE"
| traverse "belongs_to", "AWS_ECS_CLUSTER"
| fields name, aws.resource.id, aws.region

EKSクラスターをリスト:

smartscapeNodes "AWS_EKS_CLUSTER"
| fields name, aws.account.id, aws.region, aws.vpc.id

→ サーバーレスについては、references/serverless-containers.md を参照してください。 → コンテナについては、references/serverless-containers.md を参照してください。

5. ロードバランサートポロジ

ロードバランサーからインスタンスへの完全なマッピング:

smartscapeNodes "AWS_ELASTICLOADBALANCINGV2_LOADBALANCER"
| parse aws.object, "JSON:awsjson"
| fieldsAdd dnsName = awsjson[configuration][dnsName], scheme = awsjson[configuration][scheme]
| filter scheme == "internet-facing"
| traverse "balanced_by", "AWS_ELASTICLOADBALANCINGV2_TARGETGROUP", direction:backward, fieldsKeep:{dnsName, id}
| fieldsAdd targetGroupName = aws.resource.name
| traverse "balances", "AWS_EC2_INSTANCE", fieldsKeep: {targetGroupName, id}
| fieldsAdd loadBalancerDnsName = dt.traverse.history[-2][dnsName],
            loadBalancerId = dt.traverse.history[-2][id],
            targetGroupId = dt.traverse.history[-1][id]

→ ロードバランシングについては、references/load-balancing-api.md を参照してください。

6. コスト最適化

未接続のEBSボリュームを検索:

smartscapeNodes "AWS_EC2_VOLUME"
| parse aws.object, "JSON:awsjson"
| fieldsAdd state = awsjson[configuration][state]
| filter state == "available"
| fields name, aws.resource.id, aws.availability_zone, aws.account.id

タイプ別にEBSコストを分析:

smartscapeNodes "AWS_EC2_VOLUME"
| parse aws.object, "JSON:awsjson"
| fieldsAdd volumeType = awsjson[configuration][volumeType],
            size = awsjson[configuration][size],
            state = awsjson[configuration][state]
| summarize total_volumes = count(), total_size_gb = sum(size), by: {volumeType, state}
| sort total_size_gb desc

→ コスト最適化については、references/cost-optimization.md を参照してください。

7. セキュリティとコンプライアンス

パブリックアクセス可能なデータベースを検索:

smartscapeNodes "AWS_RDS_DBINSTANCE"
| parse aws.object, "JSON:awsjson"
| fieldsAdd publiclyAccessible = awsjson[configuration][publiclyAccessible]
| filter publiclyAccessible == true
| fields name, aws.resource.id, aws.vpc.id, aws.account.id

セキュリティグループの影響範囲:

smartscapeNodes "AWS_EC2_INSTANCE"
| traverse "uses", "AWS_EC2_SECURITYGROUP"
| summarize instance_count = count(), by: {aws.resource.name, aws.vpc.id}
| sort instance_count desc
| limit 20

→ セキュリティについては、references/security-compliance.md を参照してください。

8. リソース所有権とタグ付け

タグなしリソースを検索:

smartscapeNodes "AWS_*"
| filter isNull(tags)
| fields type, name, aws.resource.id, aws.account.id, aws.region

コストセンター別のコスト配分:

smartscapeNodes "AWS_*"
| filter isNotNull(tags[CostCenter])
| summarize resource_count = count(), by: {tags[CostCenter], type}
| sort resource_count desc

→ リソース所有権については、references/resource-ownership.md を参照してください。


共通クエリパターン

パターンテンプレート
検出smartscapeNodes "AWS_*" | fieldsAdd <attrs> | filter <cond> | summarize <agg>
設定解析smartscapeNodes "AWS_<T>" | parse aws.object, "JSON:awsjson" | fieldsAdd f = awsjson[configuration][field]
トラバースsmartscapeNodes "AWS_<SRC>" | traverse "<rel>", "AWS_<TGT>"
複数タイプsmartscapeNodes "AWS_T1", "AWS_T2" | filter <cond> | summarize count(), by: {type}

ベストプラクティス

クエリ最適化

  1. アカウントとリージョンで早期にフィルタリングする
  2. 具体的なエンティティタイプを使用する (可能な場合は "AWS_*" ワイルドカードを避ける)
  3. 探索時には | limit N で結果を制限する
  4. ネストされたフィールドにアクセスする前に isNotNull() チェックを使用する

設定解析

  1. 常に aws.object をJSONパーサーで解析する: parse aws.object, "JSON:awsjson"
  2. 一貫したフィールド命名を使用する: fieldsAdd configField = awsjson[configuration][field]
  3. 解析後にヌル値をチェックする
  4. 複雑なネストされたオブジェクトには toString() を使用する

セキュリティフィールド

  1. セキュリティグループIDは配列 - contains() または expand を使用する
  2. 詳細なセキュリティコンテキストのために aws.object を解析する
  3. publiclyAccessible、storageEncrypted および同様のフラグをチェックする
  4. IAMロールの前提を検証する

タグ付け戦略

  1. 特定のタグ値でフィルタリングするには tags[TagName] を使用する
  2. tags はJSONオブジェクトであり、配列ではありません — タグなしリソースには isNull(tags) を使用し、arraySize(tags) は決して使用しない
  3. 特定のタグが欠落しているリソースを見つけるには isNull(tags[TagName]) を使用する
  4. 一貫したタグ命名規則を実装する
  5. summarize操作でタグカバレッジを追跡する

制限事項と注意点

Smartscapeの制限事項

  • AWSオブジェクト設定は parse aws.object, "JSON:awsjson" で解析する必要がある
  • AWSメトリクスは cloud.aws.* 命名規則を使用したDynatraceメトリクスとして利用可能(AWSメトリクス命名規則 を参照)
  • リソース検出はAWSインテグレーション設定に依存する
  • タグの同期にはわずかな遅延が発生する可能性がある

関係トラバース

  • 逆方向の関係(例:ターゲットグループ → ロードバランサー)には direction:backward を使用する
  • トラバース中に重要なフィールドを維持するには fieldsKeep を使用する
  • トラバース履歴には dt.traverse.history[-N] でアクセスする
  • 複雑なトポロジでは複数のトラバース操作が必要になる場合がある

一般的なヒント

  • 人間が読めるリソース名には getNodeName() を使用する
  • isNotNull() と isNull() でヌル値を適切に処理する
  • 大規模な環境ではリージョンとアカウントのフィルターを組み合わせる
  • 一意のリソース数には countDistinct() を使用する

リファレンスを読み込むタイミング

このスキルは段階的開示を使用します。ユースケースの80%はここから開始してください。詳細な仕様が必要な場合は、リファレンスファイルを読み込んでください。

vpc-networking-security.md を読み込むタイミング:

  • VPCトポロジと接続性を分析する場合
  • セキュリティグループの設定を調査する場合
  • セキュリティグループでリソースを検索する場合
  • ネットワークインターフェースの問題をトラブルシューティングする場合

database-monitoring.md を読み込むタイミング:

  • RDSインスタンスとクラスターを管理する場合
  • データベースエンジンの分布を分析する場合
  • Multi-AZ設定を確認する場合
  • キャッシュクラスターを監視する場合

serverless-containers.md を読み込むタイミング:

  • Lambda関数を操作する場合
  • ECS/EKSデプロイメントを分析する場合
  • コンテナネットワーキングを調査する場合
  • サーバーレス移行を計画する場合

load-balancing-api.md を読み込むタイミング:

  • ロードバランサートポロジをマッピングする場合
  • ターゲットグループのヘルスを分析する場合
  • API Gatewayを操作する場合
  • CloudFrontを設定する場合

messaging-event-streaming.md を読み込むタイミング:

  • SQSキューとSNSトピックを管理する場合
  • EventBridgeイベントバスを分析する場合
  • KinesisまたはMSKを操作する場合
  • Step Functionsを監視する場合

resource-management.md を読み込むタイミング:

  • リソース監査を実施する場合
  • タグコンプライアンスを分析する場合
  • 未接続のリソースを見つける場合
  • リージョン別の分布を計画する場合

cost-optimization.md を読み込むタイミング:

  • コスト削減の機会を特定する場合
  • ストレージコストを分析する場合
  • 未使用リソースを見つける場合
  • インスタンスタイプを最適化する場合

capacity-planning.md を読み込むタイミング:

  • キャパシティ拡張を計画する場合
  • リソース使用率を分析する場合
  • サブネットIP使用量を監視する場合
  • サイジングを行う場合

関連スキル