我创建的 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-name、port 和 $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 警报配置同步,请执行以下操作: