CMDB運維開發項目


 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語言

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM