mcpField
D
dt-obs-aws

dt-obs-aws

github.com/dynatrace云与 DevOps1692.5k 次安装今天更新
代码仓库

关于 dt-obs-aws

dt-obs-aws 是使用 Dynatrace Smartscape 和 DQL 分析 AWS 基础设施的技能,适用于管理云资源和排查相关问题的人员。内容涵盖资源发现、拓扑、成本、安全与容量分析,并通过参考资料细化不同任务。

主要功能

  1. 01发现并筛选 AWS 资源
  2. 02分析 VPC 与资源关系
  3. 03查询数据库、容器和无服务器资源
  4. 04检查成本、安全与合规情况
  5. 05分析 CloudWatch 指标和事件

适用场景

  1. 01盘点指定区域的 EC2 实例
  2. 02查找未挂载的 EBS 卷
  3. 03识别可公开访问的数据库
  4. 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.md
cost-optimization.md
database-monitoring.md
events.md
load-balancing-api.md
messaging-event-streaming.md
metrics-performance.md
resource-management.md
resource-ownership.md
security-compliance.md
serverless-containers.md
vpc-networking-security.md
workload-detection.md

详细介绍

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 函数查询。Dynatrace Smartscape 会自动发现并建模所有 AWS 实体。

计算: 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 的业务事件(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] 访问遍历历史记录
  • 复杂的拓扑可能需要多次 traverse 操作
一般提示
  • 使用 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 使用情况
  • 确定 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 或独立运行)
  • 遵循取决于工作负载模式的解决路径
  • 了解实例故障的影响范围

参考资料


评论

支持 Markdown