1.Agent脚本实现html
本质:就是在各个服务器经过python运行脚本里的命令(用到了subprocess模块),而后将每台机器上执行的结果,返回给主机API,而后主机API收到这些数据以后,放入到数据库中,最终经过web界面展示给用户
2.SSH实现方式python
本质:中控机经过Paramiko(py模块)登陆到各个服务器上,而后执行命令的方式去获取各个服务器上的信息。(Paramiko,ansible和shell都是经过SSH远程链接服务器的)
服务器比较少,能够用下面方法实现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=1) # 执行命令 stdin, stdout, stderr = ssh.exec_command('ifconfig') # 获取命令结果 result = stdout.read() print(result) # 关闭链接 ssh.close()
3.saltstack方式shell
本质:和第二种方案大体是差很少的流程,中控机发送命令给服务器执行。服务器将结果放入另外一个队列中,中控机获取将服务信息发送到API进而录入数据库。
(1)saltstack安装配置数据库
master端(中控机): """ 1. 安装salt-master yum install salt-master 2. 修改配置文件:/etc/salt/master interface: 0.0.0.0 # 表示Master的IP 3. 启动 service salt-master start """ slave端(服务器端): """ 1. 安装salt-minion yum install salt-minion 2. 修改配置文件 /etc/salt/minion master: 10.0.0.100 # master的地址 或 master: - 10.211.55.4 - 10.211.55.5 random_master: True id: c2.salt.com # 客户端在salt-master中显示的惟一ID 3. 启动 service salt-minion start """
(2)受权ruby
""" salt-key -L # 查看已受权和未受权的slave salt-key -A # 受权全部 salt-key -a salve_id # 接受指定id的salve salt-key -r salve_id # 拒绝指定id的salve salt-key -d salve_id # 删除指定id的salve 等命令 """
(3)执行命令服务器
salt 'localhost' cmd.run 'ifconfig'
基于API方式(有点兼容问题)网络
import salt.client local = salt.client.LocalClient() result = local.cmd('10.0.0.200', 'cmd.run', ['ifconfig'])
安装使用参考dom
4.Puppet(ruby语言开发)(很老)
每多少分钟,经过RPC消息队列将执行结果返回
三种CMDB采集的方案: agent方式采集: 场景: 服务器比较多 缺点: 须要每一台服务器上部署 优势: 速度快 ssh类(parmiko fabric ansible): 缺点: 速度慢(经过ssh登录[要有网络]到服务器上执行命令返回数据)须要一台中控机 优势: 不须要部署agent脚本 场景: 服务器比较少 salt-stack方式: 缺点: 每一台须要部署这个软件 优势: 速度快, 开发成本低 场景: 企业以前已经在用