CMDB(Configuration Management Database)資產管理系統和 運維自動化


一、傳統運維方式和自動化運維的區別

二、CMDB的介紹

三、CMDB的四種方式  

四、項目的目錄架構介紹以及配置文件的升級編寫

五、比較low的項目架構書寫

六、可插拔式收集資產

七、對收集的服務器信息進行清洗

八、整個項目的總結

九、收集資產遇到的唯一標識的大坑

十、開啟線程池並發采集

十一、后台目錄結構設計

十二、API請求認證

十三、后台數據表結構設計

十四、后台數據表生成

十五、資產清洗入庫

十六、硬盤數據入庫

十七、AES加密數據

十八、將數據展示前端

十九、bootstraptable行內進行編輯

二十、layui的使用

二十一、使用echarts,highcharts進行畫圖 

 

 

Python的幾個方向:

 1、Python自動化運維

 2、爬蟲(數據分析)

 3、web開發

 4、人工智能(AI)

 

一、傳統運維方式和自動化運維的區別

  傳統運維:

    項目上線的流程:

      第一步:產品經理進行前期調研(需求分析)

      第二步:和開發進行評審

      第三步:開發進行開發

      第四步:測試人員進行測試

      第五步:交給業務運維人員進行上線 (重點討論這個)--怎么上線-->直接將代碼給業務運維人員(代碼打一個包用qq傳過來),讓業務運維人員把代碼放到服務器上(拿到代碼解壓,然后放到服務器上)。服務器上需要配一下域名(就跟百度一樣www.baidu.com)才能夠對外服務。

  

缺點:

  增加運維的成本

針對這種傳統的方式有什么解決優化方案?

改進一:專門搞一個自動分發程序代碼的系統。

  a.這個系統的基礎是得有服務器的信息(ip、hostname、等)

  b.能不能報警自動化

SMTP
一千台服務器上放微博的項目,尾部項目出問題了會觸發服務器上一個報警(每台服務器中都有),發郵件,發短信或者打電話到運維人員手機上。
怎么發現服務器報錯信息?

  c.裝機系統

    傳統的裝機和布線:idc運維-->用大量的人力物力來進行裝機。    

    自動化運維?--->把服務器放到機架上,插一根網線。把服務器ip還有hostname信息告訴一個專門裝機的系統。    

我發送一個命令,centos就能夠裝好。
collober

 

 d.收集服務器元信息

    1.Excel

      缺點:人為干預太嚴重,統計的時候也會有問題

    2.搞一個系統---->這就叫CMDB

      作用:自動的幫我們收集服務器的信息,並且自動的記錄我們的變更信息。    

二、CMDB的介紹

  自動的幫我們收集服務器的信息,並且自動的記錄我們的變更信息。讓所有的操作都變得自動化。

  

三、CMDB的四種方式  

大體流程:

 開始收集服務器的元數據:怎么收集虛擬機服務器所有的信息?---->怎么匯報給實體機,數據庫里?

獲取ip地址:

獲取主機名:

獲取硬盤信息:

獲取內存信息:

1.實體機發命令虛擬機執行ifconfig

2.虛擬機執行命令得到執行的結果可以通過socket發送給實體機

3.需要通過正則或者Python的一些字符串函數將ip信息給分析出來

 

 

在實際開發中,收集服務器的信息總共有4中方案:

第一個方案:agent方式 (代理中介的意思)   

  第一步:在每台服務器上寫Python腳本(腳本內容),且python代碼執行的結果還在每台服務器上。

import subprocess

# res = subprocess.getoutput('ipconfig')
res = subprocess.getoutput('ifconfig')

print(res)

# 用正則,字符串分割函數...拿到想要的結果
test.py

  第二步:定時(crontab)的執行收集代碼

linux命令crontab,可以指定在哪一時刻執行某一個腳本。
crontab

  第三步:將執行的結果返回給那台專門收集信息的服務器。用requests模塊,post請求

  第四步:專門收集的服務器收集到所有的服務器信息后放到DB(數據庫)服務器里。

  第五步:搞一個給管理人員或者想要用CMDB系統的人看的Django頁面

注:我們把每一台服務器叫每一個agent。開啟一個agent代表的意思是,在我們每一台服務器上,我們布一個agent腳本(就是我們寫的test.py腳本)。agent腳本目前三行代碼,但將來實際上會非常非常的大。

缺點:每台服務器都要安裝agent

優點:速度快

應用場景:適用服務器多的時候,大公司

