刚开始初衷是做个故障自愈的系统,后来这加加,那边加加就变成了运维系统。
前言
22年10月份的时候,我们线上系统频繁出现故障,报警不断,时不时的就需要人工处理。
-
公司对于运维方面不是很重视,加上拥抱阿里云和腾讯云,云平台只会报警,报完警就只能人工去处理问题,或者自己写个脚本处理这个问题,将脚本都分发到每台机器上去。
-
自定义的报警都是处理的特定的问题,不能很好的统一规范管理,很多报警脚本都是散落在各个机器上,很多时候都找不到脚本丢在哪里。
为了更好的统一处理云平台、prometheus触发的报警,我决定自己开发一个故障自愈的系统。云平台可以触发一个告警回调,根据每个资源的不同的回调传递参数进行区分,不同的告警项触发不同的处理方式。
1、系统的前端
1、simpleUi + django-simpleui-captcha
之前有一个系统使用的是vue-admin-template,用起来确实很方便,但是一旦自己增加一点东西就会很丑,所以这个我就使用的是simpleUi + django-simpleui-captcha 作为后台的界面和登录验证码。
2、增加了一些echarts,进入系统就可以看到最近的报警情况。
2、模块
1、系统管理
这个模块里面主要包含了用户的管理、角色管理、菜单管理、字典管理、登录日志、操作日志、告警通知记录、ip白名单等。
1、用户、角色、菜单之间的关系
-
我重写了用户的模型,新增了菜单模型,没有重写权限的模型,做个简单的rbac我觉得就够了。
-
用户和原来的group都是控制用户权限,我这里面用户一般不单独设置权限,所有权限都是在group里面配置的,将group理解为角色。
-
菜单是在中间件中进行控制,通过simpleUi的自定义菜单,控制用户对应权限对应的菜单。
2、字典管理
参考github上很多后台管理系统,发现很多都有个字典管理系统,起初没用上,随着系统的使用增多,发现有的数据新建一张表没必要,用字典却是很方便,并且管理和修改也比较方便。
2、资产
平台的数据基本上都是来自于资产,这个资产相当于一个小型的cmdb,而资产中的数据则是同步于云平台的数据。 这个模块主要有服务器信息、服务器组、镜像、云实例、程序详情、实例应用等。
1、实例镜像
根据服务器信息,自动生成实例镜像,便于云实例快速创建云上服务器实例。
2、程序详情
是指每台机器上的应用的配置,配置是否进程检查、端口检查、异常自动重启
3、实例应用
每个实例上绑定程序详情,检查应用状态。包括通过自定义的agent上传应用程序的监控数据。
3、故障自愈
这个模块就是这个系统的初衷,将云平台发出的告警故障,结合告警数据,通过一个系统来统一的汇总,处理故障。 这个模块主要包含,cvm告警、es告警、prometheus告警、告警分析、接入自、自动分析上传结果、自定义套餐包、自愈执行结果等。
1、接入自愈
监控项可以是云平台的,也可以是自定义的,执行方式可以远程或者本地,异步或者同步。
2、自定义套餐包
自定义套餐包在接入自愈时可以选择怎么处理这个告警。
4、cronjob
这个就是依赖于ansible,将服务器上的所有脚本都统一管理,发布,查看执行日志。
5、日志告警
里面包含es和cls告警日志的捕获,分析。
6、批量任务
包含线上配置文件的发布,ansible playbook的执行,文件的上传等。
7、celery 任务
这个就是需要定时执行的计算任务的管理。
8、多云管理
包含线上域名等管理。
3、总结
文档也没啥好写的,主要提供给有这个需求的朋友一些思路,这个算是我在生产环境中用的比较多的一个系统了。