Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
作者:乱弹世界 发布时间:2023-09-22 11:07:33
标签:Python,监控,Nginx配置文件,发送邮件
本文实例讲述了Python实现监控Nginx配置文件的不同并发送邮件报警功能。分享给大家供大家参考,具体如下:
因为项目中经常涉及到多个Nginx之间的配置文件更改,可能回导致最后Nginx之间的配置文件有所不同,这样会对项目产生影响,最典型的就是可能当访问域名解析到其中一台Nginx的时候,可能是正常的,当域名解析到另外一台Nginx的时候,由于配置文件的不同,导致访问出错之类的,影响体验,所以用python写了一个监控配置文件不同的脚本,如果发现不同,就报警,并且以HTML的形式发送邮件指出具体的文件不同地方。
下面是代码:
#!/usr/bin/python2.7
# -*- encoding: utf-8 -*-
import difflib ##用于文件比较的库
import sys
import smtplib
import getpass
from os.path import getsize
from email.MIMEText import MIMEText
#检查文件的大小是否相同
def check_files_size(file1, file2):
size1 = getsize(file1)
size2 = getsize(file2)
if int(size1) != int(size2):
return True
#比较文件的内容,并且声称HTML页面
def files_compare(file1, file2):
text1_lines = file1.splitlines()
text2_lines = file2.splitlines()
d = difflib.HtmlDiff()
msg = d.make_file(text1_lines, text2_lines)
return msg
#邮件报警,使用Linux自带的postfix发送邮件
def alert_by_email(subject, msg, mailto):
senduser = getpass.getuser()###获取当前Linux登录的用户
smail = smtplib.SMTP('127.0.0.1')
#smail.set_debuglevel(1) ##设置为调试模式,可以看到邮件发送的过程和成功与否
message = MIMEText(msg, 'html', _charset='utf-8')
message['From'] = senduser
message['To'] = mailto
message['Subject'] = subject
smail.sendmail('root@localhost', mailto, message.as_string())
smail.quit()
if __name__ == '__main__':
reload(sys)
sys.setdefaultencoding('utf-8')#设置编码为utf-8
file1 = '/home/*/nginx1/nginx.conf'
file2 = '/home/*/nginx2/nginx.conf'
mailto = '***@***' #发送到你想要接收的邮箱地址
subject = u'nginx配置文件监控' #邮件主题
if check_files_size(file1, file2) == True: #如果两个文件大小不同,就进行文件内容比较,发送邮件报警
with open(file1) as f:
text1 = f.read().strip()
with open(file2) as f:
text2 = f.read().strip()
msg = files_compare(text1, text2)
alert_by_email(subject, msg, mailto)
else:
sys.exit(0)
这里贴上报警截图:
总体的思路就是:增加一台管理控制机器,然后备份不同服务器上的Nginx配置文件,使用上面的检测脚本进行监控,每隔十分钟或者你想要的时间长度进行监控(crontab定时任务就可以)。
希望本文所述对大家Python程序设计有所帮助。
来源:https://blog.csdn.net/linxi7/article/details/59484877


猜你喜欢
- httpwatch 的页面元素加载时间表里面有一堆的英文,平时也没注意看,今天瞟了一眼,觉得应该有些用处,就看了看,随便用蹩脚的英语水平翻译
- function nohtml(str) dim re Set re=new 
- QUICKSORT(A, p, r)是快速排序的子程序,调用划分程序对数组进行划分,然后递归地调用QUICKSORT(A, p, r),以完
- 通常我们在vue里面使用别人开发的组件,第一步就是install,第二步在main.js里面引入,第三步Vue.use这个组件。今天我简单的
- 通过cpython把python的文件转换为二进制文件,达到代码保护的目的1、下载Cython-0.28.2.tar.gz python s
- 如果使用注释的方法得当的话,为你的CSS文件添加注释可以在开发过程中给予你和其他人很大的帮助。最常见的是为CSS样式规则添加提示信息,不过使
- #-*- coding: utf-8 -*-import datetime#给定日期向后N天的日期def dateadd_day(days)
- 前言有些时候我们在父类中使用了 self.tr('XXX'),使用 Qt Linguist 完成翻译并导出 qm 文件后,发
- 可以使用 Python 的 NumPy 和 OpenCV 库来实现这个任务。提前准备一张图片作为素材。什么是峰值信噪比峰值信噪比(Peak
- 前言:如今,大多数计算机都带有多个内核,允许多个线程并行运行计算。即使处理器只有单核,也可以通过并发编程来提升程序的运行效率,比如在一个线程
- 本文实例讲述了Python字符串的全排列算法。分享给大家供大家参考,具体如下:题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列
- 本实验中分别针对空库、脱机、联机三种方式,配置一主两从的mysql标准异步复制。只做整服务器级别的复制,不考虑对个别库表或使用过滤复制的情况
- 在本文中,我们向您介绍一些提示和技巧,以帮助您更快地编写代码Python的可读性和设计简单性是其广受欢迎的两个主要原因。一些常见的Pytho
- 问题tensor详细数值 不能直接print打印:import tensorflow as tfx = tf.constant(1)prin
- 不论是打开网页或者爬取一些资料的时候,我们想要的是计算机能在最短的时间内运行出结果,不然等待的时间过长会影响下一步工作的计划。这时候我们可以
- Tornado 文档中提到但是这样只能捕获到handlers中列出的路径请求中的错误。如果只定义了(r"/hello",
- 由于现在在公司负责制作标准的静态页面,为了增强客户体验,所以经常要做些AJAX效果,也学你也和我一样在,学习AJAX。而设计AJAX时使用的
- 1、python-pptx模块简介使用python操作PPT,需要使用的模块就是python-pptx,下面来对该模块做一个简单的介绍。这里
- 引言最近在工作中写一个批处理脚本,令人抓狂的是每次都不知道脚本要跑到啥时候结束,于是想到给程序添加个进度条。逛了一圈,没找到特别趁手的轮子,
- (1)int转strings := strconv.Itoa(i)等价于s := strconv.FormatInt(int64(i), 1