Community研究与数据分析github.com

AWS云基础设施

使用Dynatrace Smartscape和DQL监控和分析AWS资源。查询AWS服务、优化成本、管理安全并规划容量。

AWS云基础设施 是什么?

此技能为构建在Dynatrace平台上的AI代理提供了一套全面的AWS云基础设施管理能力。它通过Dynatrace Smartscape自动发现并建模所有AWS资源(如EC2实例、RDS数据库、Lambda函数等),并利用DQL(Dynatrace查询语言)进行灵活的资源查询、关系遍历和配置分析。该技能支持多种关键工作流,包括资源清单、网络拓扑分析、数据库监控、安全合规检查、成本优化、负载均衡映射以及标签管理。其核心优势在于利用实体关系类型(如`uses`、`belongs_to`)实现跨资源依赖关系的深度分析,并通过`cloud.aws.*`指标命名约定与CloudWatch指标集成。适用于需要在Dynatrace环境中操作AWS资源的AI代理,例如Claude Code或Cursor等工具,支持通过渐进式加载参考文件来逐步获取详细规格。

兼容平台~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服务、优化成本、管理安全并规划容量。

何时使用此技能

当用户需要操作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}

最佳实践

查询优化

  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使用情况
  • 调整…

[部分内容已截断以进行翻译]

相关技能