CMDB(資產管理資料庫) CMDB是所有運維工具的數據基礎 CMDB包含的內容 CMDB實現的三種方式 (1)Agent實現方式:Agent方式,可以將伺服器上面的Agent程式作定時任務,定時將資產信息提交到指定API錄入資料庫 其本質上就是在各個伺服器上執行subprocess.getoutp ...
CMDB(資產管理資料庫)
CMDB是所有運維工具的數據基礎
CMDB包含的內容
- 用戶管理,記錄測試,開發,運維人員的用戶表
- 業務線管理,需要記錄業務的詳情
- 項目管理,指定此項目用屬於哪條業務線,以及項目詳情
- 應用管理,指定此應用的開發人員,屬於哪個項目,和代碼地址,部署目錄,部署集群,依賴的應用,軟體等信息
- 主機管理,包括雲主機,物理機,主機屬於哪個集群,運行著哪些軟體,主機管理員,連接哪些網路設備,雲主機的資源池,存儲等相關信息
- 主機變更管理,主機的一些信息變更,例如管理員,所屬集群等信息更改,連接的網路變更等
- 網路設備管理,主要記錄網路設備的詳細信息,及網路設備連接的上級設備
- IP管理,IP屬於哪個主機,哪個網段, 是否被占用等
CMDB實現的三種方式
(1)Agent實現方式:Agent方式,可以將伺服器上面的Agent程式作定時任務,定時將資產信息提交到指定API錄入資料庫
其本質上就是在各個伺服器上執行subprocess.getoutput()
命令,然後將每台機器上執行的結果,返回給主機API,然後主機API收到這些數據之後,放入到資料庫中,最終通過web界面展現給用戶
優點:速度快
缺點:需要為每台伺服器部署一個Agent程式,適用於上萬台機器
(2)ssh實現方式 (基於Paramiko模塊)
中控機通過Paramiko(py模塊)登錄到各個伺服器上,然後執行命令的方式去獲取各個伺服器上的信息
優點 :無Agent 缺點:速度慢,適用於一兩百台機器
在機器台數不多時候可用此方法
1 import paramiko 2 # 創建SSH對象 3 # ssh = paramiko.SSHClient() 4 # 允許連接不在know_hosts文件中的主機 5 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 6 # 連接伺服器 7 ssh.connect(hostname='c1.salt.com', port=22, username='root', password='123') 8 9 # 執行命令 10 stdin, stdout, stderr = ssh.exec_command('df') 11 # 獲取命令結果 12 result = stdout.read() 13 14 # 關閉連接 15 ssh.close()View Code
(3)saltstack方式
此方案本質上和第二種方案大致是差不多的流程,中控機發送命令給伺服器執行。伺服器將結果放入另一個隊列中,中控機獲取將服務信息發送到API進而錄入資料庫。
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.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 """
授權
salt-key -L # 查看已授權和未授權的slave salt-key -a salve_id # 接受指定id的salve salt-key -r salve_id # 拒絕指定id的salve salt-key -d salve_id # 刪除指定id的salve
執行命令
在master機器上執行對salve進行遠程操作
salt 'c2.salt.com' cmd.run 'ifconfig'
import subprocess
cmd = "salt '*' cmd.run 'ifconfig'"
res = subprocess.getoutput(cmd)
print(res)
基於API方式
import salt.client local = salt.client.LocalClient() result = local.cmd('c2.salt.com', 'cmd.run', ['ifconfig'])