本文目錄一覽:
- 1、如何監控在伺服器上運行的多個python腳本的狀態?
- 2、純乾貨!python 在運維中的應用 (一):批量 ssh/sftp
- 3、Python能幹什麼
- 4、python,求助,伺服器走的sftp協議,怎麼獲取上面的文件
如何監控在伺服器上運行的多個python腳本的狀態?
linux系統的話,監控工具比較好的有ganglia,zabbix
windows系統的話,用自帶的「性能監視器」(老版本的windows叫性能計數器)
純乾貨!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中s方法可以獲取遠程路徑中的文件、目錄信息。那麼我們可以寫一個遞歸來遍歷遠程路徑中的所有文件和目錄(傳入一個列表是為了接收遞歸返回的值)。
python自帶的os模塊中的os.walk()方法可以遍歷到本地路徑中的目錄和文件。
3、多線程多個ip使用s方法時無法並發。
改成多進程即可。
4、多個ip需要執行相同命令或不同的命令。
由於是日常使用的場景不會很複雜,所以借鑒了ansible的playbook,讀取提前準備好的配置文件即可,然後再整合到之前定義的ssh函數中。
同時,我們還衍生出一個需求,既然都要讀取配置,那同樣也可以提前把ip地址準備在文件里。正好也能讀取我們返回的執行程序的結果。
參數說明:
密碼認證:
公鑰認證:
可以配合 grep,awk 等命令精準過濾。
個人認為 Python 在初中級運維工作中的性質更像是工具,以提升工作效率、減少管理成本為主。可以從當前繁瑣的工作中解脫出來,去 探索 更有價值的事情。python 本質上並不會減少故障的產生,所以在不同的階段合理利用自身掌握的知識解決當前最重要的痛點,千萬不要本末倒置。
Python能幹什麼
1、Web開發
由於Python是一種解釋型的腳本語言,開發效率高,所以非常適合用來做Web開發。
Python有上百種Web開發框架,有很多成熟的模板技術,選擇Python開發Web應用,不但開發效率高,而且運行速度快。常用的web開發框架有:Django、Flask、Tornado等。
由於後台伺服器的通用性,除了狹義的網站之外,很多App和遊戲的伺服器端也同樣用 Python實現。
2、網路爬蟲
網路爬蟲是Python比較常用的一個場景,國際上,google在早期大量地使用Python語言作為網路爬蟲的基礎,帶動了整個Python語言的應用發展。以前國內很多人用採集器搜刮網上的內容,現在用Python收集網上的信息比以前容易很多了,如:
從各大網站爬取商品折扣信息,比較獲取最優選擇;
對社交網路上發言進行收集分類,生成情緒地圖,分析語言習慣;
爬取網易雲音樂某一類歌曲的所有評論,生成詞雲;
按條件篩選獲得豆瓣的電影書籍信息並生成表格……
3、人工智慧
Python有很多庫很方便做人工智慧,比如numpy,
scipy做數值計算的,sklearn做機器學習的,pybrain做神經網路的,matplotlib將數據可視化的。在人工智慧大範疇領域內的數據挖掘、機器學習、神經網路、深度學習等方面都是主流的編程語言,得到廣泛的支持和應用。
人工智慧的核心演算法大部分還是依賴於C/C++的,因為是計算密集型,需要非常精細的優化,還需要GPU、專用硬體之類的介面,這些都只有C/C++能做到。
4、數據分析
數據分析處理方面,Python有很完備的生態環境。「大數據」分析中涉及到的分散式計算、數據可視化、資料庫操作等,Python中都有成熟的模塊可以選擇完成其功能。
對於Hadoop-MapReduce和Spark,都可以直接使用Python完成計算邏輯,這無論對於數據科學家還是對於數據工程師而言都是十分便利的。
5、自動化運維
Python對於伺服器運維而言也有十分重要的用途。由於目前幾乎所有Linux發行版中都自帶了Python解釋器,使用Python腳本進行批量化的文件部署和運行調整都成了Linux伺服器上很不錯的選擇。
Python中也包含許多方便的工具,從調控ssh/sftp用的paramiko,到監控服務用的supervisor,再到bazel等構建工具,甚至conan等用於C++的包管理工具,Python提供了全方位的工具集合,而在這基礎上,結合Web,開發方便運維的工具會變得十分簡單。
python,求助,伺服器走的sftp協議,怎麼獲取上面的文件
用paramiko模塊
import paramiko
def sftp_get(file):
CONST_HOST = “1.1.1.1”
CONST_USERNAME = “root”
CONST_PWD = “password”
CONST_PORT = 22
try:
t = paramiko.Transport((CONST_HOST,CONST_PORT))
t.connect(username=CONST_USERNAME, password=CONST_PWD)
sftp = paramiko.SFTPClient.from_transport(t)
des = os.getcwd()+ ‘\\test.txt’
#file為你要下載的文件,des為你保存該文件的路徑
s
t.close()
print ‘download %s to %s ok’ % (file,des)
return True
except Exception , e:
raise e
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/244369.html