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在命令行下使用google翻译(带语音)
Jan 16 Python
使用Python中的线程进行网络编程的入门教程
Apr 15 Python
python解析基于xml格式的日志文件
Feb 25 Python
基于DataFrame改变列类型的方法
Jul 25 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
Jan 14 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
Jan 29 Python
Pandas统计重复的列里面的值方法
Jan 30 Python
Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
Feb 26 Python
Python使用APScheduler实现定时任务过程解析
Sep 11 Python
python装饰器相当于函数的调用方式
Dec 27 Python
Django 解决上传文件时,request.FILES为空的问题
May 20 Python
Django日志及中间件模块应用案例
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
Smarty中常用变量操作符汇总
2014/10/27 PHP
php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证
2016/05/04 PHP
PHP 常用时间函数资料整理
2016/10/22 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
PHP添加文字水印或图片水印的水印类完整源代码与使用示例
2019/03/18 PHP
IE中createElement需要注意的一个问题
2010/07/13 Javascript
给页面渲染时间加速 干掉Dom Level 0 Event
2012/12/19 Javascript
zTree插件之单选下拉菜单实例代码
2013/11/07 Javascript
jquery实现动态菜单的实例代码
2013/11/28 Javascript
jQuery简单自定义图片轮播插件及用法示例
2016/11/21 Javascript
Angular的$http与$location
2016/12/26 Javascript
bootstrap输入框组使用方法
2017/02/07 Javascript
vue-cli webpack 开发环境跨域详解
2017/05/18 Javascript
Egg.js 中 AJax 上传文件获取参数的方法
2018/10/10 Javascript
js指定日期增加指定月份的实现方法
2018/12/19 Javascript
富文本编辑器vue2-editor实现全屏功能
2019/05/26 Javascript
解决vue项目打包上服务器显示404错误,本地没出错的问题
2020/11/03 Javascript
[01:32:10]NAVI vs VG Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
python获取本机mac地址和ip地址的方法
2015/04/29 Python
python实现rsa加密实例详解
2017/07/19 Python
Django中多种重定向方法使用详解
2019/07/17 Python
Python hashlib模块实例使用详解
2019/12/24 Python
Django DRF APIView源码运行流程详解
2020/08/17 Python
python利用tkinter实现图片格式转换的示例
2020/09/28 Python
python利用opencv保存、播放视频
2020/11/02 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
2021/01/19 Python
canvas像素点操作之视频绿幕抠图
2018/09/11 HTML / CSS
野兽派官方旗舰店:THE BEAST 野兽派
2016/08/05 全球购物
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
意大利和国际最佳时尚品牌:Drestige
2019/12/28 全球购物
物流仓管员岗位职责
2013/12/04 职场文书
夫妻忠诚协议书范本
2014/11/17 职场文书
农村党支部承诺书
2015/04/30 职场文书
工程合作意向书范本
2015/05/09 职场文书
2015迎新晚会开场白
2015/05/29 职场文书
MySQL和Oracle批量插入SQL的通用写法示例
2021/11/17 MySQL