Lambda报错排查

Lambda架构

  • 其核心是一个 Node.js Lambda 函数(SimpleLambda),通过 Amazon EventBridge 每分钟定时执行,在多个 AWS 服务之间执行一系列操作。
  • 该函数将 JSON 配置文件写入开启版本控制的 S3 存储桶,读取回来以验证存储是否成功
  • 然后通过持续向配置了按需计费和吞吐量限制(2 个写入请求单元,40,000 个读取请求单元)的 DynamoDB 表写入项目来执行 60 秒的压力测试。

调查CloudWatch 告警

模拟故障

我们将对dynamodb表进行更改,使 Lambda 无法向表中写入数据,从而触发告警。

导航到 DynamoDB 控制台, 选择以 ‘stress-test-table-’ 开头的表:

image-20260315134411499

  1. 在表的 Settings 选项卡中,找到 Read/write capacity 并选择 Edit
  2. 确保 Capacity Mode 选择为 On-demand。在 Maximum table throughput 部分,启用 Set maximum write request units
  3. Enter maximum write throughoutput 字段中设置值为 2
  4. 点击 Save changes
  5. 告警将在 1-2 分钟内触发。

image-20260315134538724

查看 CloudWatch 告警

  1. 在 AWS Management Console 中导航到 CloudWatch 控制台
  2. 展开左侧导航中的 Alarms 部分并选择 In alarm
  3. 找到 DynamoDBWriteThrottleAlarm 告警。

image-20260315134810780

开始调查

返回 AWS DevOps Agent Web 应用程序并进入 Incident Response。输入以下内容:

调查 DynamoDBWriteThrottleAlarm 告警

点击 Start Investigating…

image-20260315134914004

观察 AWS DevOps Agent:

  • 收集有关告警的上下文信息
  • 分析相关指标和日志
  • 识别潜在根本原因
  • 提供建议的操作

Agent 将需要几分钟时间来收集正确的数据并验证其假设

image-20260315135201630

查看调查结果

Agent 提供:

Alert Context:

  • 告警触发时间
  • 当前指标值与阈值对比
  • 历史趋势分析

Impact Analysis:

  • 受影响的服务和依赖项
  • 面向客户的影响(如有)
  • 业务指标关联

Root Cause Hypothesis:

  • 基于数据的最可能原因
  • 来自日志和指标的支持证据
  • 每个假设的置信度

Recommended Actions:

  • 立即缓解步骤
  • 长期预防措施
  • 实施指导

生成缓解计划

在调查中导航到 Root Cause 选项卡, 点击 Generate Mitigation Plan, 调查中出现新的 Mitigation Plan 选项卡

image-20260315135545939

大约一分钟后,缓解计划将会出现, 按照缓解计划的说明来修复事件

在 AWS Console 中,点击右下角的 Cloudshell 来执行缓解说明中建议的任何 CLI 命令:

image-20260315135843211

预防

AWS DevOps Agent 可以评估最近的事件以识别改进机会,从而防止未来事件的发生并减少平均检测时间(MTTD)和平均恢复时间(MTTR)。运行可能需要一些时间,所以我们现在启动它,稍后再查看结果。

在 AWS DevOps Agent Web 应用程序中导航到 Prevention 页面,点击 Run Now

image-20260315135711364

等几分钟后生成结果,devops agent建议不要让其他用户在控制台更新capacity, 并把相应的权限给禁掉:

image-20260315140241238