什么是CMDB系统?
CMDB这个词已经很热门了,我下面用简短的话概括和理解CMDB的意思。
CMDB:同义为配置管理数据系统。简单来说,就是为互联网企业或者公司,统一管理IT数据,服务器数据资产等信息。
我们团队在做CMDB的时候,更多时候花的时间,是想和考虑需求和为什么这么做,这么做,对我们今后的运维效率和自动化的好处在哪里?
我总结了以下3点,我们开发的目的/需求。
CMDB开发目的:
1)目前我们部门的服务器规模有几千+,服务器数据很庞大。想全部统一整合在我们的CMDB平台管理和收集。
2)我们内部团队想做运维自动化,数据底层需要打通,才能方便我们以后扩展和开发其他运维平台,比如:发布系统,监控系统,点播,直播等。
3)我们内部开发的CMDB可以根据内部运维,比如:应用运维,基础运维,CDN运维的需求,定制一些我们自己的功能,方便他们使用。
我们的开发模型是团队模式,团队模式协同,效率会更快些,单独的人负责单独的模块功能。
CMDB开发特点和大致分工:
perl语言+python语言。其中perl web框架是moji, python web框架是django。
其中perl这边负责的数据底层和数据库层面的操作和控制,而python是负责应用层面的控制。团队配合开发,完成周期时间快。
配合方式:使用json格式互传数据和接收数据。
CMDB开发周期:
目前这是我们开发的第一版的CMDB,开发周期:2个半月时间。
CMDB产品功能信息设计大致概括:
IP:所有IP(外网,内网,VIP,其他绑定IP等)、MAC,管理卡等。
配置:CPU,服务器型号,硬盘大小(块数),操作系统
应用分类信息:多级分类组合、应用组合,产品数。
资产号、序列号、型号、负责人。
机房地区,IDC、机柜、网络
其他分类:虚/实、线上/线下/库备/报废、自有/外部,在线/维护状态等。
开发CMDB,所涉及的技术点,如下:
(1)开发的语言:python+perl团队开发
(2)框架:python:Django框架 perl:Mojo框架
(3)前端bootstrap,html,js,css,jquery。
(4)db databases:mysql
(5)自动化软件:saltstack(主要自动负责新服务器的数据信息采集,第一版只是单台主机采集,第二版会考虑多台或者组的采集)
我们开发的CMDB总共有7大功能:数据添加,数据查询/搜索,历史数据查询,树状查询,自动收集CMDB信息,权限控制,数据导出,生成CSV格式。
#功能说明:
(1)数据添加功能:如果有新服务器,运维人员如果想手工录入,可以使用这块手动录入/添加CMDB数据。
(2)数据查询/搜索功能:数据查询/搜索功能这块是模糊匹配+精确匹配,对4个方面进行了控制,外网IP地址,机器盘点号,机柜信息,管理员,搜索的人员通过这4个选项都可以搜索对应和想查找的信息,只有对应的管理员才能管理对应的服务器列表和数量,否则只能搜索出来,查找详情,不能编辑和删除服务器数据相关类容。
#备注:默认这4个选项不能为空就搜索/查找,否则前端会提示输入其中一个方可搜索。
(3)历史数据查询功能:这块是全部数据的历史查看。
(4)树状查询功能:这块使用ztree前端插件,官方Demo地址(http://www.ztree.me/v3/demo.php),默认是全部数据展示,如果想输入每个对应的管理员搜索/查找,Ztree树形就会显示当前管理员所有的服务器,所有服务器是按照地区/机房显示,中文全部转换为拼音格式。
(5)自动收集CMDB信息:这个功能底层采用saltstack master/minion,收集出来的数据,通过json格式入库。
(6)权限控制功能:权限主要应用在2个方面:URL和搜索管理员权限。
(7)数据导出,生成CSV格式功能:通过每次搜索出来的结果和数据,运维人员可以通过下载CSV按钮,下载当前搜索的数据结果到本地电脑当中,下载完成之后,可以使用excel打开。
#最后是devops的一些感想(本人的一些感想,不对之处,请指正哈):
1)在开发项目自动化或者CMDB的时候,先设计产品功能和理解开发目的,需求才是最关键,其次才是进行细节开发。
2)运维自动化是个很热门的话题,在做运维自动化的时候,一切都是以规范,流程,数据整合为目的的原则进行开发,切记不要盲目去追求运维自动化。
3)运维自动化核心目的:运维架构运维应用,数据整合的优化,要站在公司的业务层面和运维架构去考虑实际做出来的产品使用率和可用性为原则。