python批量連接服務(wù)器檢查容器是否正常
引言
在生產(chǎn)中,我們可能有很多項(xiàng)目或者很多環(huán)境??赡軙渴鹪趲装偕锨У姆?wù)器里面。我們該怎么定時去監(jiān)控這些服務(wù)器里面的容器服務(wù)器是否正常呢?
python監(jiān)控docke容器是否正常運(yùn)行中
下面我用python寫了一個程序,可以直接去監(jiān)控docke容器是否正常運(yùn)行中:
# -*- coding: utf-8 -*- import paramiko # 導(dǎo)入paramiko 模塊用于,SSH連接 # 定義一個名為server_list的字典,包含多個服務(wù)器的信息 sever_list = { '服務(wù)器1': ['192.168.1.1', 'root', '密碼', 19005], '服務(wù)器2': ['116.168.10.253', 'root', '9997d9898LdJ', 22] }
def traceback_methon(n): import traceback for key, values in sever_list.items(): server, username, password, port = values # 使用解構(gòu)將值分別賦給五個變量 try: ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(server, username=username, password=password, port=port) # 用戶名和密碼進(jìn)行連接 try: stdin, stdout, stderr = ssh.exec_command( 'docker ps --filter "status=exited" --filter "status=paused" --filter "status=removing" --filter "status=dead" --format "{{.ID}} {{.Names}} {{.Status}}"') # 執(zhí)行一個命令 except paramiko.SSHException: print('命令執(zhí)行失敗:SSH協(xié)議異常') traceback.print_exc() # 打印詳細(xì)的錯誤信息 continue except Exception: print('命令執(zhí)行失?。浩渌惓?) traceback.print_exc() # 打印詳細(xì)的錯誤信息 continue for line in stdout: if line is not None or line != '': print(str(n) + '、 ' + key + " " + server + " 該容器有問題 " + " >> " + line.strip('\n')) # 打印輸出結(jié)果 else: print(str(n) + '、 ' + key + '沒有停止、暫停、遷移、死亡 的容器,') n = n + 1 except paramiko.AuthenticationException: print('連接失?。赫J(rèn)證失敗') traceback.print_exc() # 打印詳細(xì)的錯誤信息 continue except paramiko.SSHException: print('連接失?。篠SH協(xié)議異常') traceback.print_exc() # 打印詳細(xì)的錯誤信息 continue except Exception: print('連接失?。浩渌惓?) traceback.print_exc() # 打印詳細(xì)的錯誤信息 continue paramiko_methon()
上面這段代碼是一個Python腳本,用于通過SSH連接到一組服務(wù)器,并使用Docker命令檢查每個服務(wù)器上是否有已停止、暫停、正在被移除或已死亡的容器。
代碼解析
下面是代碼的詳細(xì)解釋:
定義traceback_methon函數(shù)
這個函數(shù)是為了跟蹤和輸出異常信息。它接受一個參數(shù)n
。
遍歷服務(wù)器列表:
對于sever_list
字典中的每一項(xiàng),代碼執(zhí)行以下操作:
解構(gòu)賦值:從字典值中提取出IP地址、用戶名、密碼和端口,并分別賦值給
server
,username
,password
,port
變量。嘗試建立SSH連接:使用
paramiko.SSHClient()
創(chuàng)建一個SSH客戶端,并設(shè)置缺少主機(jī)密鑰策略為自動添加。然后嘗試使用給定的用戶名和密碼進(jìn)行連接。執(zhí)行Docker命令:如果SSH連接成功,代碼將嘗試執(zhí)行一個Docker命令來查找具有特定狀態(tài)的容器。它使用
exec_command
方法執(zhí)行命令,并捕獲標(biāo)準(zhǔn)輸入、輸出和錯誤輸出。處理輸出:對于每個服務(wù)器的輸出,檢查是否包含非空行。如果包含非空行,則打印出有關(guān)問題的容器信息;否則,打印出沒有問題的容器信息。同時,遞增
n
的值。處理異常:如果在嘗試建立SSH連接或執(zhí)行Docker命令時出現(xiàn)異常,代碼將捕獲異常并打印相應(yīng)的錯誤消息。同時,繼續(xù)處理下一個服務(wù)器。
異常處理
對于不同的異常情況(如認(rèn)證失敗、SSH協(xié)議異常等),代碼會捕獲它們并打印相應(yīng)的錯誤消息。
讓我們運(yùn)行上面的程序腳本:
根據(jù)下方的結(jié)果。我們可以很清楚的看到哪個服務(wù)器的容器有問題,輸出了容器ID、容器名稱、容器狀態(tài)。
后續(xù)我們還可以進(jìn)行對這個 腳本優(yōu)化,可進(jìn)行持續(xù)集成Jenkins,發(fā)送郵件,發(fā)送釘釘和企業(yè)微信機(jī)器人等操作。
以上就是python批量連接服務(wù)器檢查容器是否正常的詳細(xì)內(nèi)容,更多關(guān)于python服務(wù)器容器檢查的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python學(xué)習(xí)之線程池與GIL全局鎖詳解
本文我們將學(xué)習(xí)線程池的創(chuàng)建與全局鎖。線程池的創(chuàng)建于進(jìn)程池的原理是相同的;關(guān)于GIL全局鎖,暫時沒有代碼上的練習(xí),而是對其概念進(jìn)行一個簡單的啟蒙,感興趣的可以了解一下2022-04-04使用python數(shù)據(jù)清洗代碼實(shí)例
這篇文章主要介紹了使用python數(shù)據(jù)清洗代碼實(shí)例,分享一下近期用python做數(shù)據(jù)清洗匯總的相關(guān)代碼,這里我們用到的python包有pandas、numpy、os等,需要的朋友可以參考下2023-07-07python GUI庫圖形界面開發(fā)之PyQt5打開保存對話框QFileDialog詳細(xì)使用方法與實(shí)例
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5打開保存對話框QFileDialog詳細(xì)使用方法與實(shí)例,需要的朋友可以參考下2020-02-02使用Pyhton集合set()實(shí)現(xiàn)成果查漏的例子
今天小編就為大家分享一篇使用Pyhton集合set()實(shí)現(xiàn)成果查漏的例子,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11Python?multiprocessing.value實(shí)現(xiàn)多進(jìn)程數(shù)據(jù)共享的示例
本文介紹了Python中的multiprocessing.value,通過示例代碼展示了如何使用這個類實(shí)現(xiàn)多進(jìn)程數(shù)據(jù)共享,以及使用場景和注意事項(xiàng)等內(nèi)容,感興趣的朋友跟隨小編一起看看吧2023-07-07基于Python實(shí)現(xiàn)圖片一鍵切割九宮格的工具
有時候發(fā)微博時候,需要裁切圖片為九宮格,但是ps或者其他工具都太麻煩。本文就來用Python編寫一個一鍵切割九宮格的工具,希望對大家有所幫助2023-03-03Python Pandas pandas.read_sql_query函數(shù)實(shí)例用法分析
在本篇文章里小編給大家整理的是一篇關(guān)于Python Pandas pandas.read_sql_query函數(shù)實(shí)例用法分析內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)下。2021-06-06