如何找出是什么导致 AWS OpsWorks Stacks 实例停止?

2 分钟阅读
0

我的一个由 AWS OpsWorks Stacks 管理的 Amazon Elastic Compute Cloud (Amazon EC2) 实例停止了运行。如何确认是什么导致该实例停止运行?

简短描述

有两种方式可以使 OpsWorks Stacks 实例停止运行:

**重要提示:**OpsWorks Stacks 无法识别在 Amazon EC2 控制台中执行的启动、停止或重启操作。有关更多信息,请参阅手动启动、停止和重启 24/7 实例

要验证是什么导致 OpsWorks Stacks 实例停止运行,可以执行以下任一操作:

查看 AWS CloudTrail 了解同步 Amazon EC2 StopInstances API 调用情况和 OpsWorks Stacks StopInstance API 调用情况

如果同一时间段内均记录了这两个 API 调用日志,则表明该实例是在 OpsWorks Stacks 端手动停止的。如果只记录了 Amazon EC2 StopInstances API 调用日志,则表明对该实例应用了自动修复功能。

查看实例的代理日志,看看当实例停止时 OpsWorks 代理是否仍在发送其 keepalive 信号

如果在实例停止时记录有成功的 keepalive 信号日志,则表明该实例是在 OpsWorks Stacks 端手动停止的。如果 keepalive 日志丢失或在实例停止时记录了失败的信号尝试日志,则表明应用了自动修复功能。

如果是对实例应用了自动修复功能,请参阅如何阻止 AWS OpsWorks Stacks 意外重新启动正常运行的实例? 如果实例是手动停止的,请查看做出 StopInstance API 调用的 AWS Identity and Access Management (IAM) 角色。然后,确定有权访问该角色的人员并找出他们停止实例的原因。

解决方法

查看实例的 CloudTrail 日志,了解 Amazon EC2 StopInstances API 调用

1.    打开 CloudTrail console(CloudTrail 控制台)

**重要提示:**确保所选 AWS 区域与您的实例所在的区域是同一个区域。

2.    在导航窗格中,选择 Event history(事件历史记录)

3.    在 **Event history(事件历史记录)**页面的左上角,选择筛选条件下拉列表。然后,选择 Resource name(资源名称)

4.    在筛选条件下拉列表右侧的搜索文本框中,输入您的 Amazon EC2 instance ID(Amazon EC2 实例 ID)。将会显示与实例相关的所有事件的结果。

5.    在 **Event name(事件名称)**列中,查找 StopInstances

6.    在 StopInstances 事件行的 **Event time(事件时间)**列中,记下 API 调用的时间戳。在查看实例的 CloudTrail 日志以了解 OpsWorks Stacks StopInstance API 调用时,将会参考时间戳。

7.    在 **Event name(事件名称)**列中选择事件 (StopInstances) 的名称来打开事件记录。

8.    在 **Event record(事件记录)窗格中,查找“invokedBy”**值。如果实例是在 OpsWorks Stacks 端(手动或通过自动修复)停止的,那么 Amazon EC2 StopInstances API 响应会显示以下输出:

"invokedBy": "opsworks.amazonaws.com"

注意:如果是对实例应用了自动修复,则事件记录中不会有任何指标。

查看实例的 CloudTrail 日志了解 OpsWorks Stacks StopInstance API 调用情况

1.    打开 CloudTrail console(CloudTrail 控制台)

**重要提示:**确保所选 AWS 区域与您的 OpsWorks Stacks API 端点所在的区域相同。

2.    在导航窗格中,选择 Event history(事件历史记录)

3.    在 **Event history(事件历史记录)**页面的左上角,选择筛选条件下拉列表。然后,选择 Resource name(资源名称)

4.    在筛选条件下拉列表右侧的搜索文本框中,输入您的 OpsWorks Stacks instance ID(OpsWorks Stacks 实例 ID)。将会显示与实例相关的所有事件的结果。

5.    在 **Event name(事件名称)**列中,查找 StopInstance

6.    在 StopInstance 事件行的 **Event time(事件时间)**列中,确认事件的时间戳是否与 Amazon EC2 StopInstances 事件的时间戳相同。

如果在记录下 StopInstance API 调用日志的同时也记录下了 StopInstances API 调用日志,则表明该实例是在 OpsWorks Stacks 端手动停止的。

如果在记录下 StopInstances API 调用日志的同时没有记录 StopInstances API 调用日志,则表明是对该实例应用了自动修复功能。

(可选)查看实例的代理日志,看看当实例停止时 OpsWorks 代理是否仍在发送其 keepalive 信号

使用 SSH(安全外壳协议)连接到 Linux 实例,或使用 Windows 远程桌面协议 (RDP) 连接到 Windows 实例。然后,在实例的 OpsWorks 代理日志中检查日志文件 opsworks-agent.keep_alive.log

如果在实例停止时记录有成功的 keepalive 信号日志,则表明该实例是在 OpsWorks Stacks 端手动停止的。如果 keepalive 日志丢失或在实例停止时记录了失败的信号尝试日志,则表明应用了自动修复功能。

相关信息

如何在 Amazon CloudWatch Events 中设置 AWS OpsWorks Stacks 自动修复通知

如何阻止 AWS OpsWorks Stacks 意外重新启动正常运行的实例?

如何排查在停止处于“stop_failed”状态的 AWS OpsWorks Stacks 实例时出现的“内部错误”消息?


AWS 官方
AWS 官方已更新 3 年前