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实现的udp协议Server和Client代码实例
Jun 04 Python
python教程之用py2exe将PY文件转成EXE文件
Jun 12 Python
python实现查询IP地址所在地
Mar 29 Python
Python中pip安装非PyPI官网第三方库的方法
Jun 02 Python
Python实现提取谷歌音乐搜索结果的方法
Jul 10 Python
详解Python的Django框架中的中间件
Jul 24 Python
python简单实现刷新智联简历
Mar 30 Python
Selenium鼠标与键盘事件常用操作方法示例
Aug 13 Python
selenium+python 对输入框的输入处理方法
Oct 11 Python
python+mysql实现学生信息查询系统
Feb 21 Python
对Python中一维向量和一维向量转置相乘的方法详解
Aug 26 Python
Python列表操作方法详解
Feb 09 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
新浪微博API开发简介之用户授权(PHP基础篇)
2011/09/25 PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
2014/04/24 PHP
WordPress主题制作中自定义头部的相关PHP函数解析
2016/01/08 PHP
javascript入门基础之私有变量
2010/02/23 Javascript
yepnope.js 异步加载资源文件
2011/09/08 Javascript
用JavaScript获取DOM元素位置和尺寸大小的方法
2013/04/12 Javascript
jQuery 属性选择器element[herf*='value']使用示例
2013/10/20 Javascript
JS实现iframe编辑器光标位置插入内容的方法(兼容IE和Firefox)
2016/06/24 Javascript
node.js版本管理工具n无效的原理和解决方法
2016/11/24 Javascript
JavaScript实现公历转农历功能示例
2017/02/13 Javascript
jquery鼠标悬停导航下划线滑出效果
2017/09/29 jQuery
angular2 ng2 @input和@output理解及示例
2017/10/10 Javascript
Angular 4中如何显示内容的CSS样式示例代码
2017/11/06 Javascript
VueRouter导航守卫用法详解
2017/12/25 Javascript
js实现图片上传并预览功能
2018/08/06 Javascript
layer弹出的iframe层在执行完毕后关闭当前弹出层的方法
2018/08/17 Javascript
原生js基于canvas实现一个简单的前端截图工具代码实例
2019/09/10 Javascript
使用VScode 插件debugger for chrome 调试react源码的方法
2019/09/13 Javascript
原生JavaScript实现拖动校验功能
2020/09/29 Javascript
关于Vue中$refs的探索浅析
2020/11/05 Javascript
微信小程序开发数据缓存基础知识辨析及运用实例详解
2020/11/06 Javascript
python中关于日期时间处理的问答集锦
2013/03/08 Python
Python每天必学之bytes字节
2016/01/28 Python
Python实现简单字典树的方法
2016/04/29 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
2018/04/23 Python
python中的句柄操作的方法示例
2019/06/20 Python
python经典趣味24点游戏程序设计
2019/07/26 Python
python函数调用,循环,列表复制实例
2020/05/03 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
python和php学习哪个更有发展
2020/06/17 Python
python实现图像外边界跟踪操作
2020/07/13 Python
现代绅士日常奢侈品:Todd Snyder
2019/12/13 全球购物
2015毕业实习推荐信
2015/03/23 职场文书
2015年除四害工作总结
2015/07/23 职场文书
Python绘制地图神器folium的新人入门指南
2021/05/23 Python
浅谈GO中的Channel以及死锁的造成
2022/03/18 Golang