AWS Elastic Beanstalk 运行状况检查偶尔失败
Posted
技术标签:
【中文标题】AWS Elastic Beanstalk 运行状况检查偶尔失败【英文标题】:AWS Elastic Beanstalk Sporadically Failing Health Checks 【发布时间】: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 的运行状况端点并搜索关键字)。我在我的应用程序日志中没有看到任何错误。
如果其他人看到闪烁的健康状况并找到了缓解这种情况的方法(或者至少是为什么会发生这种情况),我将不胜感激。感谢阅读!
【问题讨论】:
【参考方案1】:我经常看到低流量实例(例如测试环境)的一分钟故障。每次我调查时,4XX 错误都来自端口扫描程序或其他一些恶意请求。由于非 prod 实例上的流量很低,触发“85.7 % 的请求”并不需要太多 - 例如,这可能少至七分之六的请求。
如果 4XX 错误未显示在您的应用程序日志中,您可能会在 ELB 日志中看到这些错误。 ELB 日志默认是禁用的,但是你可以打开它并登录到 S3。
最简单的方法是通过将安全组中的 IP 列入白名单来限制对应用程序的访问。但是,如果您的应用程序需要面向公众,那么您有几个选项可以解决这个问题:
-
如果请求来自单个 IP 地址,您可以使用 VPC 中的 ACL 阻止它。
如果请求来自多个 IP 地址,如果存在任何一致的模式(例如他们尝试访问的 URI、关联的用户代理等),您可能能够阻止它们。但是,您需要启用 WAF。
请忽略警告 - 它们很可能是无害的,一旦您有更多的流量,它们就会与其余的噪音融为一体。
【讨论】:
谢谢你的回答,布赖恩。可能我当时不明白健康检查。健康检查/监控不是内部评估,与外部流量无关吗? 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 错误。
【讨论】:
以上是关于AWS Elastic Beanstalk 运行状况检查偶尔失败的主要内容,如果未能解决你的问题,请参考以下文章
在 AWS Elastic Beanstalk 上运行节点和反应
在使用 AWS Elastic Beanstalk 创建实例时运行命令
AWS Elastic Beanstalk 运行状况检查偶尔失败
如何获取命令以从 Elastic Beanstalk 上的 Dockerfile.aws.json 运行?