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介绍的主要内容,如果未能解决你的问题,请参考以下文章

CMDB项目CURD组件之搜索功能介绍

LuffyCity-CMDB实战

cmdb部署文档

CMDB和运维自动化

Go语言开发的灵活管理资源的开源CMDB

CMDB资产采集方式之agent