1. 程式人生 > >對常見的4種資產採集方案比較分析——應用於CMDB

對常見的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



轉自

4種資產採集方案帶你瞭解CMDB

(出處: 樂維論壇)