AWS ECS故障排查实战:遇到问题怎么查?
引言:容器挂了怎么办?
用ECS跑应用,最怕遇到:容器起不来、服务突然中断、用户访问不了。这篇文章帮你理清排查思路,遇到问题不慌。
一、常见故障类型
ECS故障主要分几类:
容器启动失败:任务创建后一直是“Pending”或“Stopped”
健康检查失败:容器启动了,但负载均衡器认为不健康
运行时崩溃:跑着跑着突然挂了
性能问题:响应慢、CPU高、内存高
网络问题:连不上数据库、外部服务
二、排查工具准备
排查前,先熟悉这几个工具:
ECS控制台:看任务状态、事件、日志
CloudWatch Logs:看应用日志
CloudWatch Metrics:看CPU、内存指标
AWS CLI:查详细信息
三、场景一:容器启动失败
3.1 现象
任务创建后,状态一直是“Pending”,或者很快变成“Stopped”。
3.2 排查步骤
第一步:看任务事件
在ECS控制台,点击任务ID,看“事件”标签。会显示失败原因,比如:
“CannotPullContainerError”:镜像拉不下来
“ResourceInitializationError”:资源不够
“Essential container in task exited”:容器启动后马上退出
第二步:看日志
如果容器启动后退出,去CloudWatch Logs看应用日志,找启动失败的原因。常见原因:
环境变量没配置
端口被占用
依赖服务连不上
代码有bug
第三步:检查镜像
确认镜像存在,标签正确。可以手动pull试试:
bash
复制下载
docker pull 123456789012.dkr.ecr.us-east-1.amazonaws.com/my-app:latest
第四步:检查任务定义
确认配置正确:
CPU、内存够不够?
端口映射对不对?
环境变量有没有拼写错误?
启动命令写对了吗?
四、场景二:健康检查失败
4.1 现象
容器在运行,但负载均衡器一直显示“不健康”,流量不转发。
4.2 排查步骤
第一步:检查健康检查配置
在目标组里看健康检查配置:
路径对不对?比如应用健康检查端点是/health,配置成/就不行
端口对不对?容器暴露的是8080,健康检查端口也要8080
超时时间够不够?应用启动慢,健康检查等不到响应就超时了
第二步:手动测试健康检查
登录到ECS任务所在的容器(如果能进),或者用curl测试:
bash
复制下载
curl http://localhost:8080/health
看返回什么。如果返回非200,说明健康检查确实失败。
第三步:检查应用日志
看CloudWatch Logs,应用有没有启动成功,有没有报错。
第四步:检查安全组
确认负载均衡器的安全组允许访问ECS任务的安全组,端口要开放。
五、场景三:运行时崩溃
5.1 现象
容器跑了一段时间,突然挂了,自动重启。
5.2 排查步骤
第一步:看退出码
在任务事件里看退出码。常见退出码含义:
0:正常退出
137:被kill(通常是内存不足)
143:被终止
第二步:看内存监控
在CloudWatch Metrics里看任务的内存使用。如果经常达到上限,就是内存不够,任务被OOM killer杀掉。
解决方案:增加任务定义里的内存。
第三步:看应用日志
找崩溃前的日志,看有没有异常:
OutOfMemoryError
空指针异常
连接超时
第四步:检查代码
如果日志里有业务错误,那就是代码bug。修复后重新部署。
六、场景四:性能问题
6.1 现象
响应慢、CPU高、内存高。
6.2 排查步骤
第一步:看监控
在CloudWatch Metrics里看CPU、内存趋势。是持续高,还是间歇性高?
第二步:看任务数量
是不是任务数太少,不够处理当前流量?如果是,增加期望任务数,或者配置自动扩缩。
第三步:看应用日志
有没有慢查询、死锁、大量异常?如果是数据库慢,考虑加索引、加缓存。
第四步:检查配置
是不是配置太小?比如CPU只配了0.25,但应用需要0.5。升级配置试试。
七、场景五:网络问题
7.1 现象
容器能启动,但连不上数据库、外部API。
7.2 排查步骤
第一步:检查安全组
确认ECS任务安全组允许出站到目标服务。数据库安全组允许来自ECS任务安全组的入站。
第二步:检查VPC
ECS任务和数据库在同一个VPC吗?不是的话,需要通过VPC对等连接或中转网关。
第三步:测试连接
如果能进容器,用telnet测试:
bash
复制下载
telnet database-host 3306
看能不能通。
第四步:检查DNS
确认数据库地址解析正确。用nslookup或dig查。
八、快速排查清单
遇到问题时,按这个清单快速过一遍:
启动失败:
看任务事件
看CloudWatch Logs
检查镜像是否存在
检查任务定义配置
健康检查失败:
检查健康检查路径
手动curl测试
看应用日志
检查安全组
运行时崩溃:
看退出码
看内存监控
看崩溃前日志
性能问题:
看CPU、内存监控
检查任务数量
分析慢查询
网络问题:
检查安全组
telnet测试
检查DNS
九、结语
ECS故障排查不难,关键是系统化。按启动、健康检查、运行时、性能、网络这几类,一步步查。日志是最重要的线索,把日志配置好,问题就好查。平时多演练,真出问题了不慌。
如果需要更深入咨询了解可以联系全球代理上TG:jinniuge 他们在云平台领域有更专业的知识和建议,他们有国际阿里云,国际腾讯云,国际华为云,aws亚马逊,谷歌云一级代理的渠道,客服1V1服务,支持免实名、免备案、免绑卡。开通即享专属VIP优惠、充值秒到账、官网下单享双重售后支持。不懂找他们就对了。
本文由不代表本站立场,转载联系作者并注明出处。
