一、傳統運維方式和自動化運維的區別
二、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就能夠裝好。
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) # 用正則,字符串分割函數...拿到想要的結果
第二步:定時(crontab)的執行收集代碼

linux命令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()
缺點:依賴於網絡,速度慢
優點:不用部署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地址、