由于最近有幸和附近一规模相对庞大的企业IT负责人交流,大家经过交流后都分别描述了当前企业的一些IT痛点,不管是开发还是运维上的痛点,在交流中发现现在IT运维存在着很多手动运维的情况,基于这个情况加上个人的发展方向,决定由互联网往企业方向发展,所以针对这个企业IT的痛点编写了一个自动化运维的开发方案。
首先,从企业运维的角度来看,首要要求肯定是服务的监控,所以对于服务监控肯定是选择行业先对比较的流行的解决方案来实行,在对比了各种解决方案的差别之后,最终选择了zabbix做服务监控以及报警,至于为什么会选择zabbix,以下的内容会逐一给出解答。
那实现第一步,我们先个人电脑上搭建测试环境,你可以选择任何一个虚拟化软件来安装centos7系统。
1.在虚拟的centos7系统上安装Docker。
yum install docker-ce-18.03.1.ce
--安装docker服务
service docker start
--启动docker服务
2.在Docker中安装我们的zabbix服务,并把zabbix服务常用的端口映射在我们的主机端口上。
3.在docker上安装zabbix服务
4.设置zabbix的基本参数
5.在zabbix上添加监控线
6.在zabbix上添加jvm监控
7.通过zabbix集成jmx实现jvisualvm使用
8.设置zabbix的jvm内存报警触发器
9.给zabbix添加监控告警出发webhook
(由于zabbix和自动化运维平台搭建在同一主机,所以webhook连接为127.0.0.1)
10.基于spring boot框架和layui前端ui框架的自动化运维后台搭建
11.编写自动化运维后台主机管理模块
(通过自动化运维平台主机菜单对主机进行增删改查和分支并保存到数据库,保存数据库成功后在使用基于java的IO流操作把数据库主机信息拼装为yml格式并实现对Ansible中的inventory主机列/etc/ansible/hosts表进行覆盖,所有主机信息以数据库为准,每次修改只做覆盖hosts文件炒作)
12.编写自动化运维后台zabbix触发器规则模块
(根据zabbix的触发器出发的webhook,来编写restfut api接口,例如:/(报警服务)/(报警级别)/?(报警参数)-post请求:127.0.0.1/tomcat/high,post请求参数(附带报警参数,主机ip,报警出发代码等等))
13.根据webhook的路由规则判断是什么级别什么服务那个主机来编写方法,做自动化处理。
(由于Ansible只有基于python的api,所以我们使用java的jython-standalone库来操作python脚本运行报警所以应对的python操作Ansible-api的脚本)
java:https://www.cnblogs.com/nuccch/p/8435693.html
python:https://www.cnblogs.com/rexcheny/p/10677113.html
14.spring boot 增加对接 企业微信api
15.使用spring 中的aop切面技术 实现 对报警触发webhook前后执行自动化处理成功后使用企业微信api发送通知消息
16.使用spring 中的aop切面技术对每次报警和处理做日志记录并把日志保存到数据库
17.对自动化运维后台中的处理规则做脚本上传管理
(由于自动化运维后台是docker化服务,所以docker run该服务的时候必须把容器内部的脚本存储路径映射到主机/root/asb目录下,并且该目录以报警路由信息为路径如:/root/asb/tomcat/hight/clean.py, 该基本对于的webhook为127.0.0.1/tomcat/high,并且改目录会使用定时任务每日自动备份到文件服务器上)
18.如果企业微信为自动同步企业组织架构,使用企业微信api获取企业组织架构,自动化运维后台根据增加企业微信扫码登录功能,登录权限需要admin超级管理员在自动化运维后台开启登录权限。
19.使用python的django框架再次实现功能
(对比java的springboot实现能减少io的操作,在方法内直接实现python对ansible的操作)