Python实现监控Nginx配置文件的不同并发送邮件报警功能示例


Posted in Python onFebruary 26, 2019

本文实例讲述了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)

这里贴上报警截图:

Python实现监控Nginx配置文件的不同并发送邮件报警功能示例

总体的思路就是:增加一台管理控制机器,然后备份不同服务器上的Nginx配置文件,使用上面的检测脚本进行监控,每隔十分钟或者你想要的时间长度进行监控(crontab定时任务就可以)。

以上就是实践过程中遇到的问题和解决思路,如果有错误或者更好的方法,还请各位大神帮忙指正。

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python实现文件分组复制到不同目录的例子
Jun 04 Python
Python在Windows和在Linux下调用动态链接库的教程
Aug 18 Python
正确理解python中的关键字“with”与上下文管理器
Apr 21 Python
Python协程的用法和例子详解
Sep 09 Python
Python selenium实现微博自动登录的示例代码
May 16 Python
python2.7实现爬虫网页数据
May 25 Python
python批量导入数据进Elasticsearch的实例
May 30 Python
在Python 中同一个类两个函数间变量的调用方法
Jan 31 Python
python跳出双层for循环的解决方法
Jun 24 Python
Python 实现平台类游戏添加跳跃功能
Mar 27 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
May 27 Python
Python计算矩阵的和积的实例详解
Sep 10 Python
利用python实现对web服务器的目录探测的方法
Feb 26 #Python
python selenium 弹出框处理的实现
Feb 26 #Python
python实现学员管理系统
Feb 26 #Python
python实现电子产品商店
Feb 26 #Python
Python selenium根据class定位页面元素的方法
Feb 26 #Python
python实现诗歌游戏(类继承)
Feb 26 #Python
Python实现简单查找最长子串功能示例
Feb 26 #Python
You might like
PHP脚本的10个技巧(1)
2006/10/09 PHP
不用mod_rewrite直接用php实现伪静态化页面代码
2008/10/04 PHP
浅析php面向对象public private protected 访问修饰符
2013/06/30 PHP
Javascript之文件操作
2007/03/07 Javascript
Js 中debug方式
2010/02/07 Javascript
JQuery.ajax传递中文参数的解决方法 推荐
2011/03/28 Javascript
js获取系统的根路径实现介绍
2013/09/08 Javascript
使用js实现按钮控制文本框加1减1应用于小时+分钟
2013/12/09 Javascript
javascript的创建多行字符串的7种方法
2014/04/29 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
js获取form表单所有数据的简单方法
2016/08/18 Javascript
JS中用try catch对代码运行的性能影响分析
2016/12/26 Javascript
js实现图片左右滚动效果
2017/02/27 Javascript
原生js实现简单的模态框示例
2017/09/08 Javascript
前端MVVM框架解析之双向绑定
2018/01/24 Javascript
vue watch普通监听和深度监听实例详解(数组和对象)
2018/08/16 Javascript
vue-cli项目代理proxyTable配置exclude的方法
2018/09/20 Javascript
深入理解nodejs搭建静态服务器(实现命令行)
2019/02/05 NodeJs
vue+render+jsx实现可编辑动态多级表头table的实例代码
2020/04/01 Javascript
详解字典树Trie结构及其Python代码实现
2016/06/03 Python
通过实例了解python property属性
2019/11/01 Python
安装完Python包然后找不到模块的解决步骤
2020/02/13 Python
python interpolate插值实例
2020/07/06 Python
详解如何解决canvas图片getImageData,toDataURL跨域问题
2018/09/17 HTML / CSS
SmartBuyGlasses台湾:名牌眼镜,名牌太阳眼镜及隐形眼镜
2017/01/04 全球购物
加拿大最大的五金、家居装修和园艺产品商店:RONA
2017/01/27 全球购物
介绍JAVA 中的Collection FrameWork(及如何写自己的数据结构)
2014/10/31 面试题
企业军训感言
2014/02/08 职场文书
市场营销管理毕业生自荐信
2014/03/03 职场文书
团结演讲稿范文
2014/05/23 职场文书
体育节口号
2014/06/19 职场文书
节能减耗标语
2014/06/21 职场文书
导游词书写之黄山
2019/08/06 职场文书
python 爬取京东指定商品评论并进行情感分析
2021/05/27 Python
分析Java中Map的遍历性能问题
2021/06/26 Java/Android
Golang连接并操作MySQL
2022/04/14 MySQL