AWS ALB 健康检查怎么配置?目标组、监听器与故障排查

让健康端点真实反映服务能力,并按 reason code 定位异常

讲解 AWS ALB 目标组健康检查的路径、端口、成功码、阈值、目标状态、排障顺序和 fail-open 边界。

AWS Application Load Balancer 通过目标组健康检查决定哪些目标接收流量。检查路径必须代表应用是否具备服务能力,而不是只证明 Web 进程仍在监听端口。

AWS ALB 目标组健康检查与故障隔离示意图
ALB 节点仅向启用可用区中的健康目标转发流量。

健康检查关键参数

参数作用常见问题
协议与端口决定检查入口应用实际端口不一致
路径定义检查资源重定向、鉴权或依赖过重
成功码匹配健康响应应用返回码不在范围内
超时与间隔控制检查节奏慢请求被判定超时
健康阈值决定摘除和恢复过敏或恢复过慢

设计健康检查端点

端点应快速、无需登录且响应稳定。Liveness 只判断进程是否工作,Readiness 还应判断实例是否能接收业务请求。数据库等下游依赖要谨慎纳入,避免单个依赖抖动导致全部目标被摘除。

目标不健康的排查顺序

  1. 读取目标状态与 reason code;
  2. 从目标本机请求健康路径;
  3. 确认应用监听目标组端口和正确网卡;
  4. 允许来自 ALB 安全组的流量;
  5. 检查网络 ACL、返回路径、超时和成功码;
  6. 核对目标所在可用区已为 ALB 启用。

必须知道的失效边界

AWS 官方说明,当目标组内所有已注册目标都不健康时,ALB 可能 fail open,仍将请求发送给所有目标。因此健康检查不能替代应用降级、容量保护和跨区域灾备。

发布与下线

新版本先注册少量目标并观察错误率。下线目标时等待 draining 和注销延迟完成,避免直接终止仍有连接的实例。

先读取 reason code 再修改参数

目标显示 unhealthy 时,先在 Target Groups 的 Targets 页读取状态详情,或使用 describe-target-health 查询原因。Target.ResponseCodeMismatch 表示应用返回码不在 Matcher 范围;Target.Timeout 表示在超时内没有拿到响应;Target.FailedHealthChecks 多与连接失败或响应格式异常有关;Target.NotInUse 则可能是目标组没有被监听器规则引用,或者目标所在可用区没有为 ALB 启用。

aws elbv2 describe-target-health   --target-group-arn arn:aws:elasticloadbalancing:REGION:ACCOUNT:targetgroup/NAME/ID

命令只读取状态。检查 TargetHealth.Reason 和 Description,并对应到具体目标 ID,不能因为一台正常就忽略其他目标。

如何在目标实例上复现健康检查

先确认应用监听目标组配置的端口和地址,再从实例本机请求健康路径。若应用只监听 127.0.0.1,ALB 无法通过实例私网地址访问。虚拟主机还要注意:ALB 健康检查发送的 Host 可能是目标私网 IP 与端口,Nginx 或应用如果只接受正式域名,可能返回 404。

ss -lntp
curl -i --max-time 5 http://127.0.0.1:8080/health
curl -i --max-time 5 -H 'Host: 10.0.1.25:8080' http://10.0.1.25:8080/health

将地址、端口和路径替换为真实值。响应要在超时内完成,并返回 Matcher 接受的状态码。健康接口不要执行耗时统计或调用不稳定的第三方 API。

安全组与网络应该怎样放行

目标实例安全组应允许来自 ALB 安全组、到健康检查端口的入站流量,而不是向全网开放应用端口。ALB 安全组需要具备到目标端口的出站能力。网络 ACL 同时检查请求和返回的临时端口;路由表和子网地址空间也不能阻断 ALB 节点与目标私网地址。

如果本机 curl 正常但 ALB 持续超时,使用 VPC Flow Logs、应用访问日志和安全组引用关系确认请求是否到达。日志中能看到 User-Agent ELB-HealthChecker/2.0,有请求但响应慢应继续查应用资源、线程池和下游依赖。

阈值如何避免误摘除和恢复过慢

Interval、Timeout、HealthyThreshold 和 UnhealthyThreshold 共同决定发现故障与恢复所需时间。不要只为消除告警而放大 Timeout:如果正常接口应在 100 毫秒返回,持续接近 5 秒说明应用已经退化。发布预热较慢时,可以结合 Auto Scaling 健康检查宽限期和目标注册流程,而不是让所有实例长期使用宽松阈值。

修改后观察 HealthyHostCount、UnHealthyHostCount、TargetResponseTime、HTTPCode_ELB_5XX 和 HTTPCode_Target_5XX。下线目标要等待 draining 完成,再终止实例,避免切断长连接。

相关阅读

官方资料

AWS 教程AWS CloudShell 显示账户验证中怎么办?已验证仍无法创建环境的排查2026-09-15AWS 教程AWS EBS 卷卡在 attaching 怎么排查?可用区、挂载限制与设备识别2026-09-01AWS 教程AWS CloudTrail 怎么查操作记录?Event history、Trail 与审计边界2026-08-28

加入开发者交流社区

与全球开发者、运维和工作室一起交流技术、分享经验、配置、账号与最新优惠信息

  • 云平台使用交流
  • 资源优惠信息
  • 最新教程与资讯
  • 开发者经验分享
联系 Telegram 客服
加入开发者交流社区