ITIL:Information Technology Infrastructure Library 信息技術基礎架構庫,主要適用於IT服務管理(ITSM)。ITIL為企業的IT服務管理實踐提供了一個客觀、嚴謹、可量化的標准和規范。
CMDB(Configuration Management Database 配置管理數據庫)
存儲與管理企業IT架構中設備的各種配置信息,它與所有服務支持和服務交付流程都緊密相聯,支持這些流程的運轉、發揮配置信息的價值,同時依賴於相關流程保證數據的准確性。在實際的項目中,CMDB常常被認為是構建其它ITIL流程的基礎而優先考慮,ITIL項目的成敗與是否成功建立CMDB有非常大的關系。
70%~80%的IT相關問題與環境的變更有着直接的關系。實施變更管理的難點和重點並不是工具,而是流程。即通過一個自動化的、可重復的流程管理變更,使得當變更發生的時候,有一個標准化的流程去執行,能夠預測到這個變更對整個系統管理產生的影響,並對這些影響進行評估和控制。而變更管理流程自動化的實現關鍵就是CMDB。
- 整合是指能夠充分利用來自其他數據源的信息,對CMDB中包含的記錄源屬性進行存取,將多個數據源合並至一個視圖中,生成連同來自CMDB和其他數據源信息在內的報告
- 調和能力是指通過對來自每個數據源的匹配字段進行對比,保證CMDB中的記錄在多個數據源中沒有重復現象,維持CMDB中每個配置項目數據源的完整性;自動調整流程使得初始實施、數據庫管理員的手動運作和現場維護支持工作降至最低
- 同步指確保CMDB中的信息能夠反映聯合數據源的更新情況,在聯合數據源更新頻率的基礎上確定CMDB更新日程,按照經過批准的變更來更新 CMDB,找出未被批准的變更
- 應用映射與可視化,應用間的關系以及應用和其他組件之間的依存關系,變更造成的影響等
- 配置項:納入配置管理范疇的工作成果都是配置項(CI)
- 配置項名稱:配置項根據生成規則自動生成的名稱信息
- 設備名稱:該設備的hostname
- 設備序列號:設備的出廠S/N號碼
- 主管人員:設備/系統主管人員
- 維護人員:設備/系統維護人員
- 系統名稱:該設備/應用/系統的標准名稱(地市的系統名稱則添加前綴地市名稱,如:廣州統一信息平台)
- 區域:設備/系統/軟件所使用公司划分,如:省公司、廣州、深圳等
- 網元狀態:工程、退網、退網待刪除、現網(不承載業務)、現網(承載業務)
- 設備類型:使用設備的類型,即交換機、路由器、防火牆、小型機等
- 品牌:設備的品牌,一般國外的廠商用英文大標識,國內的廠商用中文標識;虛擬機的品牌為虛擬技術實現的品牌,如Vmware等
- 管理IP:設備的實際管理IP
- 標准名:統一標准命名規范化;地市_業務系統_設備類型_編號 。如:省公司_綜合網管系統_防火牆_001
目前CMDB資產管理的實現有如下方式:
1.SSH類
基於CMDB中控機和SSH對遠程服務器執行命令實現
1 # 基於paramiko模塊, pip3 install paramiko 2 import requests 3 import paramiko 4 5 # ################## 獲取今日未采集主機名 ################## 6 #result = requests.get('http://www.127.0.0.1:8000/assets.html') 7 # result = ['c1.com','c2.com'] 8 9 10 # ################## 通過paramiko連接遠程服務器,執行命令 ################## 11 # 創建SSH對象 12 ssh = paramiko.SSHClient() 13 # 允許連接不在know_hosts文件中的主機 14 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 15 # 連接服務器 16 ssh.connect(hostname='192.168.179.130', port=22, username='root', password='') 17 18 # 執行命令 19 stdin, stdout, stderr = ssh.exec_command('ifconfig') 20 21 # 獲取命令結果 22 result = stdout.read() 23 24 # 關閉連接 25 ssh.close() 26 print(result) 27 28 # data_dict = {result} 29 30 # ################## 發送數據 ################## 31 # requests.post('http://www.127.0.0.1:8000/assets.html',data=data_dict)
去api取今天未采集資產的主機列表,把主機名拿過來,遠程連接服務器,執行命令,把結果拿回來,給中控機再匯報給api--負責入庫。
優點是無agent,缺點是慢
2.Agent 基於shell命令實現
import subprocess import requests # pip3 install requests # ################## 采集數據 ################## result = subprocess.getoutput('ipconfig') # result正則處理獲取想要數據 # 整理資產信息 data_dict ={ 'nic': {}, 'disk':{}, 'mem':{} } ################## 發送數據 ################## requests.post('http://www.127.0.0.1:8000/assets.html',data=data_dict)
對於Agent的版本的實現思路:
- Agent采集硬件資產
- API提供相關處理的接口
- 管理平台為用戶提供可視化操作
3.saltstack
# 1. 安裝saltstack # rpm --import https://repo.saltstack.com/yum/redhat/6/x86_64/latest/SALTSTACK-GPG-KEY.pub # Master: yum install salt-master Master准備: a. 配置文件,監聽本機IP vim /etc/salt/master interface: 本機IP地址 b. 啟動master /etc/init.d/salt-master start Slave: yum install salt-minion Slave准備: a. 配置文件,連接那個master vim /etc/salt/minion 16行 master: 遠程master地址 b. 啟動slave /etc/init.d/salt-minion start 2. 創建關系 查看 Master:salt-key -L Accepted Keys: Denied Keys: Unaccepted Keys: c1.com c2.com c3.com Rejected Keys: 接受 Master:salt-key -a c1.com Accepted Keys: c1.com c2.com Denied Keys: Unaccepted Keys: c3.com Rejected Keys: 3. 執行命令 master: salt 'c1.com' cmd.run 'ifconfig' import salt.client local = salt.client.LocalClient() result = local.cmd('c2.salt.com', 'cmd.run', ['ifconfig']) vim /usr/bin/salt import requests ################## 獲取今日未采集主機名 ################## result = requests.get('http://www.127.0.0.1:8000/assets.html') result = ['c1.com','c2.com'] ################## 遠程服務器執行命令 ################## import subprocess result = subprocess.getoutput("salt 'c1.com' cmd.run 'ifconfig'") import salt.client local = salt.client.LocalClient() result = local.cmd('c2.salt.com', 'cmd.run', ['ifconfig']) ################## 發送數據 ################## requests.post('http://www.127.0.0.1:8000/assets.html',data=data_dict)
4.Puppet
基於Puppet的factor和report功能實現
優點是自動匯報,缺點是使用ruby語言