今天與你們一塊兒探討如何基於Python構建一個可擴展的運維自動化平臺,也但願能與你們一塊兒交流,共同成長。前端
這次分享將經過介紹OMServer、OManager具有的功能、架構設計、模塊定製、安全審計、C/S結構的實現等幾個方面的內容來展開。linux
默認安裝且跨平臺sql
可讀性好且開發效率高數據庫
豐富的第三方庫(開發框架、各種API、科學計算、GUI等)編程
社區活躍&衆多開發者。設計模式
Python在騰訊的現狀,根據去年內部提交組件語言統計,除去二、三、4前端技術,Python在高級編程語言中排第3位。緩存
應用在系統運維、業務邏輯、運營平臺、測試工具、數據挖掘等領域,騰訊大名鼎鼎的「藍鯨」運維PAAS平臺就是基於Python語言來構建的。安全
OMServer 一個集中式的Linux集羣管理(基礎)平臺,具有業務集羣管理、實時安全審計、功能模塊定製、數據加密傳輸、支持主流Python組件、使用簡單且體驗好等特色。服務器
一、平臺截圖微信
二、平臺採用到的第三方庫
Django : 一個開放源代碼的Web應用框架,由Python寫成,採用了MVC的軟件設計模式;
rpyc : 一個 Python 實現的RPC和分佈式計算的工具。支持同步和異步操做、回調等;
saltstack 、ansible 、func : 基本Python開發的自動化配置管理與流程控制組件;
Mysql : 是一個很是流行的關係型數據庫管理系統。
一、OMServer架構圖
二、架構說明
OMServer平臺爲三層架構,分別爲WEB交互層、分佈式計算層、集羣管理服務層。
第一層:即爲WEB交互層,典型的B/S架構,以供管理員操做的交互平臺,也是OMServer的核心,基於Django開發;
第二層:分佈式計算層,提供與主控端的鏈接通道,採用的是rpyc傳輸協議。
協議操做流程:
前端模塊參數->加密傳輸->任務執行->返回結果集->解密輸出。
第三層:集羣管理服務層,整合Python主流的遠程操做組件(支持Saltstack、Anaible、Func),對被控端(業務服務器集羣)進行管理,其中主控端能夠根據不一樣IDC環境,採用多地多點的管理方式,可提高冗餘度及執行效率。
主控端操做模塊以不一樣Python文件加以區分,便於維護,可靈活定製操做邏輯及橫向擴展等特色。
三、平臺架構優點
管理端多機支持,可按不一樣IDC劃分;
安全性高,加密傳輸、定義私有通信規範(TCP);
支持多種管理客戶端接入(WEB、桌面、移動);
調用Python組件的高級特性(Playbook、State);
功能擴展性能力強,模塊定製化。
四、架構操做流程
上圖將三個層次的交互流程進行串連,能夠清晰瞭解OMServer架構的操做流程,結束了傳統式直連APP Server的操做,更加規範咱們的操做事件,必定程度能夠避誤一些潛在的誤操做。
五、整合遠程操做Python組件
分兩步:
提早配置主控端與被控端的信任關係,通常爲證書或SSH 認證;
經過OMServer主控端封裝好的任務模塊與API接口,實現定製化的任務下發及執行。
一、任務模塊定製的思路
1)任務模塊:即爲一個「操做事件」爲顆粒的任務,如重載配置、部署緩存服務、中止Nginx服務等原子操做;
2)添加模塊的步驟:
① 定義任務模塊「輸入參數」,採用HTML Form元素,能夠爲輸入、下拉、單複選框等元素;
② 編寫後臺模塊代碼,其中執行部分由Saltstack或Ansible的Client_API來實現;
③ 任務模塊核心代碼,只須要5行代碼就能夠實現一個SHELL腳本下發、執行的功能。
3)運行模塊的步驟: 選擇任務模塊 & 操做對象 -> 指定輸入參數 -> 運行 -> 返回執行結果。
二、當咱們的平臺已經具有可定製、擴展操做的能力,運維的核心工做就聚焦如下幾點:
平臺功能改進、升級,須要具有DevOps能力;
根據業務運營需求,作任務功能模塊的編寫的工做;
平常工做梳理(標準、流程化建設),更好將原子操做串成流程;
系統、業務的調優,服務業務。
一、安全審計技術架構
安全審計功能模塊分兩部分,一部分爲操做事件前臺展現,另部分爲部署在服務器側的採集Agent,經過CGI接口上報至數據庫存儲,可對上報的數據做關鍵字監控,發現異常能夠觸發告警。
二、Agent上報實現原理
① 實現原理很是簡單,經過修改Linux系統環境配置文件/etc/profile,定義history事件相關環境變量,捕捉全部Linux登陸用戶會話中的操做事件及指令,實時經過OMAudit_agent.py中的HTTP GET CGI向數據庫寫操做事件流水。
② 管理前臺頁面經過定時刷新,獲取最新的操做事件。
一、OManager桌面版截圖
二、OManager桌面版架構
三、後續優化
整合ansible或saltstack高級功能,如ansible playbook;
將多個任務模塊打包成模板對列,實現原子操做與運維變動流程的結合;
引用任務調度Celery,支持更大併發;
任務對列支持暫停、停止、重運行功能,實現操做可控;
提供與CMDB訪問對接,通用性更強。
文章來源:馬哥教育
官方微信:馬哥linux運維
Linux運維學習交流羣:537045784