如何解决不正常的 Route 53 运行状况检查?

2 分钟阅读
0

我创建的 Amazon Route 53 运行状况检查报告为不正常。

解决方法

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

首先,](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/health-checks-view-status.html)使用 [AWS 管理控制台确定上次运行状况检查失败的原因。或者,在 AWS CLI 中使用 get-health-check-last-failure-reason 命令。

然后,完成下一节中对应的故障排除步骤,以识别和修复问题。

注意:无论运行状况检查类型如何,都要检查反转运行状况检查状态选项的状态。如果此选项设置为 true,则 Route 53 会认为运行状况检查不正常,即使它被标记为运行状况正常。

对监控端点的运行状况检查进行故障排除

错误: 运行状况检查程序无法在超时限制内建立连接

如果运行状况检查程序尝试连接配置的端点超时,就会出现上述错误。建立连接的最短时间如下:

  • 对于 TCP 运行状况检查,运行状况检查程序与端点之间的 TCP 连接必须在十秒内建立。
  • 对于 HTTP 和 HTTPS 运行状况检查,运行状况检查程序与端点之间的 TCP 连接必须在四秒内建立。端点必须在建立连接后的两秒内使用 2xx 或 3xx HTTP 状态代码进行响应。

有关详细信息,请参阅 Amazon Route 53 如何确定运行状况检查是否正常

为避免超时错误,请完成以下步骤:

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

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

3.    使用以下工具通过互联网测试与配置的端点的连接。替换以下命令中的占位符。在以下示例命令中,使用您的用例值替换变量。

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 连接,连接时间必须在四秒之内。端点必须在连接后的两秒内使用 HTTP 状态代码进行响应。总时间为六秒。大于六秒的值表示端点响应速度慢且运行状况检查失败。在这种情况下,请检查您的端点以确保它在超时时长内做出响应。

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

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

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

4.    如果已启用运行状况检查配置中的延迟图表选项,请使用该选项检查指标图表中的以下内容:

  • TCP 连接时间
  • 首字节时间
  • 完成 SSL 握手的时间

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

注意:

  • 如果延迟图表未启用,则您无法编辑现有的运行状况检查。而是必须创建新的运行状况检查
  • 如果您正在监控的端点的弹性 IP 地址已发布或更新,则运行状况检查可能会失败。

错误: SSL 提醒 handshake_failure

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

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

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

使用字符串匹配条件对运行状况检查进行故障排除

端点服务器返回“200 正常”,但 Route 53 将运行状况检查标记为不正常

运行状况检查程序必须在四秒内与端点建立 TCP 连接。然后,运行状况检查程序必须在接下来的两秒内收到 2xx 或 3xx 的 HTTP 状态代码。然后,配置的字符串必须在接下来的两秒内显示在响应正文的前 5,120 个字节中。如果前 5,120 个字节中不存在该字符串,则 Route 53 将运行状况检查标记为不正常。

要验证该字符串是否显示在响应正文的前 5,120 字节中,请使用以下命令。使用您的值替换 domain-nameport$search-string

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

对监控 CloudWatch 警报的运行状况检查进行故障排除

Route 53 不会等待 Amazon CloudWatch 警报进入“警报”状态。

当 Route 53 监控指标数据流而不是 CloudWatch 警报状态时,就会出现上述情况。

要解决此错误,请完成以下步骤:

1.    验证处于数据不足状态的运行状况检查的配置。如果指标数据流提供的信息不足以确定警报的状态,则运行状况检查状态取决于 InsufficientDataHealthStatus 配置。InsufficientDataHealthStatus 设置的状态选项为正常不正常上次已知状态

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

  • Route 53 控制台中,选择运行状况检查
  • 选择运行状况检查,然后选择同步配置
AWS 官方
AWS 官方已更新 1 年前