導航:首頁 > 編程語言 > python運維項目實例

python運維項目實例

發布時間:2025-07-18 06:57:14

1. 純干貨!python 在運維中的應用 (一):批量 ssh/sftp

日常工作中需要大量、頻繁地使用ssh到伺服器查看、拉取相關的信息或者對伺服器進行變更。目前公司大量使用的shell,但是隨著邏輯的復雜化、腳本管理的精細化,shell已經不滿足日常需求,於是我嘗試整合工作中的需求,製作適合的工具。 由於管理制度的缺陷,我以工作流程為核心思考適合自己的運維方式,提升工作效率,把時間留給更有價值的事情。 完整代碼在最後,請大家參考。

生產:4000+物理伺服器,近 3000 台虛擬機。

開發環境:python3.6、redhat7.9,除了paramiko為第三方模塊需要自己安裝,其他的直接import即可。

批量執行操作是一把雙刃劍。批量執行操作可以提升工作效率,但是隨之而來的風險不可忽略。

風險案例如下:

掛載很多數據盤,通常先格式化硬碟,再掛載數據盤,最後再寫入將開機掛載信息寫入/etc/fstab文件。在批量lsblk檢查硬碟信息的時候發現有的系統盤在/sda有的在/sdm,如果不事先檢查機器相關配置是否一致直接按照工作經驗去執行批量操作,會很容易造成個人難以承受的災難。

在執行批量操作時按照慣例:格式化硬碟->掛載->開機掛載的順序去執行,假設有的機器因為某些故障導致格式化硬碟沒法正確執行。在處理這類問題的時候通常會先提取出失敗的ip,並再按照慣例執行操作。運維人員會很容易忽略開機掛載的信息已經寫過了,導致復寫(這都是血和淚的教訓)。

所以,為了避免故障,提升工作效率,我認為應當建立團隊在工作上的共識,應當遵守以下原則:

當然,代碼的規范也應當重視起來,不僅是為了便於審計,同時也需要便於溯源。我認為應當注意以下幾點:

1、ssh no existing session,sftp超時時間設置:

在代碼無錯的情況下大量ip出現No existing session,排查後定位在代碼的寫法上,下面是一個正確的示例。由於最開始沒考慮到ssh連接的幾種情況導致了重寫好幾遍。另外sftp的實例貌似不能直接設置連接超時時間,所以我採用了先建立ssh連接再打開sftp的方法。

2、sftp中的get()和put()方法僅能傳文件,不支持直接傳目錄:

不能直接傳目錄,那換個思路,遍歷路徑中的目錄和文件,先創建目錄再傳文件就能達到一樣的效果了。在paramiko的sftp中sftp.listdir_attr()方法可以獲取遠程路徑中的文件、目錄信息。那麼我們可以寫一個遞歸來遍歷遠程路徑中的所有文件和目錄(傳入一個列表是為了接收遞歸返回的值)。

python自帶的os模塊中的os.walk()方法可以遍歷到本地路徑中的目錄和文件。

3、多線程多個ip使用sftp.get()方法時無法並發。

改成多進程即可。

4、多個ip需要執行相同命令或不同的命令。

由於是日常使用的場景不會很復雜,所以借鑒了ansible的playbook,讀取提前准備好的配置文件即可,然後再整合到之前定義的ssh函數中。


同時,我們還衍生出一個需求,既然都要讀取配置,那同樣也可以提前把ip地址准備在文件里。正好也能讀取我們返回的執行程序的結果。

參數說明:

密碼認證:

公鑰認證:

可以配合 grep,awk 等命令精準過濾。

個人認為 Python 在初中級運維工作中的性質更像是工具,以提升工作效率、減少管理成本為主。可以從當前繁瑣的工作中解脫出來,去 探索 更有價值的事情。python 本質上並不會減少故障的產生,所以在不同的階段合理利用自身掌握的知識解決當前最重要的痛點,千萬不要本末倒置。

2. 如何用python做一個設備運維軟體

Python開發的jumpserver跳板機

使用python語言編寫的調度和監控工作流的平台內部用來創建、監控和調整數據管道。任何工作流都可以在這個使用Python來編寫的平台上運行。

企業主要用於解決:通俗點說就是規范運維的操作,加入審批,一步一步操作的概念。

是一種允許工作流開發人員輕松創建、維護和周期性地調度運行工作流(即有向無環圖或成為DAGs)的工具。這些工作流包括了如數據存儲、增長分析、Email發送、A/B測試等等這些跨越多部門的用例。

這個平台擁有和 Hive、Presto、MySQL、HDFS、Postgres和S3交互的能力,並且提供了鉤子使得系統擁有很好地擴展性。除了一個命令行界面,該工具還提供了一個基於Web的用戶界面讓您可以可視化管道的依賴關系、監控進度、觸發任務等。

來個小總結

3. Python 在 Linux 系統運維中都有哪些應用

Python對日常運維工作來說比Perl和Bash都弱。Python做Web開發也比PHP麻煩很多。我個人的感覺Python更像Java,不適合與Perl/Bash比較。
我個人常用的運維工具是Bash為主,Python主要用來做一些演算法演算。因為我的日常維護任務以文件系統維護為主,比較語言要結合場景。
絕大部分的應用需求,所有語言都能完成,但是難易程度不同,選擇語言要看開發者的熟練程度和需求的復雜程度。
如果只是「grep」需求,你選Bash執行grep最簡單,如果稍復雜就用awk,再復雜就用perl。用更通用的語言就是費力不討好。
如果是個矩陣計算需求,perl的數組能把你折騰死,bash的管道能把機器折騰死。
我下面這個觀點一定會有爭議(尤其是PHPer),我傾向於把高級語言分成三類:
1) 底層的C/C++
這是可以寫操作系統,操作硬體的。可以解決一切問題,但是絕大多數互聯網項目不應該用。
2) 中性的Java/Python/Ruby/.NET系列
這是做項目的主要語言,平衡開發效率和執行效率。沒有明顯的亮點,亦沒有明顯的缺點。
3) 特長的PHP/Bash/Perl
在某些特定領域,應該選擇這些有特長的語言。隨著需求越來越全面,語言的短板越用越多,應該控制擴散。

4. 如何基於Python構建一個可擴展的運維自動化平台

Django- 一個開放源代碼的 Web 應用框架,由 Python 寫成,採用了 MVC 的軟體設計模式;
rpyc- 一個 Python 實現的 RPC 和分布式計算的工具。支持同步和非同步操作、回調等;
saltstack 、 ansible 、 func - 基本 Python 開發的自動化配置管理與流程式控制制組件;
Mysql- 是一個非常流行的關系型資料庫管理系統。
二、平台架構設計
1、 OMServer 架構圖

大家對這個架構應該不會感到陌生,三層結構也是目前主流的運營平台架構。
2、 架構說明
OMServer 平台為三層架構,分別為 WEB 交互層、分布式計算層、集群管理服務層。
1) 、第一層:即為 WEB 交互層,典型的 B/S 架構,以供管理員操作的交互平台,也是 OMServer 的核心,基於 Django 開發;
2) 、第二層:分布式計算層,提供與主控端的連接通道,採用的是 rpyc 傳輸協議,協議操作流程:前端模塊參數 -> 加密傳輸 -> 任務執行 -> 返回結果集 -> 解密輸出。
3) 、第三層:集群管理服務層,整合 Python 主流的遠程操作組件(支持 Saltstack 、 Anaible、 Func ),對被控端(業務伺服器集群)進行管理,其中主控端可以根據不同 IDC 環境,採用多地多點的管理方式,可提升冗餘度及執行效率。主控端操作模塊以不同 Python 文件加以區分,便於維護,可靈活定製操作邏輯及橫向擴展等特點。

5. 如何做好python自動化運維

隨著移動互聯網的普及,伺服器運維所面臨的挑戰也隨之越來越大。當規模增長到一定程度,手動管理方式已經無法應對,自動化運維成為解決問題的銀彈。Python憑借其靈活性,在自動化運維方面已經被廣泛使用,能夠大大提高運維效率,伺服器集群的規模越大,優勢越明顯。現在不論是Linux運維工程師還是Unix運維工程師都需要掌握Python,以提高運維效率。

第一個階段:初級,掌握Python的語法和一些常用庫的使用

掌握一門語言最好的方法就是用它,所以我覺得邊學語法邊刷Leetcode是掌握Python最快的方式之一。

閱讀全文

與python運維項目實例相關的資料

熱點內容
單片機控制伺服驅動 瀏覽:192
嘉興程序員接私活平台 瀏覽:670
ppt做成pdf 瀏覽:170
電腦主機如何改成語音伺服器 瀏覽:585
德拉諾飛行可以用命令嗎 瀏覽:745
dayz怎麼把伺服器整崩潰 瀏覽:594
java獲取文件流 瀏覽:700
java遞歸字元串 瀏覽:401
連續有監督演算法 瀏覽:982
win10關閉文件夾訪問限制 瀏覽:399
python編程和node哪個好 瀏覽:274
python有趣循環練習 瀏覽:440
化學專業英語pdf 瀏覽:381
天貓主賬戶掛雲伺服器 瀏覽:531
cmd保存文件命令 瀏覽:147
敲木頭塊解壓 瀏覽:676
白說pdf 瀏覽:148
當下哪個APP最火 瀏覽:162
爆火語音多人聊天app哪個靠譜 瀏覽:578
html生成pdf 瀏覽:821