CMDB运维开发项目
ITIL:Information Technology Infrastructure Library 信息技术基础架构库,主要适用于IT服务管理(ITSM)。ITIL为企业的IT服务管理实践提供了一个客观、严谨、可量化的标准和规范。
CMDB(Configuration Management Database 配置管理数据库)
存储与管理企业IT架构中设备的各种配置信息,它与所有服务支持和服务交付流程都紧密相联,支持这些流程的运转、发挥配置信息的价值,同时依赖于相关流程保证数据的准确性。在实际的项目中,CMDB常常被认为是构建其它ITIL流程的基础而优先考虑,ITIL项目的成败与是否成功建立CMDB有非常大的关系。
70%~80%的IT相关问题与环境的变更有着直接的关系。实施变更管理的难点和重点并不是工具,而是流程。即通过一个自动化的、可重复的流程管理变更,使得当变更发生的时候,有一个标准化的流程去执行,能够预测到这个变更对整个系统管理产生的影响,并对这些影响进行评估和控制。而变更管理流程自动化的实现关键就是CMDB。
- 整合是指能够充分利用来自其他数据源的信息,对CMDB中包含的记录源属性进行存取,将多个数据源合并至一个视图中,生成连同来自CMDB和其他数据源信息在内的报告
- 调和能力是指通过对来自每个数据源的匹配字段进行对比,保证CMDB中的记录在多个数据源中没有重复现象,维持CMDB中每个配置项目数据源的完整性;自动调整流程使得初始实施、数据库管理员的手动运作和现场维护支持工作降至最低
- 同步指确保CMDB中的信息能够反映联合数据源的更新情况,在联合数据源更新频率的基础上确定CMDB更新日程,按照经过批准的变更来更新 CMDB,找出未被批准的变更
- 应用映射与可视化,应用间的关系以及应用和其他组件之间的依存关系,变更造成的影响等
- 配置项:纳入配置管理范畴的工作成果都是配置项(CI)
- 配置项名称:配置项根据生成规则自动生成的名称信息
- 设备名称:该设备的hostname
- 设备序列号:设备的出厂S/N号码
- 主管人员:设备/系统主管人员
- 维护人员:设备/系统维护人员
- 系统名称:该设备/应用/系统的标准名称(地市的系统名称则添加前缀地市名称,如:广州统一信息平台)
- 区域:设备/系统/软件所使用公司划分,如:省公司、广州、深圳等
- 网元状态:工程、退网、退网待删除、现网(不承载业务)、现网(承载业务)
- 设备类型:使用设备的类型,即交换机、路由器、防火墙、小型机等
- 品牌:设备的品牌,一般国外的厂商用英文大标识,国内的厂商用中文标识;虚拟机的品牌为虚拟技术实现的品牌,如Vmware等
- 管理IP:设备的实际管理IP
- 标准名:统一标准命名规范化;地市_业务系统_设备类型_编号 。如:省公司_综合网管系统_防火墙_001
目前CMDB资产管理的实现有如下方式:
1.SSH类
基于CMDB中控机和SSH对远程服务器执行命令实现
1 # 基于paramiko模块, pip3 install paramiko 2 import requests 3 import paramiko 4 5 # ################## 获取今日未采集主机名 ################## 6 #result = requests.get('http://www.127.0.0.1:8000/assets.html') 7 # result = ['c1.com','c2.com'] 8 9 10 # ################## 通过paramiko连接远程服务器,执行命令 ################## 11 # 创建SSH对象 12 ssh = paramiko.SSHClient() 13 # 允许连接不在know_hosts文件中的主机 14 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 15 # 连接服务器 16 ssh.connect(hostname='192.168.179.130', port=22, username='root', password='') 17 18 # 执行命令 19 stdin, stdout, stderr = ssh.exec_command('ifconfig') 20 21 # 获取命令结果 22 result = stdout.read() 23 24 # 关闭连接 25 ssh.close() 26 print(result) 27 28 # data_dict = {result} 29 30 # ################## 发送数据 ################## 31 # requests.post('http://www.127.0.0.1:8000/assets.html',data=data_dict)
去api取今天未采集资产的主机列表,把主机名拿过来,远程连接服务器,执行命令,把结果拿回来,给中控机再汇报给api--负责入库。
优点是无agent,缺点是慢
2.Agent 基于shell命令实现
import subprocess import requests # pip3 install requests # ################## 采集数据 ################## result = subprocess.getoutput('ipconfig') # result正则处理获取想要数据 # 整理资产信息 data_dict ={ 'nic': {}, 'disk':{}, 'mem':{} } ################## 发送数据 ################## requests.post('http://www.127.0.0.1:8000/assets.html',data=data_dict)
对于Agent的版本的实现思路:
- Agent采集硬件资产
- API提供相关处理的接口
- 管理平台为用户提供可视化操作
3.saltstack
# 1. 安装saltstack # rpm --import https://repo.saltstack.com/yum/redhat/6/x86_64/latest/SALTSTACK-GPG-KEY.pub # Master: yum install salt-master Master准备: a. 配置文件,监听本机IP vim /etc/salt/master interface: 本机IP地址 b. 启动master /etc/init.d/salt-master start Slave: yum install salt-minion Slave准备: a. 配置文件,连接那个master vim /etc/salt/minion 16行 master: 远程master地址 b. 启动slave /etc/init.d/salt-minion start 2. 创建关系 查看 Master:salt-key -L Accepted Keys: Denied Keys: Unaccepted Keys: c1.com c2.com c3.com Rejected Keys: 接受 Master:salt-key -a c1.com Accepted Keys: c1.com c2.com Denied Keys: Unaccepted Keys: c3.com Rejected Keys: 3. 执行命令 master: salt 'c1.com' cmd.run 'ifconfig' import salt.client local = salt.client.LocalClient() result = local.cmd('c2.salt.com', 'cmd.run', ['ifconfig']) vim /usr/bin/salt import requests ################## 获取今日未采集主机名 ################## result = requests.get('http://www.127.0.0.1:8000/assets.html') result = ['c1.com','c2.com'] ################## 远程服务器执行命令 ################## import subprocess result = subprocess.getoutput("salt 'c1.com' cmd.run 'ifconfig'") import salt.client local = salt.client.LocalClient() result = local.cmd('c2.salt.com', 'cmd.run', ['ifconfig']) ################## 发送数据 ################## requests.post('http://www.127.0.0.1:8000/assets.html',data=data_dict)
4.Puppet
基于Puppet的factor和report功能实现
优点是自动汇报,缺点是使用ruby语言