CMDB项目开发
Posted dylan123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CMDB项目开发相关的知识,希望对你有一定的参考价值。
CMDB介绍
CMDB --Configuration Management Database 配置管理数据库, CMDB存储与管理企业IT架构中设备的各种配置信息,它与所有服务支持和服务交付流程都紧密相联,支持这些流程的运转、发挥配置信息的价值,同时依赖于相关流程保证数据的准确性。
在实际的项目中,CMDB常常被认为是构建其它ITIL流程的基础而优先考虑,ITIL项目的成败与是否成功建立CMDB有非常大的关系。
70%~80%的IT相关问题与环境的变更有着直接的关系。实施变更管理的难点和重点并不是工具,而是流程。即通过一个自动化的、可重复的流程管理变更,使得当变更发生的时候,有一个标准化的流程去执行,能够预测到这个变更对整个系统管理产生的影响,并对这些影响进行评估和控制。而变更管理流程自动化的实现关键就是CMDB。
CMDB工具中至少包含这几种关键的功能:整合、调和、同步、映射和可视化。
- 整合是指能够充分利用来自其他数据源的信息,对CMDB中包含的记录源属性进行存取,将多个数据源合并至一个视图中,生成连同来自CMDB和其他数据源信息在内的报告;
- 调和能力是指通过对来自每个数据源的匹配字段进行对比,保证CMDB中的记录在多个数据源中没有重复现象,维持CMDB中每个配置项目数据源的完整性;自动调整流程使得初始实施、数据库管理员的手动运作和现场维护支持工作降至最低;
- 同步指确保CMDB中的信息能够反映联合数据源的更新情况,在联合数据源更新频率的基础上确定CMDB更新日程,按照经过批准的变更来更新 CMDB,找出未被批准的变更;
- 应用映射与可视化,说明应用间的关系并反应应用和其他组件之间的依存关系,了解变更造成的影响并帮助诊断问题。
cmdb属于运维自动化项目
目的:减少人工干预,降低人员成本
cmdb包括两部分
-资产管理
-操作管理
资产管理的实现
WHY搭建cmdb资产管理
搭建cmdb是因为最终是要搭建自动化平台,包括装机、监控、自动安装软件、部署等全部自动化的执行,而想要搭建自动化的平台的基础是要有资产的管理,因为上面的操作都是在资产的基础上进行的操作,所以搭建平台的首要目的是要对资产进行管控起来,所以我们需要有一个资产管理。
目前CMDB资产管理的实现有如下方式:
-
Agent
基于shell命令实现 # agent形式
# 1.采集资产
# 2.将资产数据发送到API(POST)
对于Agent的版本的实现思路:
- Agent采集硬件资产
- API提供相关处理的接口
- 管理平台为用户提供可视化操作
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)
-
Paramiko类
基于CMDB中控机和SSH对远程服务器执行命令实现 # SSH形式
# 1.获取今日未采集主机列表
# 2.采集资产
# 3.将资产数据发送到API(POST)
# 基于paramiko模块, pip3 install paramiko
import requests
import paramiko
# ################## 获取今日未采集主机名 ##################
#result = requests.get(‘http://www.127.0.0.1:8000/assets.html‘)
# result = [‘c1.com‘,‘c2.com‘]
# ################## 通过paramiko连接远程服务器,执行命令 ##################
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname=‘192.168.14.36‘, port=22, username=‘wupeiqi‘, password=‘123‘)
# 执行命令
# stdin, stdout, stderr = ssh.exec_command(‘df‘)
# 获取命令结果
# result = stdout.read()
# 关闭连接
# ssh.close()
# print(result)
# data_dict = {result}
# ################## 发送数据 ##################
# requests.post(‘http://www.127.0.0.1:8000/assets.html‘,data=data_dict)
-
SaltStack
基于SaltStack的master上的pillar以及远程执行命令实现 # Salt形式
# 1.获取今日未采集主机列表
# 2.采集资产
# 3.将资产数据发送到API(POST)
# 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
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‘])
"""
# ################## 获取今日未采集主机名 ##################
#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)
开发中遇到的小问题
在用agent方式连接主机获取数据的时候,一开始获取主机的唯一标识符用的是主板上的sn号(每个电脑的sn号都不同,唯一),但是后来用虚拟机使用时候出现问题,虚拟机上的序列号(sn号)可以相同。
解决方案:使用主机的主机名,且保证主机名不能修改,并把主机名放在一个文件里面,供采集数据时候获取主机名。
以上是关于CMDB项目开发的主要内容,如果未能解决你的问题,请参考以下文章