CMDB項目實戰一

python目前主流的幾個大方向:

  1. Python自動化運維(*****)----》cmdb
  2. 爬蟲、數據分析方向(****)
  3. web開發(** PHP)
  4. 人工智能(AI)

今天所要講的CMDB項目是對運維行業,先來簡單瞭解下傳統運維與自動化運維的一些區別:

傳統運維
    1.項目上線
        a.產品經理前期調研
        b.和開發進行評審
        c.開發進行開發
        d.測試進行測試
        e.交給運維人員進行上線

    上線:
            直接將代碼給運維人員,讓業務運維人員把代碼放到服務器上
        
        痛點:
            增加運維的成本
        
        改進:
            搞一個自動分發代碼的系統 
            必須的條件:
                服務器的信息(ip, hostname等)
        
        2. 能不能把報警自動化
        
        3. 裝機系統:
            傳統的裝機和佈線:
                idc運維 
                    
                    用大量的人力和物力,來進行裝機
                
                自動運維:
                    
                    collober 自動發送命令裝機
        
        4. 收集服務器的元信息:
            a. excel表格
                缺點: 
                    - 人爲干預太嚴重
                    - 統計的時候也會有問題
            
            b. 搞一個系統
                作用: 自動的幫我收集服務器的信息,並且自動的記錄我們的變更信息
            
        cmdb: 
            
            作用: 自動的幫我收集服務器的信息,並且自動的記錄我們的變更信息
            
        願景:
            解放雙手, 讓所有的東西全部的都自動化
        
    開始收集服務器的元數據:
        
        在實際開發中,收集服務器的信息總共有4種方案: 
            
            
            1. agent方式:
                - agent腳本
                - API
                - web界面
                Agent方式,可以將服務器上面的Agent程序作定時任務,定時將資產信息提交到指定API錄入數據庫

其本質上就是在各個服務器上執行subprocess.getoutput()命令,然後將每臺機器上執行的結果,返回給主機API,然後主機API收到這些數據之後,放入到數據庫中,最終通過web界面展現給用戶
優點:速度快
缺點:需要爲每臺服務器部署一個Agent程序


            2. ssh類(paramiko, frbric, ansible)
                - paramiko模塊 (獲取主機名)
                - API
                - web界面
            中控機通過Paramiko(py模塊)登錄到各個服務器上,然後執行命令的方式去獲取各個服務器上的信息

 

優點:無Agent 缺點:速度慢

 

如果在服務器較少的情況下,可應用此方法

import paramiko
   
# 創建SSH對象
ssh = paramiko.SSHClient()
# 允許連接不在know_hosts文件中的主機
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 連接服務器
ssh.connect(hostname='c1.salt.com', port=22, username='root', password='123')
   
# 執行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 獲取命令結果
result = stdout.read()
   
# 關閉連接
ssh.close()


            3. salt-stack方式(python3):
                - slat-stack軟件
                - API
                - web界面

 

此方案本質上和第二種方案大致是差不多的流程,中控機發送命令給服務器執行。服務器將結果放入另一個隊列中,中控機獲取將服務信息發送到API進而錄入數據庫。

 

優點:快,開發成本低 缺點:依賴於第三方工具  

 

1.安裝和配置

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

注:
"""
ps aux   查看所有進程
ps aux | grep salt-master    查看salt-master進程開啓狀態
"""

2.授權

"""
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
"""

3.執行命令

 

在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'])

 

參考安裝:
http://www.cnblogs.com/tim1blog/p/9987313.html
https://www.jianshu.com/p/84de3e012753


            4. puppet(ruby)(瞭解即可)
            
            畫圖(echarts highcharts)
            
        大致的步驟:
            
            1. 收集服務器的信息
    
            2. 數據提交給API
            
            3. web頁面展示
        
        crontab:
            13  11   *   *   *   *     python3 test.py  > a.txt
            分  時  日  月  周  年
           
        Hexo + markdown 寫博客
        
        gap year
        
    寫代碼:
        三種CMDB採集的方案:
            - agent方式採集: 
                - 場景: 服務器比較多
                - 缺點: 需要每一臺服務器上部署
                - 優點: 速度快
            
            - ssh類(parmiko fabric ansible):
                - 缺點: 速度慢  需要一臺中控機
                - 優點: 不需要部署agent腳本
                - 場景: 服務器比較少
            
            - salt-stack方式:
                - 缺點: 每一臺需要部署這個軟件
                - 優點: 速度快, 開發成本低
                - 場景: 企業之前已經在用
        
        目標:
            
            三種方案我們都要實現兼容
            只需要改配置文件裏面的一個配置,我們就能夠自如的切換
                        
        採集服務器的信息代碼編寫(1/3)
            
            項目的目錄結構:
                - bin : 執行文件夾
                - config: 自定義配置文件
                - lib: 公共的模塊或者類文件
                - src: 核心業務邏輯代碼
                - tests: 測試的亂代碼
                          
            配置文件的編寫:
                目標: 寫一個類似於django的配置方法

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章