對常見的4種資產採集方案比較分析——應用於CMDB
CMDB 資產採集的方案總共有四種
· Agent
· SSH類
· Saltstack
· Puttet
方案設計,從效能上考慮
下面前三種是用Python開發的,目標是相容三種採集方式的軟體
原理要明白
如何實現自動採集?
subprocess
Linux基本命令
v = subprocess.getoutput('ls')
1 Agent方式
· API:Django接收資料併入庫
· 程式:放置在每臺伺服器
應用場景:機器多的時候
每臺伺服器都有程式,程式實現採集資料(執行subprocess),然後把資料傳送到api
API 接收資料併入庫(Django)
· url
· 傳送資料格式
· 返回值
agent程式放在每臺伺服器
agent程式放在每臺伺服器,這是採集本機的資料,速度快,採集完後傳送到API
subprocess.getoutput('ifconfig')
agent程式
importsubprocess
v1 = subprocess.getoutput('ipconfig') # 檢視的是本機IP
v2 = subprocess.getoutput('dir') # 檢視本機
importrequests
url = 'http://127.0.0.1:8000/asset.html'
response = requests.post(url, data={'k1': v1, 'k2': v2}) # 使用request模組進行post進行訪問
print(response.text)
api程式
fromdjango.shortcuts importrender,HttpResponse
defasset(request):
ifrequest.method == "POST":
print(request.POST) # 列印接收的內容
returnHttpResponse("1001") # 返回值
else:
returnHttpResponse("用post訪問")
當agent程式訪問的時候,api就接收到了資料,這裡還有一點是,Django中先把csrf註釋
2 SSH類
場景:paramiko(機器少)
· API:Django接收資料併入庫
· 程式:放在中控機,中控機遠端連線機器,這裡藉助paramiko
或者
· Paramiko,中控機放一份遠端連線伺服器,執行命令,獲取結果
· 將結果傳送API
ssh方式
封裝了Python的paramiko
fabric
ansible
中控機
遠端連線伺服器,執行,
結果傳送到api
中控機連線中的程式
· 注意埠和密碼
· 接收到的資料是位元組,需要decode
importparamiko
# 建立SSH物件
ssh = paramiko.SSHClient()
# 允許連線不在know_hosts檔案中的主機
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 連線伺服器
ssh.connect(hostname='192.168.11.126', port=8888, username='root', password='密碼')
# 執行命令
stdin, stdout, stderr = ssh.exec_command('ls')
# 獲取命令結果
result = stdout.read()
# 關閉連線
ssh.close()
print(result.decode()) # 把位元組資料轉換
importrequests
url = 'http://127.0.0.1:8000/asset.html'
response = requests.post(url, data={'k1': result}) # 使用request模組進行post進行訪問
print(response.text)
3 Saltstack
場景:機器多的時候,公司(樂維)正在用
salt-master 的interface設定成主機的IP,salt-minionshe
安裝
參考: http://repo.saltstack.com/#rhel
Master
1. 安裝salt-master
yum installsalt-master
2. 修改配置檔案:/etc/salt/master
interface: 0.0.0.0 # 表示Master的IP
3. 啟動
service salt-masterstart
Minion
1. 安裝salt-minion
yum installsalt-minion
2. 修改配置檔案/etc/salt/minion
master: 10.211.55.4 # 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
注意:
在修改配置檔案的時候,interface master 冒號後面要有空格
檢視啟動狀態
systemctl status salt-master systemctl status salt-minion
配置
配置主要是/etc/salt/master 和/etc/salt/minion
minion要指定指定的IP是主的IP
授權
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
遇到錯誤:
Minion did not return. [No response]
解決:
rm -fr pki/minion/minion_master.pub
重啟服務:
systemctl restart salt-minion
參考:
http://www.cnblogs.com/phennry/p/5419451.html
centos 修改主機名
vim/etc/hostname
通過nmtui修改,之後重啟hostnamed
systemctl restart systemd-hostnamed
salt '*' cmd.run 'ls'
salt原理:
RPC
預設維護了訊息佇列
傳送:master--》訊息佇列-》minon1/minon2
接收:minon1/minion2--》臨時佇列--》master
4 puppet(ruby開發的)
slive 每30分鐘自動執行,然後傳送到master
轉自
(出處: 樂維論壇)