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

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

(0)

相关推荐

  • Nginx反向代理与负载均衡实战篇

    反向代理 反向代理指的是以代理服务器接收用户的的访问请求,代理用户向内部服务器重新发起请求,最后把内部服务器的响应信息返回给用户.这样,代理服务器对外就表现为一台服务器,而访问内部服务器的客户端用的就是代理服务器,而不是真实网站访问用户. 为什么使用反向代理 可以起到保护网站安全的作用,因为任何来自Internet的请求都必须先经过代理服务器. 通过缓存静态资源,加速Web请求. 实现负载均衡 反向代理例子 环境说明 假如有AB两个服务器.A服务器提供web资源,并且只给内网访问.B服务器有两块

  • 详解nginx+php执行请求的工作原理

    php工作原理 首先先了解下常听说的cgi,php-cgi,fastcgi,php-fpm到底是什么关系,帮助了解php的工作原理 cgi协议 cgi协议用来确定webserver(例如nginx),也就是内容分发服务器传递过来什么数据,什么样格式的数据 php-cgi进程解释器 php-cgi是php的cgi协议进程解释器,每次启动时,需要经历加载php.ini文件->初始化执行环境->处理请求->返回内容给webserver->php-cgi进程退出的流程 fastcgi协议

  • 利用PHP如何统计Nginx日志的User Agent数据

    前言 即将用到爬虫,于是打算收集一下User Agent(UA)数据.接着马上想到自己网站的访问日志不就是现成的优质数据源吗?于是愉快的决定写个脚本统计一下Nginx访问日志中的UA信息. 这类简单操作,用脚本语言就足够,毫无疑问肯定要用最熟悉的PHP.打开vim就开撸,十几分钟下来,功能简单的统计脚本就搞定了. 脚本目前有三个功能: 1. 找出所有的UA信息并排序: 2. 统计操作系统数据: 3. 统计浏览器数据. 程序运行截图如下: 1.UA信息 2.操作系统信息 3.浏览器 用脚本统计最近

  • 详解Django+uwsgi+Nginx上线最佳实战

    什么是uwsgi? uWSGI是一个Web服务器,它实现了WSGI协议.uwsgi.http等协议.Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换.WSGI是一种Web服务器网关接口.它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范. WSGI是一种通信协议. uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信.uwsgi协议是一个uWSGI服务器自有的协议,

  • 高并发nginx服务器的linux内核优化配置讲解

    由于默认的linux内核参数考虑的是最通用场景,这明显不符合用于支持高并发访问的Web服务器的定义,所以需要修改Linux内核参数,是的Nginx可以拥有更高的性能: 在优化内核时,可以做的事情很多,不过,我们通常会根据业务特点来进行调整,当Nginx作为静态web内容服务器.反向代理或者提供压缩服务器的服务器时,期内核参数的调整都是不同的,这里针对最通用的.使Nginx支持更多并发请求的TCP网络参数做简单的配置: 以下linux 系统内核优化配置均经在线业务系统测试,并发10万左右服务器运行

  • CentOS7将Nginx添加系统服务的方法步骤

    导语 经过编译安装以及解决问题,Nginx 已经运行正常,但是此时 Nginx 并没有添加进系统服务.接下来会将 Nginx 添加进系统服务并且设置开机启动. 查看服务 首先查看 Nginx 的服务状态,输入 systemctl status nginx,结果如下 没有找到相关的服务,下一步就是添加系统服务. 添加系统服务 在 /usr/lib/systemd/system 目录中添加 nginx.service,根据实际情况进行修改,详细解析可查看下方参考资料中的文章.内容如下 [Unit]

  • Nginx部署https网站并配置地址重写的步骤详解

    Nginx是一款高性能的网站服务器和反向代理服务器,同时也是一个IMAP.POP3.SMTP等邮件代理服务器:nginx可以作为一个网站服务器进行网站的发布处理,另外nginx可以作为反向代理实现负载均衡的.本文介绍如何在centos6.9环境中,利用Nginx部署https网站,并配置地址重写. 1.环境准备:centos6.9主机一台,关闭防火墙和Selinux 安装依赖包:yum -y install openssl-devel  pcre-devel gcc 创建nginx用户: use

  • 使用nginx同域名下部署多个vue项目并使用反向代理的方法

    效果 目前有 2 个项目(project1, project2),还有一个 nginx 自带的 index.html,我添加了对应的链接代码(稍后粘贴出来),为了统一管理子项目的路由. 我期望实现下面的效果(假设 ip: localhost,port: 8080): http://localhost:8080/ 进入最外层的 index.html http://localhost:8080/project1 进入项目一 http://localhost:8080/project2 进入项目二 废

  • Nginx服务器屏蔽与禁止屏蔽网络爬虫的方法

    每个网站通常都会遇到很多非搜索引擎的爬虫,这些爬虫大部分都是用于内容采集或是初学者所写,它们和搜索引擎的爬虫不一样,没有频率控制,往往会消耗大量服务器资源,导致带宽白白浪费了. 其实Nginx可以非常容易地根据User-Agent过滤请求,我们只需要在需要URL入口位置通过一个简单的正则表达式就可以过滤不符合要求的爬虫请求: location / { if ($http_user_agent ~* "python|curl|java|wget|httpclient|okhttp") {

  • Nginx开启一个参数就能让你的WEB性能提升3倍的方法

    一.遇到的一些问题 记得 2008 年做性能测试的时候,新进7台 lenovo 4核4G 服务器用于性能测试. 当时资源紧张,这7台服务器都装了双系统(Win2003/CentOS5)空闲时用于做测试机(压测的Agent). 当时给Nginx做了一系列测试,印象很深的是:在这批机器上,Nginx状态页面的压测. 短连接的话最佳QPS约4万,长连接的话最高QPS约13万. 大概3年后,那批 lenovo 服务器已经没人瞧得上了,只能做肉鸡. 然而,一次不经意的测试,发现再牛的服务器,短连接最佳QP

随机推荐