python批量連接服務器檢查容器是否正常
引言
在生產中,我們可能有很多項目或者很多環(huán)境。可能會部署在幾百上千的服務器里面。我們該怎么定時去監(jiān)控這些服務器里面的容器服務器是否正常呢?
python監(jiān)控docke容器是否正常運行中
下面我用python寫了一個程序,可以直接去監(jiān)控docke容器是否正常運行中:
# -*- coding: utf-8 -*-
import paramiko # 導入paramiko 模塊用于,SSH連接
# 定義一個名為server_list的字典,包含多個服務器的信息
sever_list = {
'服務器1': ['192.168.1.1', 'root', '密碼', 19005],
'服務器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 # 使用解構將值分別賦給五個變量
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(server, username=username, password=password, port=port) # 用戶名和密碼進行連接
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í)行失?。篠SH協(xié)議異常')
traceback.print_exc() # 打印詳細的錯誤信息
continue
except Exception:
print('命令執(zhí)行失?。浩渌惓?)
traceback.print_exc() # 打印詳細的錯誤信息
continue
for line in stdout:
if line is not None or line != '':
print(str(n) + '、 ' + key + " " + server + " 該容器有問題 " + " >> " + line.strip('\n')) # 打印輸出結果
else:
print(str(n) + '、 ' + key + '沒有停止、暫停、遷移、死亡 的容器,')
n = n + 1
except paramiko.AuthenticationException:
print('連接失?。赫J證失敗')
traceback.print_exc() # 打印詳細的錯誤信息
continue
except paramiko.SSHException:
print('連接失敗:SSH協(xié)議異常')
traceback.print_exc() # 打印詳細的錯誤信息
continue
except Exception:
print('連接失?。浩渌惓?)
traceback.print_exc() # 打印詳細的錯誤信息
continue
paramiko_methon()上面這段代碼是一個Python腳本,用于通過SSH連接到一組服務器,并使用Docker命令檢查每個服務器上是否有已停止、暫停、正在被移除或已死亡的容器。
代碼解析
下面是代碼的詳細解釋:
定義traceback_methon函數(shù)
這個函數(shù)是為了跟蹤和輸出異常信息。它接受一個參數(shù)n。
遍歷服務器列表:
對于sever_list字典中的每一項,代碼執(zhí)行以下操作:
解構賦值:從字典值中提取出IP地址、用戶名、密碼和端口,并分別賦值給
server,username,password,port變量。嘗試建立SSH連接:使用
paramiko.SSHClient()創(chuàng)建一個SSH客戶端,并設置缺少主機密鑰策略為自動添加。然后嘗試使用給定的用戶名和密碼進行連接。執(zhí)行Docker命令:如果SSH連接成功,代碼將嘗試執(zhí)行一個Docker命令來查找具有特定狀態(tài)的容器。它使用
exec_command方法執(zhí)行命令,并捕獲標準輸入、輸出和錯誤輸出。處理輸出:對于每個服務器的輸出,檢查是否包含非空行。如果包含非空行,則打印出有關問題的容器信息;否則,打印出沒有問題的容器信息。同時,遞增
n的值。處理異常:如果在嘗試建立SSH連接或執(zhí)行Docker命令時出現(xiàn)異常,代碼將捕獲異常并打印相應的錯誤消息。同時,繼續(xù)處理下一個服務器。
異常處理
對于不同的異常情況(如認證失敗、SSH協(xié)議異常等),代碼會捕獲它們并打印相應的錯誤消息。
讓我們運行上面的程序腳本:
根據(jù)下方的結果。我們可以很清楚的看到哪個服務器的容器有問題,輸出了容器ID、容器名稱、容器狀態(tài)。

后續(xù)我們還可以進行對這個 腳本優(yōu)化,可進行持續(xù)集成Jenkins,發(fā)送郵件,發(fā)送釘釘和企業(yè)微信機器人等操作。
以上就是python批量連接服務器檢查容器是否正常的詳細內容,更多關于python服務器容器檢查的資料請關注腳本之家其它相關文章!
相關文章
PyTorch?Tensor創(chuàng)建實現(xiàn)
本文主要介紹了PyTorch?Tensor創(chuàng)建實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-06-06
Python實現(xiàn)PDF文檔高效轉換為HTML文件的完整指南
在數(shù)字化辦公場景中,PDF因其格式固定、跨平臺兼容性強成為文檔分發(fā)的主流格式,但有時也需要將PDF轉換為HTML,下面我們就使用Python實現(xiàn)這一功能吧2025-11-11
Python數(shù)組拼接np.concatenate實現(xiàn)過程
這篇文章主要介紹了Python數(shù)組拼接np.concatenate實現(xiàn)過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-04-04

