CMDB资产采集方式
一:Agent方式
原理:在每台服务器装上agent客户端程序,定时向数据库发送指定的资产信息。
优点:速度快。
缺点:服务器上需要多装一个软件
1 import subprocess 2 import requests 3 # pip3 install requests 4 5 # ################## 采集数据 ################## 6 # result = subprocess.getoutput('ipconfig') 7 # result正则处理获取想要数据 8 9 # 整理资产信息 10 # data_dict ={ 11 # 'nic': {}, 12 # 'disk':{}, 13 # 'mem':{} 14 # } 15 16 # ################## 发送数据 ################## 17 # requests.post('http://www.127.0.0.1:8000/assets.html',data=data_dict)
agent实现方式
二:SSH方式
原理:中间组件主动向服务器获取资产信息,然后由中间件向数据库添加数据(通过api)
优点:服务器端不用安装客户端版软件
缺点:慢
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.14.36', port=22, username='wupeiqi', password='123') 17 18 # 执行命令 19 # stdin, stdout, stderr = ssh.exec_command('df') 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)
SSH采集方式
三:Saltstack方式
原理:和第二种类似,只不过基于第三方软件,中间件向队列中放请求,客户端向队列中不停接收请求,一旦接收到请求,服务器解析后发现需要自己返回资产信息,就执行命令并将返回结果放入另一个队列,中间件从结果队列中取数据,然后通过API存入数据库
优点:速度快,开发成本低
缺点:依赖第三方软件
1 # 1. 安装saltstack 2 # rpm --import https://repo.saltstack.com/yum/redhat/6/x86_64/latest/SALTSTACK-GPG-KEY.pub 3 # 4 # 5 """ 6 Master: yum install salt-master 7 Master准备: 8 a. 配置文件,监听本机IP 9 vim /etc/salt/master 10 interface: 本机IP地址 11 b. 启动master 12 /etc/init.d/salt-master start 13 14 15 Slave: yum install salt-minion 16 Slave准备: 17 a. 配置文件,连接那个master 18 vim /etc/salt/minion 19 master: 远程master地址 20 b. 启动slave 21 /etc/init.d/salt-minion start 22 23 2. 创建关系 24 查看 25 Master:salt-key -L 26 Accepted Keys: 27 Denied Keys: 28 Unaccepted Keys: 29 c1.com 30 c2.com 31 c3.com 32 Rejected Keys: 33 接受 34 Master:salt-key -a c1.com 35 Accepted Keys: 36 c1.com 37 c2.com 38 Denied Keys: 39 Unaccepted Keys: 40 c3.com 41 Rejected Keys: 42 43 44 3. 执行命令 45 master: 46 salt 'c1.com' cmd.run 'ifconfig' 47 48 import salt.client 49 local = salt.client.LocalClient() 50 result = local.cmd('c2.salt.com', 'cmd.run', ['ifconfig']) 51 52 """ 53 # ################## 获取今日未采集主机名 ################## 54 #result = requests.get('http://www.127.0.0.1:8000/assets.html') 55 # result = ['c1.com','c2.com'] 56 57 58 # ################## 远程服务器执行命令 ################## 59 # import subprocess 60 # result = subprocess.getoutput("salt 'c1.com' cmd.run 'ifconfig'") 61 # 62 # import salt.client 63 # local = salt.client.LocalClient() 64 # result = local.cmd('c2.salt.com', 'cmd.run', ['ifconfig']) 65 66 67 # ################## 发送数据 ################## 68 # requests.post('http://www.127.0.0.1:8000/assets.html',data=data_dict)
Saltstack
四:puppet
原理:服务器端主动向中间件发送数据,中间件将数据通过API存入数据库。
优点:自动向中间件服务器提供数据
缺点:中间件puppet使用ruby开发