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正则表达式re模块详解
Jun 25 Python
Python操作Excel之xlsx文件
Mar 24 Python
python3 模拟登录v2ex实例讲解
Jul 13 Python
Python2.7读取PDF文件的方法示例
Jul 13 Python
python实现排序算法解析
Sep 08 Python
python版本单链表实现代码
Sep 28 Python
Python 实现数据结构中的的栈队列
May 16 Python
python点击鼠标获取坐标(Graphics)
Aug 10 Python
python实现二分类的卡方分箱示例
Nov 22 Python
TensorFlow 显存使用机制详解
Feb 03 Python
pycharm中import呈现灰色原因的解决方法
Mar 04 Python
Python3操作读写CSV文件使用包过程解析
Apr 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
2021年最新CPU天梯图
2021/03/04 数码科技
3种平台下安装php4经验点滴
2006/10/09 PHP
PHP 数组遍历顺序理解
2009/09/09 PHP
php+js iframe实现上传头像界面无跳转
2014/04/29 PHP
php中各种定义变量的方法小结
2017/10/18 PHP
firefox和IE系列的相关区别整理 以备后用
2009/12/28 Javascript
mailto的使用技巧分享
2012/12/21 Javascript
Jquery 动态生成表格示例代码
2013/12/24 Javascript
javascript模拟post提交隐藏地址栏的参数
2014/09/03 Javascript
详解jquery easyui之datagrid使用参考
2016/12/05 Javascript
从零开始做一个pagination分页组件
2017/03/15 Javascript
原生js实现简单的Ripple按钮实例代码
2017/03/24 Javascript
JS实现的计数排序与基数排序算法示例
2017/12/04 Javascript
Node.js JSON模块用法实例分析
2019/01/04 Javascript
js实现移动端tab切换时下划线滑动效果
2019/09/08 Javascript
Vue中使用better-scroll实现轮播图组件
2020/03/07 Javascript
Vue列表如何实现滚动到指定位置样式改变效果
2020/05/09 Javascript
element-ui中dialog弹窗关闭按钮失效的解决
2020/09/22 Javascript
Python多线程结合队列下载百度音乐的方法
2015/07/27 Python
Python 从列表中取值和取索引的方法
2018/12/25 Python
python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法
2019/06/26 Python
使用PyOpenGL绘制三维坐标系实例
2019/12/24 Python
Java的基础面试题附答案
2016/01/10 面试题
为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限
2012/12/13 面试题
电子专业推荐信范文
2013/11/18 职场文书
国际贸易专业个人求职信范文分享
2013/12/14 职场文书
成语的广告词
2014/03/19 职场文书
授权委托书怎么写
2014/04/03 职场文书
商务英语专业毕业生求职信
2014/07/06 职场文书
贷款委托书
2014/08/01 职场文书
2015年仓库工作总结
2015/04/09 职场文书
2015年财务人员工作总结
2015/04/10 职场文书
2015年销售助理工作总结
2015/05/11 职场文书
导游词之寿县报恩寺
2020/01/19 职场文书
Redis实现订单自动过期功能的示例代码
2021/05/08 Redis
JavaScript事件的委托(代理)的用法示例详解
2022/02/18 Javascript