阿里云云监控提供强大的资源监控功能,您可以通过云监控实时监控抢占式实例的中断事件,并在发生事件报警时通过您指定的报警方式接收到抢占式实例中断事件。
背景信息
抢占式实例具有被中断的风险,实例在完全中断的前5分钟会触发中断事件。如果您的业务对实例中断敏感,则需要注意及时接收抢占式实例的中断事件,并对实例进行处理。本文主要提供了基于消息服务MNS或函数计算接收中断事件的最佳实践。
除本文提供的接收抢占式实例中断事件最佳实践外,您也可以通过阿里云OpenAPI接收抢占式实例的中断事件。具体操作,请参见查询抢占式实例中断事件。
方式一:通过消息服务MNS接收中断事件
- 通过消息服务MNS创建一个队列。
- 通过云监控创建事件报警。
具体操作,请参见
创建系统事件报警规则。本教程中,需要完成以下配置:
- 报警规则名称:自定义名称。例如:抢占式实例中断事件报警。
- 产品类型:选择云服务器ECS。
- 事件类型:选择状态通知。
- 事件等级:选择警告。
- 事件名称:选择抢占式实例中断通知。
- 资源范围:保持默认配置。
- 报警方式:您需要根据实际情况,选择适用于您业务的报警方式。例如,选择消息服务队列并配置已创建的队列信息。
成功创建后,您可以在报警规则页签,查看已创建的规则。
- 在抢占式实例中断事件的报警规则的操作列,单击调试。
- 在创建事件调试界面,修改JSON文件,然后单击确定。
您需要将JSON文件中资源相关的信息替换为待模拟中断事件的抢占式实例的信息。JSON文件内容如下所示。其中:
- 阿里云账号UID变量需要替换为当前登录的阿里云账号UID。
- <resource-id>以及i-abcdef两个变量需要替换为抢占式实例的实例ID。
- <地域ID>变量需要替换为抢占式实例所属的地域ID。
{
"product": "ECS",
"resourceId": "acs:ecs:cn-shanghai:阿里云账号UID:instance/<resource-id>",
"level": "WARN",
"instanceName": "instanceName",
"regionId": "<地域ID>",
"groupId": "0",
"name": "Instance:PreemptibleInstanceInterruption",
"content": {
"instanceId": "i-abcdef",
"action": "delete"
},
"status": "Normal"
}
成功发起调试后,系统将根据您设置的报警方式推送报警信息。
- 通过消息服务MNS接收中断事件。
方式二:通过函数计算接收中断事件
- 创建函数计算服务。
- 创建函数。
具体操作,请参见
创建函数。
本教程中,需要完成以下配置:
- 可选:名称:自定义函数的名称。例如:testSpotInstance。
- 请求处理程序类型:选择处理事件请求。
- 运行环境:选择Python 2.7。
- 内存规格:设置函数执行内存为512 MB。
当您成功创建函数后,页面会跳转至该函数详情页面的函数代码页签。
- 配置函数代码。
- 在IDE开发环境中,找到并单击默认存在的index.py文件。
- 将index.py文件内容替换为以下代码,然后单击部署代码。
代码中的变量说明如下:
- 阿里云账号UID变量需要替换为当前登录的阿里云账号UID。
- <resource-id>以及i-abcdef两个变量需要替换为抢占式实例的实例ID。
- <地域ID>变量需要替换为抢占式实例所属的地域ID。
# -*- coding: utf-8 -*-
import logging
import json, random, string, time
LOGGER = logging.getLogger()
clt = None
def handler(event, context):
'''
{
"product": "ECS",
"resourceId": "acs:ecs:cn-shanghai:阿里云账号UID:instance/<resource-id>",
"level": "WARN",
"instanceName": "instanceName",
"regionId": "<地域ID>",
"groupId": "0",
"name": "Instance:PreemptibleInstanceInterruption",
"content": {
"instanceId": "i-abcdef",
"action": "delete"
},
"status": "Normal"
}
'''
evt = json.loads(event)
content = evt.get("content");
regionId = evt.get("regionId");
instanceId = content.get("instanceId");
LOGGER.info( regionId + " " + instanceId + " termination ongoing");
- 单击测试函数右侧的下拉列表,然后单击配置测试参数。
- 在配置测试参数对话框,完成以下配置并单击确定。
- 事件模板:保持默认配置。
- 事件名称:自定义名称。例如:抢占式实例中断事件。
- 文本框:将默认信息替换为以下代码,其中的变量信息需要与已配置的index.py文件内的变量信息保持一致。
{
"product": "ECS",
"resourceId": "acs:ecs:cn-shanghai:阿里云账号UID:instance/<resource-id>",
"level": "WARN",
"instanceName": "instanceName",
"regionId": "<地域ID>",
"groupId": "0",
"name": "Instance:PreemptibleInstanceInterruption",
"content": {
"instanceId": "i-abcdef",
"action": "delete"
},
"status": "Normal"
}
- 在函数代码页签,单击测试函数。
您可以通过测试函数功能,查看函数代码的示例输出值。例如,本示例中,输出结果如下图所示,其中输出了触发中断事件的抢占式实例所属地域以及实例ID信息。

- 测试无问题后,通过云监控创建事件报警。
具体操作,请参见
创建系统事件报警规则。本教程中,需要完成以下配置:
- 报警规则名称:自定义名称。例如:抢占式实例中断事件报警。
- 产品类型:选择云服务器ECS。
- 事件类型:选择状态通知。
- 事件等级:选择警告。
- 事件名称:选择抢占式实例中断通知。
- 资源范围:保持默认配置。
- 报警方式:您需要根据实际情况,选择适用于您业务的报警方式。例如,选择函数计算并配置已创建的函数计算服务信息。
成功创建后,您可以在报警规则页签,查看已创建的规则。
- 在抢占式实例中断事件的报警规则的操作列,单击调试。
- 在创建事件调试界面,修改JSON文件,然后单击确定。
您需要将JSON文件中资源相关的信息替换为待模拟中断事件的抢占式实例的信息。JSON文件内容如下所示。其中:
- 阿里云账号UID变量需要替换为当前登录的阿里云账号UID。
- <resource-id>以及i-abcdef两个变量需要替换为抢占式实例的实例ID。
- <地域ID>变量需要替换为抢占式实例所属的地域ID。
{
"product": "ECS",
"resourceId": "acs:ecs:cn-shanghai:阿里云账号UID:instance/<resource-id>",
"level": "WARN",
"instanceName": "instanceName",
"regionId": "<地域ID>",
"groupId": "0",
"name": "Instance:PreemptibleInstanceInterruption",
"content": {
"instanceId": "i-abcdef",
"action": "delete"
},
"status": "Normal"
}
成功发起调试后,系统将根据您设置的报警方式推送报警信息。