运维平台之CMDB系统建设

时间:2024-03-03 14:18:54

CMDB是运维的基础核心系统,所有的元数据和共享数据管理源,类似于业务中的账号平台的作用。本篇文章,我将从概念篇、模型篇、到实现与实施篇具体的进行阐述。


CMDB也称配置管理,配置管理一直被认为是 ITIL 服务管理的核心,因为其他所有流程均需要使用配置管理数据库 (CMDB)。在上篇的平台体系中,CMDB位于最底层的支持系统位置上,可见其作用。配置管理为什么起到核心的作用,这个地方不做逐一介绍,简单举个例子,比如说变更系统发起了一个部署请求,要部署某个版本到现网,部署完成之后,上层的变更系统会把变更的结果写到CMDB中,对配置进行归档;在某个机器down机,此时可以快速的知道该机器的具体用途,确定影响的业务;当机器需要重新恢复的时候,可以快速的根据CMDB中的信息进行恢复。

一、概念篇

1、配置管理和配置文件管理。

ITIL所讲的配置管理是从软件工程管理角度出发的,把一切对象都当做配置,比如说源代码、文档、人员、服务器甚至硬盘和内存等等。所以说他和业务程序的配置管理有着本质的不同,为了有效区分,我们又习惯说业务程序的配置管理叫配置文件管理。但又有着一定的联系,在ITIL中,业务程序的配置可能会以一个配置项存在,附属在应用程序上,具体什么是配置项后面再解释。


2、配置管理和资产管理

既然把一切资源对象都当做配置来看待,特别是服务器、机房、机柜等等,那他和我们的资产管理又有着什么样的不同呢?其实这两个系统的区别在很多时候大家都不是很清楚,会混为一谈。具体的区别我之前做过一个总结,如下:


在上图中,你把握核心的区别点就是导向,配置管理是面向业务管理,而非成本,这个会决定配置管理的粒度。当前如果业务非常简单,不需要对服务器端口进行管理,此时则不需要考虑纳入端口的管理,否则增加管理的代价。


3、配置项

配置项是指要在配置管理控制下的资产、人力、服务组件或者其他逻辑资源。从整个服务或系统来说,包括硬件、软件、文档、支持人员到单独软件模块或硬件组件(CPU、内存、SSD、硬盘等等)。配置项需要有整个生命周期(状态)的管理和追溯(日志)。对配置项的分类,我一般从逻辑资源和物理资源两个角度来分解,然后层次化分解,这个思路会让你特别清晰,不会混乱。



4、属性

一个配置项就是一个对象,有对象便有属性,属性是一个配置项的具体描述。比如说服务器这个配置项,他的具体描述有在哪个机房、哪个机柜的哪个位置、现在是否有业务运行、具体谁负责等等。在后面的模型篇里会对属性做全面的梳理,完成现实世界到模型世界的转换。另外配置项和属性可以转换,比如说IP地址,他肯定是一个资源对象存在。但是从服务器的角度来说,它作为一个属性存在,更准确的说是网卡的属性。


二、模型篇

我为什么把模型单独提取出来,因为它是CMDB建设的核心,缺少对业务的准确理解,则没法准确的提取配置项及其属性。在这个环节中,模型的核心职责,就是把配置项和属性逐条的梳理出来。本人在模型整理的时候,重点做了四个方面工作,然后形成规范手册。


1、配置管理系统的角色

可以简单分成几类角色,第一、应用运维,负责服务器上的业务信息维护;第二、基础运维,负责机房、机柜及其服务器物理信息的准确性;第三、配置管理员,负责基础信息的维护,比如说业务分类,人员信息;第四、查询类角色,比如研发。CMDB是核心的资源信息管理系统,一般不轻易开放权限。


2、配置项识别与定义

这是重点工作,没有简单的方法可循,细致活,基于上图的【配置项】的物理资源和逻辑资源的不断分解,根据业务需要最终识别出要管理的配置项。然后对每一个配置项进行整理,确定要管理的属性。形成类似的下表:

