Python + Shell 巡检服务器

服务器 0

1. 背景

团队维护多套业务系统,有支付系统、金融系统、数据系统、核验系统等二十多套业务系统,每套业务系统有10 - 50台服务器不等,当前团队中存在一套自动化巡检系统,每十分钟巡检一次,有异常可实时告警。但每天还需要人工登录服务器巡检两次,因人工巡检耗时长、漏巡风险大,需要一个运维巡检工具帮助实现快速人工巡检。

2. 巡检逻辑

	# 调整单元格样式        def excel_styles(self):        # 获取Excel文件        excel_file = openpyxl.load_workbook(self.export_excel)        excel_file.move_sheet("总览", -100)        # 定义边框样式        thin_border = Border(left=Side(style='thin'),                             right=Side(style='thin'),                             top=Side(style='thin'),                             bottom=Side(style='thin'))        # 定义颜色样式        red_fill = PatternFill(start_color='FFFF0000', end_color='FFFF0000', fill_type='solid')        summary_sheet_fill = PatternFill(start_color='FFFFFFFF', end_color='FFFFFFFF', fill_type='solid')        summary_sheet_font = openpyxl.styles.Font(bold=True, color='FFFF0000')        # 定义居中样式        # 垂直居中        align = openpyxl.styles.Alignment(horizontal='center', vertical='center', wrapText=True)        # 调整Excel样式        for sheet in excel_file:            # 统计所有系统的错误巡检项数量, 初始值为0            error_count = 0            # 保存列宽数据            dims = {}            for row in sheet.iter_rows():                for cell in row:                    # 应用边框样式, 添加框线                    cell.border = thin_border                    # 应用居中样式                    cell.alignment = align                    # 遍历单元格操作                    if cell.value and '*' in str(cell.value):                        # 应用颜色样式                        cell.fill = red_fill                        if sheet.title == "总览":                            # 删除 * 字符                            cell.value = cell.value.replace('*', '')                            cell.fill = summary_sheet_fill                            cell.font = summary_sheet_font                            if cell.value == "0":                                cell.font = openpyxl.styles.Font(bold=True, color='00000000')                        # 统计各系统错误巡检项的数量                        error_count += cell.value.count('*')                    # 将所有单元格设置为自动换行                    cell.alignment = openpyxl.styles.Alignment(wrapText=True)                    # 遍历并获取最大列宽                    if cell.value:                        cell_len = 0.7*len(re.findall('([/u4e00-/u9fa5])', str(cell.value))) + len(str(cell.value))                        dims[cell.column] = max((dims.get(cell.column, 0), cell_len))                # 将每行的最后一个单元格设置为自动换行,并将行高设置为14字符                max_row = sheet.max_row                max_col = sheet.max_column                for row_num in range(1, max_row+1):                    # cell = sheet.cell(row=row_num, column=max_col)                    # cell.alignment = openpyxl.styles.Alignment(wrapText=True)                    sheet.row_dimensions[row_num].height = 14                # 设置最大列宽                for col, value in dims.items():                    sheet.column_dimensions[get_column_letter(col)].width = value + 2                    # 当列宽超过28字符时, 设置最大列宽为28字符                    if value > 28:                        sheet.column_dimensions[get_column_letter(col)].width = 28        # 保存Excel文件        excel_file.save(self.export_excel)

3.2.5 发送邮件

为了让各系统负责人更好的监控巡检结果,每次巡检后都会通过邮箱给他们推送巡检结果邮件,即使周末只有一个人巡检,各系统负责人也能第一时间获得异常巡检项,及时远程处理。

	# 全局变量	def __init__(self):        # 设置邮箱参数        self.smtp_server = 'smtp.163.com'        self.imap_server = 'imap.163.com'        self.smtp_port = 25        self.sender_email = 'xxx@163.com'        self.sender_passwd ='xxxxxxxx'        self.receiver_email = ['xxx@163.com', 'xxx@qq.com', 'xxx@sina.com']			# 发送邮件    def send_email(self):        # 连接到IMAP服务器        try:            mail = imaplib.IMAP4_SSL(self.imap_server)            mail.login(self.sender_email, self.sender_passwd)        except:            time.sleep(1)        # 判断文件是否存在        try:            if os.path.exists(self.export_excel):                with open(self.export_excel, 'rb') as f:                    excel_data = f.read()            msg_root = MIMEMultipart()            msg_root['From'] = self.sender_email            msg_root['To'] = ','.join(self.receiver_email)            msg_root['Subject'] = '系统巡检结果'            msg_text = MIMEText('全系统统一巡检结果, 详情见附件。')            msg_root.attach(msg_text)            # 添加附件            excel_send = MIMEApplication(excel_data)            excel_send["Content-Type"] = 'application/octet-stream'            excel_send.add_header('Content-Disposition', 'attachment', filename='统一巡检结果.xlsx')            msg_root.attach(excel_send)            # 登录邮箱            smtp = smtplib.SMTP(self.smtp_server, self.smtp_port)            smtp.starttls()            smtp.login(self.sender_email, self.sender_passwd)            # 发送邮件            smtp.sendmail(self.sender_email, self.receiver_email, msg_root.as_string())            smtp.quit()        except Exception as e:            print("No file:", e)

3.2.6 通过邮件远程巡检

通过邮件发送自定义命令到指定邮箱,服务端实时监控邮箱邮件,收到邮件判断指令,不同指令执行不同操作,然后再通过邮件进行反馈处理结果。
(部分内容私信获取)

这里先给大家展示一下我进的兼职群和最近接单的截图,小伙伴有需要也可继续往下看.

在这里插入图片描述

兼职群

私单在这里插入图片描述
在这里插入图片描述

有需要Python兼职爬虫资料兼职内推的小伙伴可点下方链接
👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

---------------------------END---------------------------

题外话

感谢你能看到最后,给大家准备了一些福利!

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img

二、Python兼职渠道推荐*

学的同时助你创收,每天花1-2小时兼职,轻松稿定生活费.
在这里插入图片描述

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

若有侵权,请联系删除

也许您对下面的内容还感兴趣: