首页 > 数据库 > 数据库开发技术 > Python脚本实现Linux服务器远程健康检查
先放个链接,万一有人关注呢
↓ ↓ ↓ ↓ ↓
当今时代,远程服务器扮演着重要的角色,支持各种应用和服务的运行。然而,监控和维护多个远程服务器的健康状态可能变得繁琐而耗时。为了简化这个过程,提高运维效率,我们可以利用自动化脚本来监控远程服务器的健康状况。在这篇文章中,我们将介绍一个名为"远程服务器健康检查脚本"的工具,它可以帮助运维人员实时监控远程服务器的CPU使用率并发送邮件通知,以便及时采取必要的措施。
应用场景
脚本示例
import subprocessimport smtplibfrom email.mime.text import MIMETextfrom email.header import Headerimport paramikoimport getpassimport time# 主机信息文件路径HOSTS_FILE = 'hosts.txt'# 检查间隔时间(秒)CHECK_INTERVAL = 60# 阈值(CPU 使用率百分比)THRESHOLD = 80# 邮件配置SMTP_SERVER = 'smtp.example.com'SMTP_PORT = 587SMTP_USERNAME = 'your_username'SMTP_PASSWORD = ''SENDER = 'sender@example.com'RECIPIENTS = ['recipient1@example.com', 'recipient2@example.com']# 从主机信息文件中读取主机信息def read_hosts():hosts = []with open(HOSTS_FILE, 'r') as file:for line in file:host, username, key_filename = line.strip().split(',')hosts.append({'host': host, 'username': username, 'key_filename': key_filename})return hosts# 检查服务器状态def check_server_status(server):host = server['host']username = server['username']key_filename = server['key_filename']# 创建 SSH 客户端client = paramiko.SSHClient()client.set_missing_host_key_policy(paramiko.AutoAddPolicy())try:# 使用密钥连接远程服务器client.connect(hostname=host, username=username, key_filename=key_filename)except paramiko.AuthenticationException as e:print(f'连接服务器 {host} 失败: {e}')return False# 执行命令获取 CPU 使用率command = 'top -bn1 | grep \'Cpu(s)\''stdin, stdout, stderr = client.exec_command(command)output = stdout.read().decode('utf-8')client.close()# 解析 CPU 使用率cpu_usage = float(output.split()[1])# 判断 CPU 使用率是否超过阈值if cpu_usage > THRESHOLD:send_alert_email(server, cpu_usage)return Falsereturn True# 发送邮件通知def send_alert_email(server, cpu_usage):host = server['host']subject = f'服务器 {host} CPU 使用率过高'content = f'服务器 {host} 的 CPU 使用率为 {cpu_usage:.2f}%,超过阈值 {THRESHOLD}%'msg = MIMEText(content, 'plain', 'utf-8')msg['Subject'] = Header(subject, 'utf-8')msg['From'] = SENDERmsg['To'] = ','.join(RECIPIENTS)try:with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as smtp:smtp.starttls()smtp.login(SMTP_USERNAME, SMTP_PASSWORD)smtp.sendmail(SENDER, RECIPIENTS, msg.as_string())print(f'邮件通知已发送:{subject}')except smtplib.SMTPException as e:print(f'发送邮件失败: {e}')# 主函数def main():# 读取主机信息hosts = read_hosts()while True:for host_info in hosts:if not check_server_status(host_info):continuetime.sleep(CHECK_INTERVAL)# 获取邮箱密码def get_email_password():password = getpass.getpass('请输入邮箱密码:')return password# 执行主函数if __name__ == '__main__':SMTP_PASSWORD = get_email_password()main()
结束!如有不足之处,欢迎指正!
来不及解释了,快上车!(加我微信拉你进群):


原文作者:运维book思议;如有侵权,请联系管理员删除。