背景
无论你是在Paas系统还是SaaS系统中,事件通知都是一个比较重要的模块,通过事件通知,可以及时的发现系统中存在的问题。比如:系统中间件、微服务、Open Api等的健康性。稍微站得高一点,看看这个问题:时间处理模块与业务关联不是很强,完全可以抽离出来,作为统一的模块,我们可以称之为:事件中心。
建设思路
首先我们要明确下事件中心的边界及范围。建设的初期多想想总没有坏处,尤其是对于做过这类项目的。我们要总结下之前的经验和教训,这方面自下而上的思考方式就来得比较贴切。我们要明确应该怎么去做,而不是苟且的去做。

整个事件中心主要分为:事件接收、事件管理、事件通知三个主要模块,事件中心专注于事件的接收和处理。其,不包括时间的生成逻辑。这个边界一定要划分清楚。事件可以来自不同的系统或者同一系统的不同模块。
技术选型
你如果去看看各云厂商的告警中心的实现,如果你又了解Prometheus的监控框架,你会感觉很多名词是那么的熟悉。比如,告警分组、告警抑制、告警静默。传统的监控是zabbix功能也是相当强大的,随着微服务、云的发展,慢慢的出来了更加优秀的监控软件Prometheus。Prometheus中有一个优秀的模块:告警管理,提供告警的接收、处理及通知的功能。目前各云厂商或者很多小的创业公司,都是基于Prometheus的告警管理模块来做自己的监控系统。其架构如下:

实现思路
Prometheus的告警模块,功能还是比较完善的,也是比较独立的模块。基本上已经成为告警处理的标准模板。警报是由名为Alertmanager的独立工具进行管理的。Alertmanager是一个可以集群化的独立警报管理工具。但是对于告警的处理的相关配置,没有现成的api接口。那我们该怎么办呢?

事件管理模块,提供告警处理规则的界面化配置功能。通过协同模块与Prometheus的告警管理模块进行通信。协同模块接收到时间管理模块的告警处理规则yaml文件信息,将负责在AlertManager机器目录上生成yaml文件。然后调用告警管理模块的重新加载规则接口。
网友评论