Python自動化運維:分享高性能可擴展的實用框架
一直在用Python寫各種腳本,想做自動化運維平臺卻有心無力,沒有見過大的運維平臺怎么做,
自己寫的腳本在大的場景下是否靠譜,每當討論說一些基于ssh獲取數據執行操作的方式都會被鄙視。
迷茫大半年找不到方向,最近在reboot系統學習了下,收獲很多,很多疑惑和疑難問題終于解開了。
感謝PC老師講解,程序對系統利用的深入講解[cpu\內存的利用\系統的特性],
幾款典型開源軟件源碼的網絡模型剖析,如何真正控制多線程,守護進程如何fork的,封裝socket非阻塞的框架,如何制定傳輸協議。
-
監控和執行命令流程圖
軟件目錄 [根據需要分分鐘復制出一個server,改改操作就好了]
任務控制服務的傳輸數據
flask數據接口的請求日志
agent的執行日志
agent的4個線程,可隨意擴展需求
后臺請求頁面和數據接口
-
頁面ajax調用數據接口
-
監控數據出圖
哎!前面的數據,6個server同時在一個機器上跑,毫無壓力,監控圖不好看。。。。我來搞幾百個并發shell進程跑跑,把load壓上來。
-
執行命令 [發出ajax請求,agent異步處理,傳回入庫后,再用ajax動態調用數據接口顯示]
總結
此架構非常靈活,任意拆裝拼接,如果小,可功能集成于一點,如果大,可隨意擴展瓶頸,server全部守護進程方式。
一切魔法都封裝在nbNet模塊中,socket非阻塞,自定義傳輸協議,QPS幾萬毫無壓力,所有模塊全部導入這個nbNet模塊,收發接口全部統一,就可隨意拼接,3分鐘就可以擴展出一個不同功能的server。得此神器,只有想不到沒有做不到。
nbNet模塊中2個重要功能,已經全部封裝好了,只需要調用即可。
sendData(sock_a, "reboot", 50003, input) # 發送數據,也可任意發多份給不同server nbNet(self.host, self.port, transfer) # 接收數據
flask_web 就是極簡單的幾個數據接口和html頁面,不得不承認大家確實都覺得一些比較炫的web頁面就很牛,不會過多關注后臺怎么回事,有張漂亮的臉也確實吸引 人,不過確實需要花不少時間折騰,像我這種根本不懂審美,時間又有限,只能做成這個熊樣了,真心不喜歡折騰web頁面,啥時候用啥時候看,看過了還是忘, 這里緊緊做了一些監控出圖和執行命令的ajax調用。底層框架有了,頁面隨便找個做前端的小妹紙配合下就好了。
其他的server流程基本一致,不做過多重復展示了,文件傳輸在另外一個分支上做了,暫時沒有合并,有這套框架,業務和功能比較好擴展了。
這里關于諸多實際情況都做出了考慮,比如agent睡眠時間漂移,監控數據丟失后時間戳不連續,報警動態加載配置,網絡狀態不好等等。但還是有很多細節需要逐步完善的地方