python目前主流的幾個大方向:
- Python自動化運維(*****)----》cmdb
- 爬蟲、數據分析方向(****)
- web開發(** PHP)
- 人工智能(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的配置方法