AWS云基础设施 是做什么的?
使用Dynatrace Smartscape和DQL监控和分析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])
日志和业务事件上的AWS字段
源自AWS的日志(fetch logs)携带以下字段,无需探索:
aws.region,aws.account.id,aws.service,aws.log_group,aws.log_stream- 再加上标准日志字段:
content,loglevel,timestamp,k8s.*,dt.smartscape.*
源自AWS的业务事件(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分组以按实体拆分。
→ 有关按服务划分的完整指标目录及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] - 解析后检查空值
- 对复杂的嵌套对象使用
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使用情况
- 调整…
[部分内容已截断以进行翻译]