0%

利用AWS EventBridge 实现故障自愈

公司在aws ec2 有一些陈年老业务,这些业务比较臃肿不太方便加入到新的k8s集群,我们也没有太多精力去迁移过去。但是时不时来个僵死触发报警也是很难受。毕竟谁都不想半夜爬起来搞这个…
在此契机下研究了下故障自愈的一些事情。 发现市面上这块呼声最大的其实是蓝鲸平台,但它比较大而全,并不适合小体量公司,而大体量公司还不如自己搞。由于我们所有的业务基本都在aws上所以更倾向于采用aws自己的一些方案。
经过调研发现 cloudwatch + EventBridge 可以比较好的处理当前我们的一些问题。

当前的告警机制

首先看一下当前我们的告警以及处理方式,当实例异常通过cloudwatch进行告警,收到电话☎️或者邮件后,人工开始处理。
由于是处理通常是机械性的重启,而且经常发生在半夜,所以我们希望加入自动化手段处理这些告警。

graph LR
    Ec2 --> Cloudwatch --> 电话,邮件,钉钉 --> 人工处理

改进后的告警机制

我们将告警进行了分级,一级告警和二级告警,当触发一级告警时由 EventBridge 获取这个告警事件,匹配规则,然后进行重启实例操作,同时将处理信息反馈到钉钉。当处理完成时也在钉钉反馈信息。二级告警是在一级告警触发超过一定事件没有恢复时触发,此时需要人工干预,介时人工进行处理。

graph LR
    A[Ec2] --> B[Cloudwatch]
    B --> C[一级告警]
    C --> |正常处理|D[EventBridge]
    D --> X[钉钉通知:开始执行重启实例]
    D --> E[执行重启实例] --> Y[业务恢复通知] --> Z[完成]
    C -.->|处理超时|F[二级告警]
    F -.-> G[人工处理]
    G -.-> Y

通过这个机制将会节省很多人工干预的环节,减少了不少工作量。 另外发现了EventBridge 这个好工具,相信以后会在更多场景起到作用。