就拿最核心的服务器资源来说,会形成如下表的信息整理:

逐个进行整理,在上表中有几个方面需要注意:

第一、每个配置项目确定了维护角色,他在后续的过程中,需要对这个准确性负责,确定维护的职责边界。

第二、要整理出配置项的关联,比如说上表中的所属机房、所属机柜。

第三、这个表不是数据库的设计表,具体数据库的设计表是开发人员根据这个模型参考实现。


3、基于场景的配置管理规范

配置管理的核心目的是为了确保配置信息集中管理,并且是准确的管理。在这个里面需要做两个核心的工作。

第一、配置项的规范化管理;

第二、面向配置项的流程规范化管理,没有一套与之匹配的配置流程,最后配置管理都会混乱不堪,这个系统也就形同虚设。

此时没有捷径,识别配置管理的场景,把每个流程清晰的画出来,比如说服务器管理,它就涉及到服务器上架、服务器搬迁、服务器下线、服务器申请、服务器回收等流程。比如拿服务器回收流程来说,流程图如下:


注意上图中,在服务器回收的过程中,行是角色,列是阶段,在每个阶段,服务器的状态可能发生变化,此时也需要做备注。方便后续开发人员在做相应的流程实现的时候,控制这类状态。状态的转换对监控也有影响。


4、状态变迁图

用一张图来说明资源状态的变化,便于更好的基于场景和变更来控制配置项状态的变更,其实也就是它的生命周期管理。举例如下:

这些方法都是以前面向对象设计里面的内容,我觉得在CMDB配置管理工作中,有很大的作用,在一张纸上,你就可以看到状态如何变化,然后是哪个场景促使变化,这些场景最终就会转换成CMDB的某个功能或者某个流程。



三、实现篇

系统实现非常简单,简单理解就是一个配置的信息管理+流程管理,一个开发熟手,一个月就可以开发完成。难点还是在配置项识别,一定要做足功夫,把配置项的属性、流程、状态都整理清楚,最后按照这个来系统实现就OK了。不过在系统建设中,有一个经验大家可以参考:CMDB一定要变成运维和运维研发的共同项目,并且具体的配置项管理人要全程参与,比如说需求讨论、测试、上线验收等等(运维研发项目都可以遵循该模式)。像上面的配置项最好能找一个对全局了解的人来做,不一定是研发。


四、实施篇

其实CMDB真的是非常简单的系统,至少在两家公司做的CMDB都是非常短的时间完成,最多两个月。但是其实施的过程很多经验可以分享。

1、导致CMDB失败的因素

A、缺少管理层承诺----没有管理层的承诺,CMDB不可能成功。

B、在复杂流程上消耗太多的时间---我们是创建一个CMDB库,不是一个流程系统。

C、没有创建相应的工作指导文档---指导如何管理和维护CMDB。

D、没有指定配置项负责人----确保配置项有人专职维护。

E、目标过大,涵盖太多的功能----比如说IT采购和预算管理等等。

F、颗粒度不合适----配置合理的CMDB的配置项层次和粒度非常重要。

G、存在组织隔阂----CMDB是一个集成体系,靠流程中的每一个人通力协作,而不是某个人。


2、导致CMDB成功的因素

A、业务导向。比如说我们在CMDB的新的系统中实时加入QR码技术,为了降低资产盘点的工作量。

B、能自动发现就自动发现,降低配置管理的成本,但自动发现的信息不能用来做告警。

C、配置项的管理员必须全程参与,需求定型、测试及验收等等。

D、CMDB系统建设完成之后,其他系统必须和他联动。比如说监控、质量、容量等等,用场景驱动配置项的管理。

E、流程一定要平台化,不要让流程脱离CMDB存在,比如说搞一个OA流程,这个是很致命的。

F、CMDB要持续演进,特别是云端资源的管理。

G、配置项和流程必须要文档化,后期要进行CMDB培训。