python批量连接服务器检查容器是否正常
作者:碧莲城 python进阶测试
引言
在生产中,我们可能有很多项目或者很多环境。可能会部署在几百上千的服务器里面。我们该怎么定时去监控这些服务器里面的容器服务器是否正常呢?
python监控docke容器是否正常运行中
下面我用python写了一个程序,可以直接去监控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}}"') # 执行一个命令 except paramiko.SSHException: print('命令执行失败:SSH协议异常') traceback.print_exc() # 打印详细的错误信息 continue except Exception: print('命令执行失败:其他异常') 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('连接失败:认证失败') traceback.print_exc() # 打印详细的错误信息 continue except paramiko.SSHException: print('连接失败:SSH协议异常') traceback.print_exc() # 打印详细的错误信息 continue except Exception: print('连接失败:其他异常') traceback.print_exc() # 打印详细的错误信息 continue paramiko_methon()
上面这段代码是一个Python脚本,用于通过SSH连接到一组服务器,并使用Docker命令检查每个服务器上是否有已停止、暂停、正在被移除或已死亡的容器。
代码解析
下面是代码的详细解释:
定义traceback_methon函数
这个函数是为了跟踪和输出异常信息。它接受一个参数n
。
遍历服务器列表:
对于sever_list
字典中的每一项,代码执行以下操作:
解构赋值:从字典值中提取出IP地址、用户名、密码和端口,并分别赋值给
server
,username
,password
,port
变量。尝试建立SSH连接:使用
paramiko.SSHClient()
创建一个SSH客户端,并设置缺少主机密钥策略为自动添加。然后尝试使用给定的用户名和密码进行连接。执行Docker命令:如果SSH连接成功,代码将尝试执行一个Docker命令来查找具有特定状态的容器。它使用
exec_command
方法执行命令,并捕获标准输入、输出和错误输出。处理输出:对于每个服务器的输出,检查是否包含非空行。如果包含非空行,则打印出有关问题的容器信息;否则,打印出没有问题的容器信息。同时,递增
n
的值。处理异常:如果在尝试建立SSH连接或执行Docker命令时出现异常,代码将捕获异常并打印相应的错误消息。同时,继续处理下一个服务器。
异常处理
对于不同的异常情况(如认证失败、SSH协议异常等),代码会捕获它们并打印相应的错误消息。
让我们运行上面的程序脚本:
根据下方的结果。我们可以很清楚的看到哪个服务器的容器有问题,输出了容器ID、容器名称、容器状态。
后续我们还可以进行对这个 脚本优化,可进行持续集成Jenkins,发送邮件,发送钉钉和企业微信机器人等操作。
以上就是python批量连接服务器检查容器是否正常的详细内容,更多关于python服务器容器检查的资料请关注脚本之家其它相关文章!