如何排查 Route 53 运行状况检查不正常问题?

上次更新日期:2022 年 12 月 13 日

我创建的 Amazon Route 53 运行状况检查报告为不正常。如何排查并解决相关问题?

解决方法

注意:如果您在运行 AWS 命令行界面(AWS CLI)命令时遇到错误,请确保您使用的是最新版本的 AWS CLI

首先,您必须通过 AWS 管理控制台确定最近一次运行状况检查失败的原因。或者,也可以在 AWS CLI 中使用 get-health-check-last-failure-reason 命令。然后,在您确定运行状况检查的类型以后,完成对应的问题排查步骤以找出并解决问题。

注意:无论是哪种运行状况检查类型,都请务必检查 Invert health check status(反转运行状况检查状态)选项的状态。若此选项被设置为 true,则当运行状况检查程序将运行状况检查标记为正常时,Route 53 会视运行状况检查为不正常。

排查监控端点的运行状况检查问题

原因:此问题会显示“The health checker could not establish a connection within the timeout limit.”错误消息。此错误由运行状况检查程序尝试与配置的终端节点建立连接时的超时导致。根据运行状况检查协议(TCP、HTTP 或 HTTPS),建立连接的最短时间各不相同:

  • 对于 TCP 运行状况检查,运行状况检查程序和终端节点之间的 TCP 连接必须在十秒内建立。
  • 对于 HTTP 和 HTTPS 运行状况检查,运行状况检查程序和终端节点之间的 TCP 连接必须在四秒内建立。在建立连接以后,终端节点必须在两秒内以 2xx 或 3xx HTTP 状态代码进行响应。有关更多信息,请参阅 Amazon Route 53 如何确定运行状况检查是否运行良好

解决方案:

1.    在运行状况检查配置中,记下端点的域名IP 地址

2.    访问端点。确认防火墙或服务器允许从 Route 53 公有 IP 地址为运行状况检查配置中开启的区域建立连接。请参阅 IP 范围并搜索 service: ROUTE53_HEALTHCHECKS。对于托管在 AWS 上的端点资源,配置安全组和网络访问控制列表以允许 Route 53 运行状况检查程序的 IP 地址。

3.    使用以下工具来测试通过 Internet 与配置终端节点的连接。确保以您的对应值取代命令中的占位符。

TCP 测试:

$ telnet <domain name / IP address> <port>

HTTP/HTTPS 测试:

$ curl -Ik -w "HTTPCode=%{http_code} TotalTime=%{time_total}\n" <http/https>://<domain-name/ip address>:<port>/<path> -so /dev/null

将前面测试的输出与运行状况检查的超时值进行比较。然后,确认您的应用程序在相应的时间内做出响应。

例如,如果您运行以下测试:

curl -Ik -w "HTTPCode=%{http_code} TotalTime=%{time_total}\n" https://example.com -so /dev/null

则输出为:

HTTPCode=200 TotalTime=0.001963

在此示例中,获得 HTTP 状态代码 200 响应的总时间为 0.001963 秒。

对于 HTTP 连接,连接时间必须在 4 秒内。端点必须在连接后的 2 秒内以 HTTP 状态代码进行响应。总时间为 6 秒。值高于 6 秒表示端点响应速度缓慢,运行状况检查失败。在这些情况下,请检查您的端点以确保其在超时期限内做出响应。

如果测试命令的输出显示的 HTTPCode 不是 200,请检查以下配置:

  • 防火墙规则
  • 安全组
  • 网络访问控制列表

检查这些配置时,请确认您的端点允许来自 Route 53 公有 IP 地址的连接。

4.    使用运行状况检查配置中的Latency graph(延迟图表)选项(如果开启)在指标图表中检查以下项:

  • TCP 连接时间
  • 第一个字节的时间
  • 完成 SSL 握手的时间

有关更多信息,请参阅监控运行状况检查程序与终端节点之间的延迟

注意:

  • 如果未开启 Latency graph(延迟图表),则无法编辑现有运行状况检查。您必须改为创建一个新的运行状况检查
  • 如果您正在监控的端点的弹性 IP 地址释放或更新,则运行状况检查可能会失败。

原因:此问题会显示“SSL alert handshake_failure”错误消息。

解决方案:

此错误表示与端点的 SSL 或 TLS 协商失败。当您开启 SNI(仅限 HTTPS)时,Route 53 会在 TLS 协商期间将“client_hello”消息中的主机名发送到端点。此操作允许端点使用适用的 SSL 或 TLS 证书响应 HTTPS 请求。

如果您监控的主机名不是端点 SSL 或 TLS 证书中公用名称的一部分,则会收到“SSL alert handshake_failure”错误。

注意:要开启 SNI,受监控的端点必须支持 SNI。

排查具有字符串匹配条件的运行状况检查问题

原因:此问题会在终端节点服务器返回“200 OK”,但 Route 53 将运行状况检查标记为不正常时发生。运行状况检查程序必须在四秒内与终端节点建立 TCP 连接。运行状况检查程序必须在接下来的两秒内收到 HTTP 状态代码 2xx 或 3xx。然后,在接下来的两秒内,配置的字符串必须显示于首个 5120 字节的响应正文中。如果在首个 5120 字节中未出现该字符串,Route 53 会将运行状况检查标记为不正常。

解决方案:

要验证字符串是否完全显示在首个 5120 字节的响应正文中,请使用以下命令。确保将“$search-string”替换为您的字符串值。

$ curl -sL <http/https>://<domain-name>:<port> | head -c 5120 | grep $search-string

排查监控 CloudWatch 警报的运行状况检查问题

原因:Route 53 不会等待 Amazon CloudWatch 警报进入 ALARM 状态。Route 53 监控指标数据流,而不是 CloudWatch 警报的状态。

解决方案:

1.    验证处于 INSUFFICIENT DATA 状态的运行状况检查的配置。若指标数据流提供的信息不足,无法确定警报的状态,则运行状况检查状态将取决于 InsufficientDataHealthStatus 配置。InsufficientDataHealthStatus 设置的状态选项有 healthyunhealthylast known status

2.    更新 CloudWatch 警报的配置时,新设置不会自动显示在关联的运行状况检查中。要将运行状况检查配置与更新的 CloudWatch 警报配置同步,请执行以下操作:

  • 在 Route 53 控制台中,选择 Health Checks (运行状况检查)
  • 选择运行状况检查,然后选择 Synchronize configuration (同步配置)

这篇文章对您有帮助吗?


您是否需要账单或技术支持?