【问题标题】:How to debug EC2 instances where custom health checks fail如何调试自定义运行状况检查失败的 EC2 实例
【发布时间】:2017-06-13 09:51:11
【问题描述】:

我有一个使用 EC2 实现 custom health 的自动缩放组。 有时,健康检查会失败,实例会被终止和替换。

运行状况检查本身是作为在实例上运行的 shell 脚本实现的。如果检测到问题,它将通过 AWS API 通知 Auto Scaling 组:

aws autoscaling set-instance-health --instance-id $instance --health-status Unhealthy

问题只是我没有关于什么检查失败的信息,除了通知:

原因:在 2017-06-13T09:11:47Z,一个实例因用户健康检查而停止服务

调试此类问题的推荐方法是什么。有没有办法让 AWS 只停止实例而不终止它们,以便检查它们的磁盘状态?


(首先我想到了“启用终止保护”,但据我了解,这不会有什么不同,在这里。当自定义运行状况检查失败请求关闭时,自动缩放组仍将终止实例。)

【问题讨论】:

  • 您的情况是使用 ELB 健康检查的 Auto Scaling 组吗?
  • @JohnRotenstein 不,这是自定义健康检查。我有一个本地脚本正在运行,当它检测到有问题时,将通过 AWS API 通知自动缩放组(“aws autoscaling set-instance-health”)
  • @JohnRotenstein 我将更新我的问题,因此现在已涵盖此信息。

标签: amazon-web-services amazon-ec2 health-monitoring


【解决方案1】:

使用set-instance-health 命令告诉 Auto Scaling 实例运行状况不佳,需要更换。然后 Auto Scaling 将终止运行状况不佳的实例并启动一个新实例来替换它。

如果您希望对运行状况不佳的实例执行取证分析,请使用 aws autoscaling detach-instances command 将其从 Auto Scaling 组中删除:

从指定的 Auto Scaling 组中删除一个或多个实例。分离实例后,您可以独立于 Auto Scaling 组管理它们

如果您未指定减少所需容量的选项,Auto Scaling 会启动实例以替换已分离的实例。

如果有一个 Classic Load Balancer 连接到 Auto Scaling 组,则会从负载均衡器中取消注册实例。如果有目标组附加到 Auto Scaling 组,则会从目标组中注销实例。

因此,不要调用set-instance-health,而是调用detach-instances(并可选择替换它)。然后,您可以调试该实例。如果您希望将其重新投入使用,请使用aws autoscaling attach-instances

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 2016-01-05
    • 2012-09-14
    • 1970-01-01
    • 2021-09-30
    • 2016-10-11
    • 2023-01-30
    相关资源
    最近更新 更多