部署应用的故障排查

在 AWS 上部署应用

Dunieski Otano

Amazon Web Services Solutions Architect

任务超时

  • 函数偶发失败
  • 日志显示 "Task timed out"
  • 签名指向真实原因

秒表与一行错误日志,显示一个超时的 Lambda 任务

在 AWS 上部署应用

常见的 Lambda 失败签名

Lambda 失败签名 2x2 网格:超时伴随 task-timed-out 日志,限流伴随 TooManyRequestsException,拒绝访问伴随 AccessDeniedException,内存不足伴随 signal-killed 错误

  • 超时:"Task timed out after N seconds"
  • 限流:TooManyRequestsException
  • IAM 拒绝:AccessDenied,未授权
  • 内存不足:运行时中途被终止
在 AWS 上部署应用

函数失败的首次响应

  • 在更改前先读错误信息
  • 映射到已知签名
  • 超时场景检查下游调用时延
  • 一次只改一处,然后复测

故障排查决策循环:阅读错误信息、匹配已知签名、检查下游时延、改一处后复测

在 AWS 上部署应用

CloudWatch Logs Insights

Logs Insights 查询用 filter 缩小范围,用 stats 聚合。如下统计每分钟错误数:

fields @timestamp, @message
| filter level = "ERROR"
| stats count() as errors by bin(1m)
| sort errors desc
在 AWS 上部署应用

双向调试集成故障

  • 失败常发生在服务之间
  • 同时查看调用方和被调方日志
  • 用请求 ID或跟踪 ID 对齐
  • 它们之间的间隙暴露故障点

按请求 ID 将调用方与被调方日志并排对齐,中间的空档标注为集成断点,即请求停止的位置

在 AWS 上部署应用

健康检查与就绪探针

负载均衡器将流量路由到带绿色对勾的健康目标,连续健康检查失败的目标被移出轮转

  • 健康检查:实例是否存活并可服务?
  • 负载均衡器只路由到健康目标
  • 就绪检查:是否已可接收流量?
  • 检查失败会将目标移出轮转
在 AWS 上部署应用

排障手册

  • 阅读错误并匹配签名
  • 用 Logs Insights 查询日志,界定范围
  • 用请求或跟踪 ID 关联双方
  • 改一处并验证

四步排障手册:阅读错误并匹配签名,用 Insights 查询日志界定范围,用跟踪 ID 关联双方,改一处并验证

在 AWS 上部署应用

让我们一起练习吧!

在 AWS 上部署应用

Preparing Video For Download...