CMDB介绍
Posted zhangguosheng1121
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CMDB介绍相关的知识,希望对你有一定的参考价值。
一、CMDB:资产管理系统
1、本质:收集服务器的各种信息
2、开发CMDB的思路和大概做法:
使用Python代码执行linux的命令, 并且获取服务器上的对应信息
使用Http协议发送执行好的数据
二、为什么要做CMDB
a.项目开发和上线场景: 流程: 产品经理调研需求 =====> 定一个时间开发 ======> 测试() ====> 产品项目上线(运维) 传统做法: 运维解压文件, 部署到相对应的服务器目录下面 存在问题: 效率不高 不能实现覆盖有Bug的代码 解决方法: 代码上线系统 必要条件: 服务器的IP地址, 硬盘空间, CPU的使用率, 内存等 b.监控服务器: 传统做法: shell脚本来去做 问题: 不能实时 不能自动化 现在做法: 后台用Python去做, 收集一下服务的元信息(IP地址, 硬盘大小, 内存) 前台配合kibana c. 装机服务: 服务器装操作系统 (centos) 现在做法: 自动装机服务 也得知道一下, 服务的元信息 IP地址 d. 年底统计: 之前做法: 使用excel统计 存在问题: 不能实时, 需要对变更进行记录 现在做法: 统计资产的系统 还得需要收集服务器的各种信息, 需要实时的汇报变更记录
三、CMDB包含的功能
1、用户管理,记录测试,开发,运维人员的用户表
2、业务线管理,需要记录业务的详情
3、项目管理,指定此项目用属于哪条业务线,以及项目详情
4、应用管理,指定此应用的开发人员,属于哪个项目,和代码地址,部署目录,部署集群,依赖的应用,软件等信息
5、主机管理,包括云主机,物理机,主机属于哪个集群,运行着哪些软件,主机管理员,连接哪些网络设备,云主机的资源池,存储等相关信息
6、主机变更管理,主机的一些信息变更,例如管理员,所属集群等信息更改,连接的网络变更等
7、网络设备管理,主要记录网络设备的详细信息,及网络设备连接的上级设备
8、IP管理,IP属于哪个主机,哪个网段, 是否被占用等
四、CMDB的四套方案
1、agent模式
优点:速度快
缺点:每次都需要部署
适用的场景:服务器数量特别多的情况
架构图
架构:
在待采集的服务器上部署agent脚本,利用agent采集服务器信息,
采集完成之后,通过requests模块中post方法,将数据post到API中,
API拿到数据进行二次分析,分析完成之后连接数据库将数据存储到数据库中,数据库中的信息就是我们想要的数据,
为了让用户方便的查看数据,用django的web管理服务将数据展示到前端,用户可以通过界面来管理服务器中所有的信息。
代码实现
import json import subprocess res = subprocess.getoutput("ipconfig") print(res[30:40]) data = json.dumps(res[30:40]) import requests ret = requests.post("http://127.0.0.1/8000", data=data)
2、ssh类模式
缺点:使用paramiko登录服务器的话, 速度比较慢
优点: 不需要部署agent脚本
适用场景:服务器比较少 (100台以下)
架构图
架构:
有一台服务器充当中控机,在中控机上需要安装一个paramoko模块,通过paramiko模块可以登录待集的服务器上执行命令,执行完命令之后,会把命令的执行结果返回到中控机上,中控机上就有采集的信息。
中控机通过requests模块中post方法,将数据post到API中,
API拿到数据进行二次分析,分析完成之后连接数据库将数据存储到数据库中,数据库中的信息就是我们想要的数据,
为了让用户方便的查看数据,用django的web管理服务将数据展示到前端,用户可以通过界面来管理服务器中所有的信息。
代码实现
import paramiko # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 ssh.connect(hostname=‘10.0.0.100‘, port=22, username=‘root‘, password=‘3822515‘) # 执行命令 stdin, stdout, stderr = ssh.exec_command(‘df‘) # 获取命令结果 result = stdout.read() print(result) # 关闭连接 ssh.close() import requests ret = requests.post("http://127.0.0.1/8000", data=data)
3、saltstack模式
优点: 不用写Python代码
使用场景:
服务器上已经部署了salt-stack或者想要使用salt-stack
架构图
架构:
有一台服务器充当中控机,需要在中控机上安装salt-master,需要在要采集的服务器上安装salt-minion,中控机连接要采集的服务器,并发送linux相关命令,待采集的服务器将执行结果返回给中控机。
中控机通过requests模块中post方法,将数据post到API中,
API拿到数据进行二次分析,分析完成之后连接数据库将数据存储到数据库中,数据库中的信息就是我们想要的数据,
为了让用户方便的查看数据,用django的web管理服务将数据展示到前端,用户可以通过界面来管理服务器中所有的信息。
saltstack安装配置:
①安装和配置
master端 1、安装salt-master yum install salt-master 2. 修改配置文件:vim /etc/salt/master interface: 10.0.0.100 # 表示Master的IP 3. 启动 service salt-master start slave端 1、安装salt-minion yum install salt-minion 2. 修改配置文件:vim /etc/salt/minion master: 10.0.0.100 # 表示Master的IP 3. 启动 service salt-minion start
②授权
[root@zgs ~]# salt-key -L # 查看已授权和未授权的slave Accepted Keys: Denied Keys: Unaccepted Keys: zgs Rejected Keys:
[root@zgs ~]# salt-key -A # 把未授权的授权 The following keys are going to be accepted: Unaccepted Keys: zgs Proceed? [n/Y] y Key for minion zgs accepted.
[root@zgs ~]# salt-key -L Accepted Keys: zgs Denied Keys: Unaccepted Keys: Rejected Keys:
③执行命令:在master服务器上对salve进行远程操作
[root@zgs ~]# salt "*" cmd.run ‘ifconfig‘ # 查看ip
以上是关于CMDB介绍的主要内容,如果未能解决你的问题,请参考以下文章