CMDB资产采集方式
一:Agent方式
原理:在每台服务器装上agent客户端程序,定时向数据库发送指定的资产信息。
优点:速度快。
缺点:服务器上需要多装一个软件
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实现方式
二:SSH方式
原理:中间组件主动向服务器获取资产信息,然后由中间件向数据库添加数据(通过api)
优点:服务器端不用安装客户端版软件
缺点:慢
# 基于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)
SSH采集方式
三:Saltstack方式
原理:和第二种类似,只不过基于第三方软件,中间件向队列中放请求,客户端向队列中不停接收请求,一旦接收到请求,服务器解析后发现需要自己返回资产信息,就执行命令并将返回结果放入另一个队列,中间件从结果队列中取数据,然后通过API存入数据库
优点:速度快,开发成本低
缺点:依赖第三方软件
# 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)
Saltstack
四:puppet
原理:服务器端主动向中间件发送数据,中间件将数据通过API存入数据库。
优点:自动向中间件服务器提供数据
缺点:中间件puppet使用ruby开发