資產采集的概念
資產采集的四種方式:Agent、SSH、saltstack、puppet
資產采集
Configuration Management Database 簡稱CMDB,CMDB存儲與管理企業IT架構中設備的各種配置信息,它與所有服務支持和服務交付流程都緊密相聯,支持這些流程的運轉、發揮配置信息的價值,同時依賴於相關流程保證數據的准確性。CMDB可以實現高度的自動化,減少人為錯誤的發生、降低人員成本,CMDB是實現運維自動化的基礎。
Agent方式
API:Django接收數據並入庫
程序:放置在每台服務器
應用場景:針對服務器較多的公司
步驟一:
#執行本地命令的庫
import subprocess
sub = subprocess.getoutput("要執行的命令名")
每台機器通過用戶名密碼鏈接數據庫,獲取要執行的命令
步驟二: 采集數據
import subprocess
# 采集到本機運行ipconfig命令的輸出結果
result = subprocess.getoutput("ipconfig")
print(result)
步驟三: 篩選整理數據
# 正則等方式
result_dic = {
"網絡信息":result,
}
步驟四:發送數據到api
# 以post方式將數據發送到url
import requests
requests.post("url", result_dic)
SSH方式
import paramiko
#通過paramiko庫鏈接各台機器,獲取命令
#缺點是慢
API:Django接收數據並入庫
程序:放在中控機
應用場景:針對服務器較少的公司
SSH方式有三種工具,paramiko、Fabric、Ansible,其中Fabric、Ansible內部原理也是通過paramiko來實現得。
paramiko安裝:pip3 install paramiko
andible,fabic等工具對paramiko進行了封裝,方便使用 速度更快一些!
import requests,paramiko
#獲取今天未采集的主機名
#從url中獲取信息
host_list = requests.get("url")
#通過paramiko連接遠程服務器執行命令
#創建ssh對象
ssh = paramiko.SSHClient()
#允許連接不在know_hosts文件中的主機
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#連接服務器
ssh.connect(hostname="hostname", port=22, username="root", password="password")
#執行命令
stdin, stdout, stderr = ssh.exec_command("hostname")
#獲取結果
result = stdout.read()
print(result)
#關閉連接
ssh.close()
#篩選整理數據
result_dic = {
"網絡信息":result,
}
#發送獲取的數據
requests.post("url", result_dic)
saltstack方式(python語言)
方式同ssh,原理不同
優點:提高速度,開發成本低
缺點:依賴saltstack工具
可以遠程執行命令
http://www.cnblogs.com/wupeiqi/articles/6415436.html
API:Django接收數據並入庫
應用場景:針對服務器較多的公司【推薦】
master:
v = subprocess.getoutput('salt "*" cmd.run "ls"')
saltstack內部原理是通過RPC來實現得消息隊列
步驟一: 安裝saltstack
rpm --import https://repo.saltstack.com/yum/redhat/7/x86_64/latest/SALTSTACK-GPG-KEY.pub
yum install salt-master 服務端
yum install salt-minion 客戶端
步驟二: Master准備
a.配置文件,修改監聽ip
/etc/salt/master
interface: 本機ip地址
b.啟動Master
/etc/init.d/salt-master start
步驟三: Slave准備
a.修改配置文件,連接哪個master
/etc/salt/minion
master: 遠程master的ip
b.啟動Slave
/etc/init.d/salt-slave start
步驟四: 創建關系
Master:salt-key -L 查看哪些連接
salt-key -a 接受連接
salt-key -A 接收全部連接
步驟五: 執行命令
Master:salt "連接" cmd.run "命令"
# salt 是一個.py文件
#!/usr/bin/python
# Publish commands to the salt system from the command line on the master.
from salt.scripts import salt_main
if __name__ == '__main__':
salt_main()
# 在Python文件中使用salt的方法(需要提前配置好)
import salt.client
local = salt.client.LocalClient()
result = local.cmd('對方ip', 'cmd.run', ['命令']) # result是一個字典
result.keys() # 命令
result.values() # 執行結果
puppet(ruby語言)
內部原理:puppet客戶端每30秒鍾自動匯報數據給puppet服務端。
應用場景:主要是針對已經在使用puppet的公司。
基於ruby
優點:自動匯報
缺點:要用ruby寫