CMDB,Configuration Management Database的简称,从英文单词中直译”配置管理数据库“,但实际上更多的被称呼为”资产管理系统“。
其实出现这种误差的起因在于不一样建设思路中对所要达成的”目标“不一样,而对该”Configuration“的理解不一样所致使。
CMDB一般具有存储”Configuration“、创建”Configuration“之间的关系、利用流程或工具维护”Configuration“数据和保证其数据正确性等功能
而在此基础上开放数据对外服务、联动其他平台(CI、CD、流程等)构建完善的运维架构体系是经常使用的作法。前端
在没有CMDB时,运维人员会采用excel、记事本或者纸质文件去记录相关的机房、机柜、物理设备、主机、应用相关的信息。
在这种状况下常常会遇到疏于更新数据或遗漏丢失数据致使,在整理业务架构、分析当前资源使用率、机房机柜等采购决策时作出错误的判断,致使资源浪费、故障排查难、迁移难等问题。
总结下来本质问题为:python
为解决以上问题,进行CMDB的建设,能够保证如下基本需求mysql
而在此基础上开放CMDB数据给予其余平台消费,让数据获得充分的利用,例如根据关系链绘画架构图、故障根因分析等经典消费场景。golang
很简单,当你吐槽excel的时候就能够开始了!
其实在你吐槽的时候,已经表明着公司的业务成长,你已经没法用当前的作法去很好的维护这些数据、协调你的工做。
而你总会想着有个地方能够统一的存储这些数据,有个web界面给你去查看、更新,接下来你只须要保证数据的不丢失,就能达到你想要的初期效果。
更进一步不断的优化该系统,使它更加的强大健壮时,你将会发现它不知不觉中成为了不少系统的基石,这其实就是CMDB最原始的雏形。
固然,如今CMDB已经不止怎么简单了,每家公司由于它自身的文化、需求不一样,造就的CMDB形态也各不相同。
而有些由于建设目标不明确,致使CMDB最终建设失败,推倒重来也不在少数。web
我的从工做中总结,建设CMDB需注意如下几点sql
不管是哪一种方式,都是归一化的将其属性数据化、关系数据化存放,更加易于消费使用。数据库
建设CMDB需从战略方面开始、以战术方面落地实施后端
从战略方面需作到如下四点安全
在常见的运维团队里,具有研发基础或高级研发水平的人趋于少数。
若是要进行自研CMDB的话,天然须要寻求研发部外援或者招专职研发
但不管是招人,仍是团队调整以及磨合都是须要时间的,
并且这里也会有建设经验上带来的研发质量、需求实现误差等问题。
因此选择采购仍是自研能够从时间成本、人员成本两个维度去衡量网络
考虑人员成本
考虑时间成本
以上两个维度的问题中,若是以上问题,”是“居多时可考虑选择自研,”否“居多时考虑选择采购。
固然若是财大气粗,又不想麻烦的话,也能够选择采购。
但切记并非采购就等于没麻烦,选择成熟且领域顶尖的CMDB产品能够减小麻烦,但这里的技术维护成本、甲乙双方之间的沟通成本以及安全性都须要考虑。
也切记自研并非必定要从0开始,站在巨人的肩膀上也能够解决很多麻烦。
我的在以往思考中对CMDB系统总体考量梳理以下,但愿能够提供参考,而这里只是浅谈就不展开了。
考虑数据开放策略
考虑数据安全问题
考虑事件响应机制
考虑数据维护环路
考虑数据如何展现
考虑组件高可用
考虑数据库容灾
考虑跨机房方案
语言选择
考虑数据存储性能指标
考虑数据库存储方案
考虑事件总线组件方案
考虑数据入口方案
自动录入
文件录入
在建设中,要对成果或者阶段作个评估,以便后续更加精进该系统或修正方向
而这时须要可量化的指标,因此就须要指定如下指标
围绕建设目标
技术层面
平台性能
平台稳定性
CMDB通常存储的是静态稳态的数据,这表明这并不会有高频率的变更,从这点出发代表咱们没法从CMDB层面去看资源的当前运行态是如何的
而这时候咱们该怎么作呢?
监控平台是能够经过高效、丰富并支持分钟级或秒级的采集手段采集着各类对象的指标数据。
可是监控平台的数据在传统建设中,只有在遇到问题时才会来使用,这是极其浪费的事情。
因此经过CMDB + 监控平台两平台的数据结合,咱们能够结合稳态(配置、关系)和动态的数据(指标)去观测资源的各方面的状态
好比,经典场景中的”由业务关系出发的应用之间调度链以及实时请求访问状态图“,这个图例能够实时的观测到应用的运行状态,也从图中能够全局把控整个调度链路。
这是一个很是有趣而实用的场景。
还有着,从关系链进行告警根因分析、告警收敛也是很好的实践场景。
固然场景还有不少,能够值得去深挖。
CMDB的数据与监控平台的数据的关联,在于监控数据的维度概念
维度的简单理解就是sql语句中的where条件所使用的字段,维度值通常以字符串存储,能够参考influxDB的tag概念
监控平台的数据是从维度去定位到相关的对象的数据,好比经过mysql的ip、port定位到该mysql的指标数据
而CMDB中的数据实例中也会需具有这样的稳态数据,从这点出发,创建二者的共性数据关联策略就可将二者数据关联起来。
这里不详细展开。
在常见的CMDB中,录入的数据,都可以用列表展现,可是若是用地图呢?
能够像地图同样,检索查询定位你想要的点,而后经过拉动,扩大缩小查看周边的信息。
是否是很是有趣?
其实所谓的地图化,简单理解就是关系+场景化
那场景化是什么呢?
场景化,简单来讲就是"什么地图"
好比你是从业务场景去看,那这个地图就是业务地图,而后你想要定位mysql实例位置
那顺着业务出发层层分割,从业务->应用->依赖服务->Mysql服务->Mysql实例顺着定位。
这跟咱们看地图是同样的思路,从国家->省->市->县->镇->街道,是否是很贴切?
在一般状况下CMDB中全部资源的关系都是平等的,就是一张很是巨大的网
而地图化就是经过特定场景化封装出有层次、有重点的关系链路网图,在越靠近源点的关系数据价值越高。
这样有利于梳理核心和非核心数据,去除干扰数据,专一场景消费使用,让数据最大价值化。
本文是我的经历中对CMDB认识的总结,但愿对各位建设CMDB路上有所帮助,谢谢