1、傳統運維方式和自動化運維的區別前端
2、CMDB的介紹python
3、CMDB的四種方式 linux
4、項目的目錄架構介紹以及配置文件的升級編寫web
5、比較low的項目架構書寫數據庫
6、可插拔式收集資產bootstrap
7、對收集的服務器信息進行清洗centos
8、整個項目的總結api
9、收集資產遇到的惟一標識的大坑服務器
10、開啓線程池併發採集網絡
11、後臺目錄結構設計
12、API請求認證
十3、後臺數據表結構設計
十4、後臺數據表生成
十5、資產清洗入庫
十6、硬盤數據入庫
十7、AES加密數據
十8、將數據展現前端
十9、bootstraptable行內進行編輯
二10、layui的使用
二11、使用echarts,highcharts進行畫圖
Python的幾個方向:
一、Python自動化運維
二、爬蟲(數據分析)
三、web開發
四、人工智能(AI)
1、傳統運維方式和自動化運維的區別
傳統運維:
項目上線的流程:
第一步:產品經理進行前期調研(需求分析)
第二步:和開發進行評審
第三步:開發進行開發
第四步:測試人員進行測試
第五步:交給業務運維人員進行上線 (重點討論這個)--怎麼上線-->直接將代碼給業務運維人員(代碼打一個包用qq傳過來),讓業務運維人員把代碼放到服務器上(拿到代碼解壓,而後放到服務器上)。服務器上須要配一下域名(就跟百度同樣www.baidu.com)纔可以對外服務。
缺點:
增長運維的成本
針對這種傳統的方式有什麼解決優化方案?
改進一:專門搞一個自動分發程序代碼的系統。
a.這個系統的基礎是得有服務器的信息(ip、hostname、等)
b.能不能報警自動化
SMTP
一千臺服務器上放微博的項目,尾部項目出問題了會觸發服務器上一個報警(每臺服務器中都有),發郵件,發短信或者打電話到運維人員手機上。
c.裝機系統
傳統的裝機和佈線:idc運維-->用大量的人力物力來進行裝機。
自動化運維?--->把服務器放到機架上,插一根網線。把服務器ip還有hostname信息告訴一個專門裝機的系統。
我發送一個命令,centos就可以裝好。
d.收集服務器元信息
1.Excel
缺點:人爲干預太嚴重,統計的時候也會有問題
2.搞一個系統---->這就叫CMDB
做用:自動的幫咱們收集服務器的信息,而且自動的記錄咱們的變動信息。
2、CMDB的介紹
自動的幫咱們收集服務器的信息,而且自動的記錄咱們的變動信息。讓全部的操做都變得自動化。
3、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。
目標:
三種方式咱們都要實現兼容
只須要改配置文件裏面的一個配置,咱們就可以自如的切換
4、項目的目錄架構介紹以及配置文件的升級編寫
項目名叫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地址、