agent方式:

  agent腳本

  API

  web界面 

 

第二種方案:ssh連接   另外目前市面上除了使用paramiko模塊本身外,還有fabric,ansible等,它們內部都是基於paramiko模塊實現的

# # ssh類   用於連接遠程服務器並執行基本命令
# import paramiko
#
#
# # 創建SSH對象
# ssh = paramiko.SSHClient()
# # 允許連接不在know_hosts文件中的主機
# ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# # 連接服務器
# ssh.connect(hostname='zhangrenguo', port=22, username='root', password='1')
#
# # 執行命令
# stdin, stdout, stderr = ssh.exec_command('ifconfig')
# # 獲取命令結果
# result = stdout.read()
# print(result.decode('utf-8'))
# # 關閉連接
# ssh.close()
ssh 連接用paramiko

缺點:依賴於網絡,速度慢

優點:不用部署agent

適用於服務器少的

 ssh類(parmiko)

  parmiko(獲取主機名)

  API

  Web界面展示

 

第三種方案:saltstack的工作原理--->

安裝:

#master端:
"""
1. 安裝salt-master
    yum install salt-master
2. 修改配置文件:/etc/salt/master
    interface: 10.0.0.7    # 表示Master的IP 
3. 啟動
    service salt-master start
"""
#slave端:
"""
1. 安裝salt-minion
    yum install salt-minion
2. 修改配置文件 /etc/salt/minion
    master: 10.0.0.7           # 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'

#基於API的方式
import salt.client
local = salt.client.LocalClient()
result = local.cmd('c2.salt.com', 'cmd.run', ['ifconfig'])

 

缺點:所有服務器需要安裝saltstack軟件

優點:直接用現有的軟件,速度快,開發成本低

適用於公司一直使用saltstack,業內最流行的方案

 

saltstack:

  saltstack軟件

  API

  web界面展示 

 

第四種方案:puppet 慢慢被淘汰了

不做了解。

 

四種方式大致的步驟:

  1.收集服務器信息

  2.數據提交給api

  3.文本頁面展示

 

可視化工具:

https://echarts.baidu.com

https://www.highcharts.com.cn/demo/highcharts

 

 在線畫圖工具:

www.processon.com

www.draw.io

 

 

為什么要使用CMDB?

  因為現在統計資產使用的是Excel表格,但業務業務越來越多。導致變更資產的時候,Excel表格越來越亂。為了讓所有的資產收集全部自動化,所以我們做了CMDB。

 

目標:

三種方式我們都要實現兼容

只需要改配置文件里面的一個配置,我們就能夠自如的切換

 

四、項目的目錄架構介紹以及配置文件的升級編寫

項目名叫autoclient

core文件夾

conf目錄放settings一些自定義配置文件settings.py

bin目錄放入口啟動可執行的文件start.py

src放一些核心業務的一些邏輯agent.py

db 放數據相關文件

log 放一些日志相關文件

lib 放一些自己寫的公共的類公共的模塊common.py

test.py測試

 

 

 

配置文件的編寫:

  目標:寫一個類似於Django的配置方法(有自定義的配置文件,還要有項目默認的配置文件)--->無非是集成自定義配置文件和項目默認的配置文件里面的這些配置。通過面向對象高級里面知識!

 

代碼重復

 可以寫一個公共的方法
可以寫一個父類方法
代碼高內聚--->某一個方法就干一件事,剩下的其他的不管。
代碼低解耦--->啟動腳本是腳本,不參與業務邏輯。

 

 

收集的信息:

  主板信息:hostname、Mac地址

  cpu信息:型號,幾個核

  dick(磁盤信息):磁盤大小、幾塊磁盤

  memory(內存信息):

  nic(網卡信息):ip地址、

 

可插拔式的收集上述信息-----什么是可插拔式的?-->在配置文件里的配置,想用的時候去掉注釋,不想用的時候加上注釋。和業務邏輯沒關系。

 

 

接下來升級可插件的__init__文件。 寫代碼收集

 

 

插件的第一種解決方案:

  a、寫一個公共的類

    讓其他的所有的類繼承Base這個基類

  b、

 

  

 

信息已經收集好了---發送給API通過requests模塊-->

  

收集的信息:Linux上的命令

  主板信息:hostname、Mac地址

  cpu信息:型號,幾個核             cat /proc/cpuinfo

  dick(磁盤信息):磁盤大小、幾塊磁盤

  memory(內存信息):

  nic(網卡信息):ip地址、

  

  

 


免責聲明!

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



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