该脚本会巡检服务器的硬盘容量信息,同时可设定报警值,巡检结束后通过邮件方式发送到指定邮箱,并在本地生成一份带日期的巡检文档,适合没有部署服务器运维平台的环境使用,同时后期可加入CPU、内存、负载等参数,具体代码如下:
# 导入所需模块
import paramiko
import os
import datetime
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
# 服务器信息
servers = [
{'ip': '43.132.192.1', 'port': 22, 'username': 'root', 'password': '你的密码'},
{'ip': '43.132.192.2', 'port': 22, 'username': 'root', 'password': '你的密码'},
{'ip': '43.132.192.3', 'port': 22, 'username': 'root', 'password': '你的密码'},
# 添加其他服务器信息......
]
# 邮件服务器设置
smtp_server = 'smtp.163.com'
smtp_port = 465
email_user = '你的邮箱账号'
email_password = '你的smtp密钥'
to_email = '收件人邮箱地址'
# 创建MIME多部分对象,并设置邮件标头
msg = MIMEMultipart('alternative')
msg['From'] = email_user
msg['To'] = to_email
msg['Subject'] = '服务器巡检报告'
# 创建一个列表来存储报告
reports = []
report_list = []
# 生成各个服务器的报告
for server in servers:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(server['ip'], port=server['port'], username=server['username'], password=server['password'])
stdin, stdout, stderr = ssh.exec_command('df -h')
output = stdout.read().decode()
lines = output.split('\n')
# 加入服务器IP到表格顶部
html = f'<h2>服务器{server["ip"]}:</h2>'
html += '<table style="font-family: Arial, Helvetica, sans-serif; border-collapse: collapse; width: 100%;">'
for line in lines[1:]:
cells = line.split()
if len(cells) > 4 and cells[4].endswith('%'):
usage = int(cells[4].rstrip('%'))
if usage > 70:
html += '<tr style="background-color: red;">'
else:
html += '<tr>'
for cell in cells:
html += f'<td style="border: 1px solid #ddd; padding: 8px;">{cell}</td>'
html += '</tr>'
html += '</table></br>'
report_list.append(html)
# 创建一个文本报告容器
report = f'服务器 {server["ip"]}:\n'
for line in lines[1:]:
cells = line.split()
if len(cells) > 4 and cells[4].endswith('%'):
usage = int(cells[4].rstrip('%'))
# 设定你想要的告警值
if usage > 70:
report += '【警告】'
else:
report += '【正常】'
for cell in cells:
report += f'{cell}\t'
report += '\n'
reports.append(report)
ssh.close()
# 将所有报告添加到邮件正文中
for html_content in report_list:
msg.attach(MIMEText(html_content, 'html'))
# 获取当前日期时间
now = datetime.datetime.now()
# 把日期时间格式化为字符串,格式可以根据需要改变
time_string = now.strftime("%Y%m%d%H%M%S")
# 创建文件名,加上日期时间字符串
filename = '服务器硬盘巡检报告_' + time_string + '.txt'
# 将报告写入带日期时间的本地txt文件
with open(filename, 'w', encoding='utf-8') as f:
for report in reports:
f.write(report + '\n')
smtp_server = smtplib.SMTP_SSL(smtp_server, smtp_port)
smtp_server.login(email_user, email_password)
smtp_server.send_message(msg)
smtp_server.quit()
- THE END -
最后修改:2024年3月18日
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://ospf.me/python1
共有 0 条评论