dt-obs-aws について
dt-obs-aws は、Dynatrace の Smartscape と DQL で AWS インフラを分析するスキルです。クラウドリソースの棚卸しやトラブルシューティングに加え、トポロジー、コスト、セキュリティ、キャパシティの確認に対応し、作業別のリファレンスを備えています。
主な機能
- 01AWS リソースの検出と絞り込み
- 02VPC とリソース間の関係分析
- 03データベース、コンテナ、サーバーレスの検索
- 04コスト、セキュリティ、コンプライアンスの確認
- 05CloudWatch メトリクスとイベントの分析
活用シーン
- 01リージョン内の EC2 インスタンスの棚卸し
- 02未接続の EBS ボリュームの特定
- 03公開アクセス可能なデータベースの検出
- 04リソースタグとサブネット IP 使用量の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ dynatrace/ dynatrace-for-ai --skill dt-obs-awsインストール後、Claude Code で/dt-obs-awsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/capacity-planning.mdcost-optimization.mddatabase-monitoring.mdevents.mdload-balancing-api.mdmessaging-event-streaming.mdmetrics-performance.mdresource-management.mdresource-ownership.mdsecurity-compliance.mdserverless-containers.mdvpc-networking-security.mdworkload-detection.md詳細
AWS Cloud Infrastructure
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
AWS を発生元とするレコードに絞り込むには、filter isNotNull(aws.region) を使用します。
リレーションシップタイプ
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} |
ベストプラクティス
クエリの最適化
- アカウントとリージョンで早い段階にフィルターします
- 具体的なエンティティタイプを使用します(可能な場合は
"AWS_*"のワイルドカードを避けます) - 調査時は
| limit Nで結果数を制限します - ネストされたフィールドにアクセスする前に
isNotNull()でチェックします
構成の解析
- 常に JSON パーサーで
aws.objectを解析します:parse aws.object, "JSON:awsjson" - 一貫したフィールド名を使用します:
fieldsAdd configField = awsjson[configuration][field] - 解析後に null 値を確認します
- 複雑なネストされたオブジェクトには
toString()を使用します
セキュリティフィールド
- セキュリティグループ ID は配列です。
contains()またはexpandを使用してください - 詳細なセキュリティコンテキストを確認するには、
aws.objectを解析してください publiclyAccessible、storageEncryptedなどのフラグを確認してください- IAM ロールの引き受けを検証してください
タグ付け戦略
- 特定のタグ値でフィルタリングするには、
tags[TagName]を使用してください tagsは配列ではなく JSON オブジェクトです。タグのないリソースにはisNull(tags)を使用し、arraySize(tags)は決して使用しないでください- 特定のタグがないリソースを見つけるには、
isNull(tags[TagName])を使用してください - 一貫したタグの命名規則を導入してください
- summarize 操作でタグの適用状況を追跡してください
制限事項と注意点
Smartscape の制限事項
- AWS オブジェクトの設定は、
parse aws.object, "JSON:awsjson"で解析する必要があります - AWS メトリクスは、
cloud.aws.*という命名規則に従う Dynatrace メトリクスとして利用できます(AWS メトリクスの命名規則を参照) - リソースの検出は AWS インテグレーションの設定に依存します
- タグの同期には若干の遅延が生じる場合があります
関係のたどり方
- 逆方向の関係(例:ターゲットグループ → ロードバランサー)には
direction:backwardを使用してください - たどる処理の間も重要なフィールドを維持するには、
fieldsKeepを使用してください dt.traverse.history[-N]でたどった履歴にアクセスできます- 複雑なトポロジでは、複数回の traverse 操作が必要になる場合があります
一般的なヒント
- 人が読みやすいリソース名には
getNodeName()を使用してください isNotNull()とisNull()を使って、null 値を適切に処理してください- 大規模な環境では、リージョンとアカウントのフィルターを組み合わせてください
- 一意なリソース数には
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 使用状況を監視する場合
- Auto Scaling グループのサイズを決定する場合
次の場合は security-compliance.md を読み込みます:
- セキュリティ監査を実施する場合
- 暗号化の状態を確認する場合
- IAM ロールを分析する場合
- パブリックリソースを見つける場合
次の場合は resource-ownership.md を読み込みます:
- チャージバックを導入する場合
- リソースの所有者を追跡する場合
- チーム別にコストを割り当てる場合
- 複数アカウントの環境を管理する場合
次の場合は events.md を読み込みます:
- 問題の発生前または発生中に何が変わったかを調査する場合
- 最近の CloudFormation スタックのデプロイを確認する場合
- AWS Auto Scaling のアクティビティ(スケールイン/スケールアウト)を確認する場合
- リソースに影響する AWS Health サービスイベントを確認する場合
次の場合は workload-detection.md を読み込みます:
- EC2 インスタンスがどのようにオーケストレーションされているか(ECS、EKS、Batch、ASG、スタンドアロン)を特定する場合
- ワークロードパターンに応じた解決手順をたどる場合
- インスタンス障害の影響範囲を把握する場合
参考資料
- vpc-networking-security.md - VPC インフラストラクチャ、セキュリティグループ、ネットワーク接続
- database-monitoring.md - RDS、DynamoDB、ElastiCache、Redshift のモニタリング
- serverless-containers.md - Lambda、ECS、EKS、App Runner のワークロード
- load-balancing-api.md - ロードバランサー、API Gateway、CloudFront
- messaging-event-streaming.md - SQS、SNS、EventBridge、Kinesis、MSK
- resource-management.md - リソースのインベントリとライフサイクル管理
- cost-optimization.md - コスト削減と支出の最適化
- capacity-planning.md - キャパシティ分析と成長計画
- security-compliance.md - セキュリティ設定とコンプライアンスのモニタリング
- resource-ownership.md - コスト配分と所有者の追跡
- events.md - 問題のタイムライン分析に使用する AWS AutoScaling、Health、CloudFormation のイベント
- workload-detection.md - EC2 インスタンスのオーケストレーション方法を特定します(LB、ASG、ECS、EKS、Batch)