Community研究與資料分析github.com

AWS 雲端基礎架構(基於 Dynatrace)

利用 Dynatrace Smartscape 和 DQL 監控及分析 AWS 資源,協助最佳化成本、管理安全並規劃容量。

AWS 雲端基礎架構(基於 Dynatrace) 是什麼?

此技能讓 AI 代理能透過 Dynatrace Smartscape 自動發現模型與 DQL 查詢語言,全面操作 AWS 雲端基礎架構。它涵蓋超過 25 種 AWS 資源類型(如 EC2、RDS、Lambda、VPC、S3),並支援帳戶、區域、標籤及常見欄位(aws.account.id、aws.region、aws.arn)的篩選。技能內建 12 種常見工作流程,包括資源清單、網路分析(VPC 與子網)、資料庫監控(Multi-AZ)、無伺服器函數、成本最佳化(未掛載 EBS 磁碟)、安全合規(公開資料庫)、容量規劃(子網 IP 利用率)及問題排查(負載平衡器對應)。DQL 查詢模板直接內嵌於技能定義中,可用於資源探索、關係遍歷(使用 is_attached_to、uses、runs_on 等關係類型)以及與 EKS、ECS 的工作負載整合。此技能適用於 Claude Code、Codex 及 Cursor 等 AI 代理平台,能將 AWS 維運任務從被動監控轉變為主動式自動化管理。

相容平台~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 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

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 Resource Name
  • 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 - 垂直關係(例如執行個體在可用區域上執行)
  • 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

對於這些指標,使用 timeseries 而非 fetch。依 dt.smartscape_source.id 分組以按實體拆分。

→ 請參閱 references/metrics-performance.md 以獲取按服務分類的完整指標目錄及 DQL 查詢範本。


關鍵工作流程

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. 始終使用 JSON 剖析器剖析 aws.object: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 指標可作為 Dynatrace 指標使用,使用 cloud.aws.* 命名慣例(請參閱 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 使用量
  • 調整執行個體大小

相關技能