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方式: 缺點: 每一臺須要部署這個軟件 優勢: 速度快, 開發成本低 場景: 企業以前已經在用