① 純干貨!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 本質上並不會減少故障的產生,所以在不同的階段合理利用自身掌握的知識解決當前最重要的痛點,千萬不要本末倒置。
② Python都是拿來做運維嗎
當然不是!
運維只是Python的應用方向之一,實際上Python主要有下面這些方向:
1. 常規軟體開發
Python支持函數式編程和OOP面向對象編程,能夠承擔任何種類軟體的開發工作,因此常規的軟體開發、腳本編寫、網路編程等都屬於標配能力。
2. 科學計算
隨著NumPy, SciPy, Matplotlib, Enthought librarys等眾多程序庫的開發,Python越來越適合於做科學計算、繪制高質量的2D和3D圖像。和科學計算領域最流行的商業軟體Matlab相比,Python是一門通用的程序設計語言,比Matlab所採用的腳本語言的應用范圍更廣泛,有更多的程序庫的支持。雖然Matlab中的許多高級功能和toolbox目前還是無法替代的,不過在日常的科研開發之中仍然有很多的工作是可以用Python代勞的。
3. 自動化運維
這幾乎是Python應用的自留地,作為運維工程師首選的編程語言,Python在自動化運維方面已經深入人心,比如Saltstack和Ansible都是大名鼎鼎的自動化平台。
4. 雲計算
開源雲計算解決方案OpenStack就是基於Python開發的,搞雲計算的同學都懂的。
5. WEB開發
基於Python的Web開發框架不要太多,比如耳熟能詳的Django,還有Tornado,Flask。其中的Python+Django架構,應用范圍非常廣,開發速度非常快,學習門檻也很低,能夠幫助你快速的搭建起可用的WEB服務。
6. 網路爬蟲
也稱網路蜘蛛,是大數據行業獲取數據的核心工具。沒有網路爬蟲自動地、不分晝夜地、高智能地在互聯網上爬取免費的數據,那些大數據相關的公司恐怕要少四分之三。能夠編寫網路爬蟲的編程語言有不少,但Python絕對是其中的主流之一,其Scripy爬蟲框架應用非常廣泛。
7. 數據分析
在大量數據的基礎上,結合科學計算、機器學習等技術,對數據進行清洗、去重、規格化和針對性的分析是大數據行業的基石。Python是數據分析的主流語言之一。
8. 人工智慧
Python在人工智慧大范疇領域內的機器學習、神經網路、深度學習等方面都是主流的編程語言,得到廣泛的支持和應用。
當然,除了以上的主流和前沿領域,Python還在其他傳統或特殊行業起著重要的作用。
摘自:劉江的Python教程
③ 如何做好python自動化運維
隨著移動互聯網的普及,伺服器運維所面臨的挑戰也隨之越來越大。當規模增長到一定程度,手動管理方式已經無法應對,自動化運維成為解決問題的銀彈。Python憑借其靈活性,在自動化運維方面已經被廣泛使用,能夠大大提高運維效率,伺服器集群的規模越大,優勢越明顯。現在不論是linux運維工程師還是Unix運維工程師都需要掌握Python,以提高運維效率。
第一個階段:初級,掌握Python的語法和一些常用庫的使用
掌握一門語言最好的方法就是用它,所以我覺得邊學語法邊刷Leetcode是掌握Python最快的方式之一。
④ 請問python大神自動化運維為什麼要使用python
運維學習Python到底能夠帶來多大的收益?
上午我QQ的一個運維技術群不知道什麼時候開始聊起作為運維人有沒有必要再學習一門編程語言,學什麼最好等,一開始開始我沒看,沒想到竟然在群里討論了近2個小時,一般情況這種問題的都是運維新人,可能目前運維整體情況還不太了解,所以為了讓更多的讓新入行朋友不在迷茫,今天呢我就這個問題表達下我的看法。
一、那作為運維人員要不要學習一門編程語言?
我給出的答案是:「如果不學習一門編程語言,再過2年你可能就得下崗」,我這絕不是危言聳聽,不信你搜下現在對運維崗位的技能要求看看,但如果不夠深刻,那接下里我們從現在運維的情況和未來運維的發展來分析下具體原因:
早些年的運維,基本是會部署個環境,懂點linux命令,再往後點呢,能用shell寫出日常用的自動化腳本,滿足業務的需求基本就可以了,企業對運維要求也是這些,一句話:別出事。但隨著計算機技術的發展,凡是跟技術沾邊的都經過不斷迭代更新,運維屬於技術機的一個分支,也經歷了翻天覆地變化,現在這個時期我個人判斷是要體現運維價值的時代,所以不創造價值的工作將逐漸被自動化運維平台所取代,也就是說之前上線部署很復雜的操作,通過一個運維自動化平台點點滑鼠就可以完成實現,徹底拜託了對人的依賴,這個時期最明顯的就是各個公司基本都有自己的運維平台,要麼再建設中,要麼已經建完了,如果平台就已建完,出於對公司人力成本的考慮,最基礎的運維操作會由類似客服部門的人來負責,所以隨著時間的推移,一些只做日常操作的運維將逐漸從公司消失,那按這個邏輯,既然要搭建運維平台,用shell肯定是不能滿足了,所以你必須學習一門編程語言,這樣你才可能拿到進入這個行業的門票。
以上就是我對大家所討論問題的看法,不對的地方請斧正,如果您也認同,請讓更多的人看到,讓密迷茫的人不在迷茫,最後一句話送給大家共勉,做技術:
時間千萬不要浪費在選擇上,而要多用在行動上!
Python是個非常牛B的腳本語言,能滿足絕大部分自動化運維的需求,又能做後端C/S架構,又能用WEB框架快速開發出高大上的Web界面,只有當你自已有能力做出一套運維自動化系統的時候,你的價值才體現出來,你才有資格跟老闆談重視。加企鵝Q秋:444加513和089連在一起,如果你想學習,這就是你的一個學習機會,提升你的個人價值,你跟大牛隻差一次努力的學習!吹過牛逼不如努力一搏,還在迷茫,還在停滯不前的運維終究會被努力的別人所超越!