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

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就可以裝好。
collober

 

 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)

# 用正則,字符串分割函數...拿到想要的結果
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。

 

目標:

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

只須要改配置文件裏面的一個配置,咱們就可以自如的切換

 

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地址、

相關文章
相關標籤/搜索