我们将使用 DevOps Agent 来调查和解决在 AWS 上运行的容器化应用程序中的故障。
已经提前部署了 AWS Retail Store Sample Application,这是一个功能完整的电子商务应用程序,允许用户浏览产品、将商品添加到购物车并完成购买。这个经过刻意过度设计的应用程序展示了微服务模式,并提供了真实的故障排查场景。
我们可以通过 Application Load Balancer URL 访问 Retail Store 应用,在浏览器中打开 URL 以探索应用:


该应用程序在 Amazon ECS with Fargate 上运行,位于具有跨多个可用区的公有和私有子网的 VPC 内。用户通过 Application Load Balancer 访问应用程序,该负载均衡器将流量路由到 UI 服务。UI 服务随后通过 AWS Cloud Map 进行服务发现,与后端微服务进行通信。
该应用程序遵循微服务架构,每个服务可独立部署并拥有自己的数据存储。
| 组件 | 语言 | 描述 | 后端 |
|---|---|---|---|
| UI | Java (Spring Boot) | 商店前端,提供网页服务 | 调用其他服务 |
| Catalog | Go | 产品目录 API | Aurora MySQL |
| Cart | Java (Spring Boot) | 购物车管理 | DynamoDB |
| Checkout | Node.js (NestJS) | 结账编排 | ElastiCache Redis |
| Orders | Java (Spring Boot) | 订单处理 | Aurora PostgreSQL + Amazon MQ |
Workshop 环境包含开箱即用的生产级可观测性配置:
CloudWatch Logs
Container Insights(增强模式)
CloudWatch Alarms(每个服务:ui、catalog、carts、checkout、orders)
ALB Alarms
CloudWatch Dashboard
ALB Access Logs
这些可观测性组件对于故障排查场景至关重要。我们将使用 CloudWatch Logs、Container Insights 指标和告警来诊断问题。
在 Cloud IDE 终端中执行以下命令以注入故障:
ecs-lab1-start

此实验将Catalog服务的任务定义修改为使用不存在的 CloudWatch 日志组。当 ECS 尝试启动新任务时,由于日志配置无效,任务将会失败。
该问题模拟了一种常见的错误配置,例如:
awslogs-create-group 选项要查看服务状态,打开 Amazon ECS 控制台 ,选择 devops-agent-workshop-ecs-cluster,然后点击 Services 选项卡并选择 catalog 服务。
检查特定任务:

注意: 注入问题后,等待 1-2 分钟,以便服务尝试任务部署并在 Events 选项卡中显示错误。
注入问题后,我们将注意到:
ResourceInitializationError 消息
在 Web App 中,点击 Incident Response, 点击 Start investigation 并输入调查:
尝试以下调查提示词:
为什么 devops-agent-workshop-ecs-cluster 中的catalog服务无法启动新task?
检查 devops-agent-workshop-ecs-cluster 中catalog服务的事件。失败的task的原因是什么?

过几分钟后,DevOps Agent定位到报错的原因:

生成Mitigation Plan后,我们可以按里面的操作来恢复环境:

这里直接回退,以进行后面的DevOps Agent实验
ecs-lab1-fix