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

自學了一段時間python,感覺可能是我學習的姿勢不太對。總是感覺python相比於shell和perl更偏向於web開發。而對linux的運維管理偏弱。

拋開fabric等這類用python開發的運維工具不談。自己在日常運維中運用python能做些什麼?比shell腳本便捷或效率高的地方又體現在哪裡?

現在只用python寫過部分日誌分析腳本和從頁面中提取uid生成鏈接然後測試播放等動作的簡單腳本。

其他的就不知道做些什麼好了。

想請知乎上的前輩多給些指點,如果能有些具體實例就更好不過了。

相同問題也在v2ex上發表了提問 http://www.v2ex.com/t/75193

多謝大家


自薦一下自己的挫作,《Python Linux系統管理與自動化運維》,完整的目錄在這裡:lalor/python_for_linux_system_administration

詳細說明:(Python進階必看)賴明星的Python精品圖書重磅發布!!

購買鏈接:Python Linux系統管理與自動化運維


謝邀!本文經采編網路觀點整合而成。

——————

有做運維的同學問,到底學會Python運維開發,還要學習哪些項目?我特別再跟餓了么、阿里巴巴、唯品會的幾位做Python運維開發的大大們交流了下,修改了本文的部分內容,更新時間:2017.07.25下午14:08

你想更深入了解學習Python知識體系,你可以看一下我們花費了一個多月整理了上百小時的幾百個知識點體系內容:

【超全整理】《Python自動化全能開發從入門到精通》筆記全放送

——————

現階段,掌握一門開發語言已經成為高級運維工程師的必備計能,不會開發,你就不能充分理解你們系統的業務流程,你就不能幫助調試、優化開發人開發的程序, 開發人員有的時候很少關注性能的問題,這些問題就得運維人員來做,一個業務上線了,導致 CPU 使用過高,內存佔用過大。

如果你不會開發,你可能只能查到進程級別,也就是哪個進程佔用這麼多,然後呢?然後就交給開發人員處理了,這樣咋體現你的價值?

另外,大一點的公司,伺服器都上幾百,上千,甚至數萬台,這種情況下怎樣做自動化運維?用 SHELL 寫腳本 FOR 循環?呵呵,歇了吧, SHELL 也就適合簡單的系統管理工作。到複雜的自動化任務還得要用專門的開發語言。你可能說了,自動化管理有專門的開源軟體\監控也有,直接拿來用下就好了,但是現有的開源軟體如 puppetsaltstackzabbix
agio 多為通用的軟體,不可能完全適用你公司的所有需求,當你需要做定製、做二次開發的時候,你咋辦?找開發部門?開發部門不懂運維的實際業務邏輯,寫出來的東西爛爛不能用,這活最後還得交給運維開發人員來做。

其次,不會運維開發,你就不能自己寫運維平台\複雜的運維工具,一切要藉助於找一些開源軟體拼拼湊湊,如果是這樣,那就請不要抱怨你的工資低,你的工作不受重視了。

那為什麼是Python?PYTHON 第一是個非常牛 B 的腳本語言, 能滿足絕大部分自動化運維的需求,又能做後端 C/S 架構,又能用 WEB 框架快速開發出高大上的 WEB 界面,只有當你自已有能力做出一套運維自動化系統的時候,你的價值才體現出來,你才有資格跟老闆談重視, 否則,還是老老實實回去裝機器吧。

下面我們來說說主要的幾個在Linux運維中的常用的一些應用:

第一、靜態文件伺服器

重點練習使用redux管理狀態.

前端api與後端交互、數據封裝、狀態變化等

第二、Python開發的jumpserver跳板機

jumpserver跳板機是一款由Python編寫開源的跳板機(堡壘機)系統,實現了跳板機應有的功能。基於ssh協議來管理,客戶端無需安裝agent。

企業主要用於解決:可視化安全管理

特點:完全開源,GPL授權

Python編寫,Django開發框架,容易再次開發

實現了跳板機基本功能:認證、授權、審計。集成了Ansible、批量命令等。功能強大。

通俗點就是起到監控誰在伺服器上做了什麼操作等。錄像回放、命令搜索、實時監控、批量上傳下載等。

第三:Python開發的Magedu分散式監控系統

以自動化運維視角為出發點,自動化功能、監控告警、性能調優,結合saltstack實現自動化配置管理等內容進行了全方位的深入剖析。

企業主要用於解決:自動化監控常用系統服務、應用、網路設備等。分散式可監控更多伺服器,分區域監控再匯總。Zabbix監控結合Python自定義監控腳本。

監控系統需求討論:

監控常用系統服務、應用、網路設備等?一台主機上可監控多個不同服務、不同服務的監控間隔可不同?同一個服務在不同主機上的監控間隔、報警閾值可不同?告警級別?數據可視化,如何做出簡潔美觀的用戶界面?如何實現單機支持5000+機器監控需求?採取何種通信方式?主動、被動?

第四:Python開發的Magedu的CMDB

cmdb的開發需要包含三部分功能:採集硬體數據、API、頁面管理。

企業主要用於解決:項目功能,採集硬體數據、Api、頁面管理。統計資產,例如伺服器存放位置,伺服器上的賬號等等。

執行服務的過程如下:伺服器的客戶端採集硬體數據,然後將硬體信息發送到API,API負責將獲取到的數據保存到資料庫中,後台管理程序負責對伺服器信息的配置和展示。

第五:Python開發的任務調度系統

Python任務調度系統的multiprocessing模塊不但支持多進程,其中managers子模塊還支持把多進程分布到多台機器上。

企業主要用於解決:通俗的理解,批量管理crontab定時任務。原理用戶通過web頁面設置任務,傳輸到任務調度系統伺服器上的客戶端,客戶端收集數據反饋給伺服器端,伺服器端根據任務具體內容調度後端的集群伺服器做定時任務。

一個服務進程可以作為調度者,將任務分布到其他多個機器的多個進程中,依靠網路通信。想到這,就在想是不是可以使用此模塊來實現一個簡單的作業調度系統。

第六:Python運維流程系統

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

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

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

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

來個小總結

幾個實戰項目之間的結合,可以理解成,運維流程系統,就是規範運維的每一步操作,審批通過後,通過調用任務調度系統來定製批量操作。任務調度系統操作的過程中,可以通過CMDB資產管理系統來獲取伺服器的詳細信息,ip地址,用戶名,密碼等。

如果是需要運維人員直接登陸到伺服器上操作,需要通過跳板機來登陸伺服器,記錄誰登陸了哪台伺服器,具體做了什麼操作等。

——————————

以上為常見的五種應用,請指點!

Python自動化主要幫助企業解決日常繁雜的工作事務,數據化、可視化的監控日常的業務運行情況。

歡迎一起交流和補充!


我更喜歡用「系統管理」來形容「運維」這項工作。運維聽起來是偏執行的一項工作。python在系統管理上的優勢在與強大的開發能力和完整的工具鏈。python的工程開發能力強大,遠強於各種shell和perl。易讀易寫,兼具面向對象和函數式風格,還有不錯元編程能力。通過系統化的將各種管理工具結合,對上述的各類工具進行二次開發,形成統一的伺服器管理系統。

和python類似的ruby也很適合編寫系統管理軟體,但是在相關庫和工具上,比python差太多。

舉個栗子: 某牛人,精通 bash,python,perl,ruby ,在工作中寫了數百個單一功能的腳本(任何語言)來進行日常操作,涵蓋了監控,部署,網路配置,日誌分析,安全檢測 等等許許多多的方面,無所不包。他所作的,只是操作,並沒有把系統管理這項工作做好。再多的腳本,也只是把「操作」這個行為做到極致。寫再多的腳本,也不能轉化為公司在系統管理上的寶貴資產。

讓系統易於管理,是一個工程。只有像puppet(ruby),saltstack(python) 這樣的自動化管理工具,才能完整的描述整個系統,並且讓系統管理的方方面面納入統一的體系,而不是一堆腳本。

python在伺服器管理工具上非常豐富,配置管理(saltstack) 批量執行( fabric, saltstack) 監控(Zenoss, nagios 插件) 虛擬化管理( python-libvirt) 進程管理 (supervisor) 雲計算(openstack) ...... 還有大部分系統C庫都有python綁定。

對於流程確定的事情,最終一定是納入系統管理的體系,寫成程序,成為系統的一部分。而不是無法復用遊離與整體的各種腳本。

隨著雲計算時代的來臨,中小型公司,不需要運維了。大型公司,沒有工程開發能力的運維,是沒有競爭力的。


你一個月寫幾個運維腳本?維護幾個運維腳本?這倆加起來少於10個的話,用bash和python都沒啥區別。

P.S. Python偏向web?太榮幸了…我以為會說PHP的…


不會py的sa不是合格的sa, 曾經用expect管理了兩百台伺服器, 現在覺得太二了.

前兩天剛把miller的內核網卡中斷補丁腳本用不到10行py搞定仍salt里了. 可見py的簡潔.

運維自動化配置目前還是py和ruby為主


如果撇開 fabric 和 func 這種大殺器再說……我目前的感覺是,任何不是「閱後即焚」的一次性腳本,尤其可能需要日後修改調整的、稍有邏輯處理的腳本,都應該用 Python 代替 Bash。想想「我有一堆主機,我要分別……」這種數組操作吧。想想偉大的 bash 字元串替換。想想 quoting。Bash 完美繼承了 Perl 的 「Write-only」屬性。

非運維,自己實驗室有一摞小機器的人路過。

@馮偉剛 執行效率 Bash 高?您的簽名里「軟體工程師」是開玩笑的吧?

python_vs_bash_benchmark.zip

  • The Python program in this example is about 6 times faster than the BASH program.

  • Python is a little slower in this example as it is only 3 times faster than BASH
  • Python is roughly 5.5 times faster than BASH in this test.

  • With Python lists being 29 times faster and Python dictionaries being 23.7 times faster using BASH for
    any kind of sequential data manipulation is unacceptable (unless it is very small amounts of data).

  • Since in this simple function calling program Python is 11.77 times faster than BASH, BASH is therefore
    restricted to linear program whereas Python is only 48% (verses the 476% of BASH) slower than the non function calling program and for that reason is a very good structured programming language (keep in
    mind that 10000 function calls were made in both programs).

其實根本不需要看任何測試。一個大量操作依賴進程間通信,沒有 JIT 和中間碼優化,對複雜數據結構的支持約等於零的 Bash,要和 Python 在功能和效率上進行任何比較的方法,就是執行 ./xxx.py 或者乾脆寫成 C 程序吧。


謝邀。你說的對,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

在某些特定領域,應該選擇這些有特長的語言。隨著需求越來越全面,語言的短板越用越多,應該控制擴散。


bash用的熟的話固然不錯,但python的優點在於有很多web框架可視化運維過程和結果

這個從用戶友好度上是沒法比的


如果拋開fabric,甚至saltstack、ansible這種運維工具的話,很難體現出python的強大。

可以讀一下 《Python UNIX 和Linux 系統管理指南》, 體會一下。


發現專註這一塊的人都是有偏向性的行業,如雲XXX公司,網站XXX公司,或者說嚴重依賴伺服器為盈利的公司.

但還是要說一下,運維是一個很大的技術範圍.任何可以自己用python寫一個nagios之類的人,完全可以改行當開發了,但你末必是一個維護大師.

有很多的公司linux這一塊或者說對外應用根本就沒有,要的就是信息安全,多地協同.生產環境的穩定就可.一個能夠根據不同的生產環境來架構系統並保證正常工作的才是運維要關注的.有人說多少年以後什麼樣的運維沒需求了?五年前有人就說虛擬化將取代XXXX,但實際呢你取代了嗎?

一直認為,一個好的運維工程師絕不是軟體開發工程師,那種極度依賴運維人員和盈利掛勾的公司可能你的工作職位有一定保障性,但你末必就是一個好的運維.也有人說什麼都可以外包,我還要一個不懂開發的運維幹什麼?

那隻能說明你的企業並不需要運維,誰都知道桌面類問題是個大學生都會搞,不就是重裝系統嗎.但是如果三地協同,你要怎麼來架構?(mpls只是運營商提供給你的線路,並不會幫你建設內部的路由設置)公司有安全需求,各個部門你又要如何來協調安全和方便的點.虛擬化每個部門的要求你都明白?什麼部門需要HPC什麼部門需要ucs又或者哪些部開源的就可以..等等等.

linux不以此伺服器盈利為目地的公司,shell或者nagios完全可以滿足所有要求.就好比程序中的一個模塊而巳.只是現在很多的公司要的都是偏開發的linux腳本碼農,順帶維護這些不能down機的服務而巳!並不是真正的運維工程師.


用Python寫的運維小工具,架構清晰簡單,不依賴於第三方庫

toddlerya/NebulaSolarDash


推薦閱讀:

Python 關於讀寫txt的問題?
Python Shell 中敲擊方向鍵顯示「^[[C^[[D」,原因是什麼?如何修復?
為什麼python代碼有時候在命令行下和Python Shell中執行的結果不一樣呢 ?
Python 曾經開發過哪些了不起的程序或遊戲?
Python分析中文文字有哪些方法,那些庫?

TAG:Python | Linux | 運維 | Linux運維 | Python運維 |