【问题标题】:AWS Elastic Beanstalk Sporadically Failing Health ChecksAWS Elastic Beanstalk 运行状况检查偶尔失败
【发布时间】:2018-11-02 15:21:43
【问题描述】:

有没有其他人在他们的弹性 beanstalk 应用程序上看到零星的健康检查失败?

我正在使用 ELB 来提供 GraphQL API。我正在单个 t2.micro 实例上运行 docker 配置,监控间隔设置为 1 分钟。它设置为在重负载时最多扩展到 4 个实例。数据存储使用 Amazon RDS(PostgreSQL,非公开,db.t2.micro)。

以下是我的 ELB 事件页面的最新值:

2018-05-23 08:24:11 UTC-0600    INFO
Environment health has transitioned from Severe to Ok.

2018-05-23 08:23:11 UTC-0600    WARN
Environment health has transitioned from Ok to Severe. None of the instances are sending data.

2018-05-21 06:28:13 UTC-0600    INFO
Environment health has transitioned from Severe to Ok.

2018-05-21 06:27:13 UTC-0600    WARN
Environment health has transitioned from Ok to Severe. 85.7 % of the requests are erroring with HTTP 4xx.

2018-05-18 14:10:51 UTC-0600    INFO
Environment health has transitioned from Severe to Ok.

自几个月前部署我的应用程序以来,我偶尔会看到 HTTP 4XX 警告。我以前从未见过None of the instances are sending data 警告。我在我的应用程序日志中没有看到任何匹配的 4XX 错误。

不确定这是否正常,或者我是否配置错误。 Amazon Compute 在其服务承诺部分here 中宣传 99.99% 的 SLA 级别。 我预计会看到以下范围内的停机时间:

  • 每天:8.6s
  • 每周:1m 0.5s
  • 每月:4m 23.0s
  • 年:52m 35.7s

我在外部运行状况检查中没有看到任何错误(我使用 UptimeRobot,它每五分钟轮询一次 API 的运行状况端点并搜索关键字)。我在我的应用程序日志中没有看到任何错误。

如果其他人看到闪烁的健康状况并找到了缓解这种情况的方法(或者至少是为什么会发生这种情况),我将不胜感激。感谢阅读!

【问题讨论】:

    标签: performance amazon-web-services web-applications amazon-elastic-beanstalk


    【解决方案1】:

    我经常看到低流量实例(例如测试环境)的一分钟故障。每次我调查时,4XX 错误都来自端口扫描程序或其他一些恶意请求。由于非 prod 实例上的流量很低,触发“85.7 % 的请求”并不需要太多 - 例如,这可能少至七分之六的请求。

    如果 4XX 错误未显示在您的应用程序日志中,您可能会在 ELB 日志中看到这些错误。 ELB 日志默认是禁用的,但是你可以打开它并登录到 S3。

    最简单的方法是通过将安全组中的 IP 列入白名单来限制对应用程序的访问。但是,如果您的应用程序需要面向公众,那么您有几个选项可以解决这个问题:

    1. 如果请求来自单个 IP 地址,您可以使用 VPC 中的 ACL 阻止它。
    2. 如果请求来自多个 IP 地址,如果存在任何一致的模式(例如他们尝试访问的 URI、关联的用户代理等),您可能能够阻止它们。但是,您需要启用 WAF。
    3. 请忽略警告 - 它们很可能是无害的,一旦您有更多的流量,它们就会与其余的噪音融为一体。

    【讨论】:

    • 谢谢你的回答,布赖恩。可能我当时不明白健康检查。健康检查/监控不是内部评估,与外部流量无关吗?
    • ELB 本身会执行心跳式的健康检查,其中会定期 ping 特定的 URI 或端口。但是,ElasticBeanstalk 使用多个因素来确定环境运行状况。其中一个因素是不良 (4XX/5XX) 请求与良好 (2XX) 请求的百分比。
    • 好的,有道理。谢谢!
    【解决方案2】:

    虽然 Brian 关于原因是正确的(我每天都从端口扫描程序中看到这一点)并列出了一些合理的选项,但请注意 Elastic Beanstalk 现在有一个相对较新的规则,可以忽略 4xx 错误作为另一个选项,https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/health-enhanced-rules.html

    需要注意的是,您可能会因配置问题或应用程序错误而错过 4xx 错误。

    【讨论】:

      猜你喜欢
      • 2015-11-16
      • 2018-11-07
      • 2016-06-14
      • 2020-11-10
      • 1970-01-01
      • 2021-12-26
      • 2022-01-19
      • 2021-01-16
      • 2013-11-13
      相关资源
      最近更新 更多