pyton运维脚本之巡检服务器硬盘

omanik 2024-3-18 154 3/18

该脚本会巡检服务器的硬盘容量信息,同时可设定报警值,巡检结束后通过邮件方式发送到指定邮箱,并在本地生成一份带日期的巡检文档,适合没有部署服务器运维平台的环境使用,同时后期可加入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 -
Tag:

omanik

3月18日15:57

最后修改:2024年3月18日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论