阿里云ECS在已有的系统事件的基础上,通过云监控新发布了状态变化类事件和抢占型实例的中断通知事件。利用这些新发布的事件,客户可以将ECS的完整生命周期实时的同步到自己的日志里或者数据库里,满足查询和审计的需要,或者直接触发函数计算进行一些自动化的运维操作。
关于ECS系统事件,请参阅文章
让运维更高效:关于ECS系统事件https://www.atatech.org/articles/129235?msgid=2650066#0 ECS实例状态变化事件
每当ECS实例的状态发生变化的时候,都会触发一条ECS实例状态变化事件。这种变化包括用户在控制台/OpenAPI/SDK操作导致的变化,也包括弹性伸缩或欠费等原因而自动触发的,还包括因为系统异常而触发的变化。
比如,当一个停止中的ECS实例被启动的时候,会触发一个“启动中”的事件。事件的格式遵循已有的云监控系统事件的格式,事件头会包含时间和唯一ID等信息,事件的完整格式如下:
{
"status": "Normal",
"ver": "1.0",
"content": {
"resourceId": "i-xxxxxxxxxx",
"state": "Starting",
"resourceType": "ALIYUN::ECS::Instance"
},
"id": "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx",
"product": "ECS",
"groupId": [
],
"resourceId": "acs:ecs:cn-xxxx:xxxxxxx:instance/i-xxxxxxxxxx",
"level": "INFO",
"instanceName": "",
"name": "Instance:StateChange",
"userId": "xxxxxxx",
"eventTime": "20190130T112734.114+0800",
"regionId": "cn-xxxx"
}
ECS实例状态变化通知事件支持以下六种状态,详见
链接。
状态名 | 控制台显示状态 |
Pending | 无(实例创建后,在进入运行中之前的状态) |
Starting | 启动中 |
Running | 运行中 |
Stopping | 停止中 |
Stopped | 已停止/已过期/即将过期/已锁定/欠费回收中/等待释放 |
Deleted | 无(实例已经被删除) |
https://www.atatech.org/articles/129235?msgid=2650066#1 抢占式实例中断通知
抢占式实例因为资源供需关系发生变化等原因,存在被自动释放的可能。在释放前5分钟左右,会触发抢占式实例中断通知,您可以在收到该事件的时候为抢占式实例的释放提前做准备。
抢占式实例中断通知的事件格式与状态变化事件格式除了name和content字段外,其他格式相同。
{
"product": "ECS",
"resourceId": "acs:ecs:cn-shanghai:xxxxxxx:instance/i-abcdef",
"level": "WARN",
"instanceName": "instanceName",
"regionId": "cn-hangzhou",
"name": "Instance:PreemptibleInstanceInterruption",
"content": {
"instanceId": "i-abcdef",
"action": "delete"
},
"status": "Normal",
"eventTime": "20190130T112768.222+0800"
}
导致抢占式实例进入待回收状态的原因,包括市场价格高于您的出价或者资源供需关系发生变化等,详见
https://www.atatech.org/articles/129235?msgid=2650066#2 云监控控制台使用新增事件
登陆云监控控制台,进入『事件监控』->『报警规则』->『系统事件』tab,点击『创建事件报警』按钮。
在创建/修改事件报警的对话框里,按以下内容配置事件筛选规则:
事件类型选择『系统事件』
产品类型选择『云服务器ECS』
二级事件类型选择“Status Notification”。
事件等级选择『全部级别』
事件名称选择“实例状态改变通知”或者“抢占式实例中断通知”,可以多选。
在报警方式里面,你可以配置短信/邮件/钉钉通知,或者将该类事件转发给消息队列,函数计算,或者回调某个URL。
https://www.atatech.org/articles/129235?msgid=2650066#3 新增事件的使用场景
Event的真正价值,在于用Event Driven的方式去触发自动化的业务逻辑,从而解放人力,甚至有可能基于Event诞生新的云产品。在此,我们给出三个典型的自动化场景。
https://www.atatech.org/articles/129235?msgid=2650066#4 场景1: Auto-Start ECS
如果你的ECS是需要一直保持开机状态来提供某种服务的,那么不论任何原因的关机都是一种异常。您可以考虑消费ECS的状态改变通知,当收到stopped的通知的时候,自动对ECS执行一个启动的命令。
https://www.atatech.org/articles/129235?msgid=2650066#5 场景2: ECS创建完成后的初始化
比如,当ECS创建完成后,你可能需要在ECS上自动创建用户账户或者执行某个脚本。您可以考虑消费ECS的状态改变通知,当收到第一次running事件后,通过云助手执行一个脚本。
https://www.atatech.org/articles/129235?msgid=2650066#6 场景3: ECS抢占式实例释放前自动从SLB后端服务器中移出
如果您的SLB负载均衡服务器后配置了多台抢占式实例作为后端服务器,又不想因为抢占式实例的突然释放而影响业务。那么,您可以考虑接收ECS的抢占式实例的中断通知。在抢占式实例被释放前5分钟左右,您将收到抢占式实例中断通知,此时您可以将该抢占式实例后端服务器从SLB中移出,并创建一个新的抢占式实例作为后端服务器加入SLB。
更详细的最佳实践文档以及示例代码,请参阅
ECS状态变化事件的自动化运维最佳实践