Python自动化巡检并生成xlsx文件,并发送到邮箱
import openpyxl
import os
import platform
import psutil
import datetime
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
# 运维巡检函数,获取系统信息
def perform_maintenance_check():
system_info = {
"操作系统": platform.system(),
"操作系统版本": platform.release(),
"CPU": platform.processor(),
"CPU核心数": psutil.cpu_count(logical=False),
"总内存(GB)": round(psutil.virtual_memory().total / (1024 ** 3), 2),
"已使用内存(GB)": round(psutil.virtual_memory().used / (1024 ** 3), 2),
"剩余内存(GB)": round(psutil.virtual_memory().available / (1024 ** 3), 2),
"磁盘使用率(%)": psutil.disk_usage('/').percent,
"SSH异常登录": check_ssh_logs(),
"错误日志": check_error_logs(),
"当前时间": datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
}
return system_info
# 检查SSH异常登录
def check_ssh_logs():
# 在这里添加检查SSH异常登录的代码,返回异常登录信息或状态
# 这可以是你自己的自定义函数,用于检查SSH登录日志
# 返回字符串,例如:'无异常登录' 或包含异常信息的字符串
return "无异常登录"
# 检查错误日志
def check_error_logs():
# 在这里添加检查错误日志的代码,返回错误日志信息或状态
# 这可以是你自己的自定义函数,用于检查错误日志文件
# 返回字符串,例如:'无错误日志' 或包含错误信息的字符串
return "无错误日志"
# 创建 Excel 工作簿并插入巡检结果
def insert_results_to_excel(results):
# 定义英文到中文的映射
translation = {
"Operating System": "操作系统",
"OS Version": "操作系统版本",
"CPU": "CPU",
"CPU Cores": "CPU核心数",
"RAM Total (GB)": "总内存(GB)",
"RAM Used (GB)": "已使用内存(GB)",
"RAM Free (GB)": "剩余内存(GB)",
"Disk Usage (%)": "磁盘使用率(%)",
"SSH异常登录": "SSH异常登录",
"错误日志": "错误日志",
"当前时间": "当前时间"
}
workbook = openpyxl.Workbook()
sheet = workbook.active
sheet['A1'] = '巡检项'
sheet['B1'] = '结果'
row = 2
for key, value in results.items():
# 将英文标题替换为中文标题
chinese_key = translation.get(key, key)
sheet.cell(row=row, column=1, value=chinese_key)
sheet.cell(row=row, column=2, value=value)
row += 1
# 使用当前日期作为文件名
current_date = datetime.datetime.now().strftime("%Y%m%d")
file_name = f'{current_date}_check_results.xlsx'
workbook.save(file_name)
return file_name
# 发送邮件
def send_email(file_path):
smtp_server = '填写你的smtp服务器地址'
smtp_port = 25
sender_email = '填你的smtp邮箱'
sender_password = 'smtp密码'
receiver_email = '填写收件人'
subject = '运维巡检结果报告'
body = '附件是运维巡检结果,请查收。'
msg = MIMEMultipart()
msg['From'] = sender_email
msg['To'] = receiver_email
msg['Subject'] = subject
# 将邮件文本编码为UTF-8
msg.attach(MIMEText(body, 'plain', 'utf-8'))
with open(file_path, 'rb') as attachment:
part = MIMEBase('application', 'octet-stream')
part.set_payload(attachment.read())
part.add_header('Content-Disposition', f'attachment; filename={os.path.basename(file_path)}')
msg.attach(part)
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls()
server.login(sender_email, sender_password)
server.sendmail(sender_email, receiver_email, msg.as_bytes())
server.quit()
if __name__ == "__main__":
maintenance_result = perform_maintenance_check()
excel_file = insert_results_to_excel(maintenance_result)
send_email(excel_file)
print(f'巡检结果已保存到 {os.path.abspath(excel_file)} 并发送到邮箱。')
这段代码是一个Python脚本,其主要目的是执行系统运维巡检,并将巡检结果以Excel表格和邮件的形式保存和发送。以下是代码的主要组成部分和功能解释:
- 导入模块:
-
openpyxl
: 用于创建和操作Excel工作簿。 -
os
: 提供与操作系统相关的功能,如文件路径操作。 -
platform
: 用于获取操作系统信息。 -
psutil
: 用于获取系统性能信息,如CPU、内存和磁盘使用情况。 -
datetime
: 用于处理日期和时间。 -
smtplib
: 用于发送电子邮件。 -
email.mime
模块:用于创建邮件内容,包括文本和附件。
perform_maintenance_check()
函数:
- 这个函数执行系统运维巡检,收集以下信息:
- 操作系统、操作系统版本、CPU信息、CPU核心数、总内存、已使用内存、剩余内存、磁盘使用率、SSH异常登录信息、错误日志、当前时间。
- 将这些信息存储在一个字典中,并返回该字典作为巡检结果。
check_ssh_logs()
和check_error_logs()
函数:
- 这两个函数分别用于检查SSH异常登录和错误日志。
- 在示例中,它们都返回了静态文本,表示没有异常登录和错误日志。你可以根据实际情况自定义这些函数来执行真正的检查。
insert_results_to_excel(results)
函数:
- 这个函数将巡检结果插入到Excel工作簿中。
- 首先,定义了一个英文到中文的映射,以将英文标题转换为中文标题。
- 然后,创建一个新的Excel工作簿,并在工作簿中创建一个工作表。
- 使用字典中的巡检结果填充工作表。
- 生成一个带有当前日期的文件名,保存Excel工作簿,并返回文件名。
send_email(file_path)
函数:
- 这个函数用于发送带附件的电子邮件。
- 定义了SMTP服务器、端口、发件人和收件人信息。
- 创建邮件主体,并添加文本内容。
- 打开巡检结果的Excel文件作为附件,并将其添加到邮件中。
- 使用SMTP服务器登录并发送邮件。
if __name__ == "__main__":
:
- 这是Python脚本的主入口。
- 首先,执行
perform_maintenance_check()
函数获取系统巡检结果。 - 然后,使用
insert_results_to_excel()
函数将结果保存到Excel文件。 - 最后,使用
send_email()
函数将Excel文件发送到指定的收件人邮箱,并打印出保存和发送的信息。
请注意,该示例中的关键功能是获取系统信息、插入到Excel工作簿并发送电子邮件。你需要根据你的实际需求和环境来自定义检查函数以获取准确的信息,并配置电子邮件参数。