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 Nameaws.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} |
最佳實務
查詢最佳化
- 及早依帳戶和區域進行篩選
- 使用特定的實體類型(盡量避免使用
"AWS_*"萬用字元) - 使用
| limit N限制探索結果 - 在存取巢狀欄位前使用
isNotNull()檢查
設定剖析
- 始終使用 JSON 剖析器剖析
aws.object:parse aws.object, "JSON:awsjson" - 使用一致的欄位命名:
fieldsAdd configField = awsjson[configuration][field] - 剖析後檢查空值
- 對複雜的巢狀物件使用
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 指標可作為 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 使用量
- 調整執行個體大小