Python监控Nginx配置差异并发送HTML报警邮件

方予
方予
发布时间:2026-10-13| 6人浏览过
原创

本文介绍使用Python脚本监控多台Nginx服务器配置文件差异的方法。通过对比文件大小及内容,利用difflib生成HTML差异报告,并通过SMT自动发送报警邮件。结合Crontab定时任务,可有效防止因配置不一致导致的访问故障,提升运维效率。

本文实例介绍了如何使用Python实现监控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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。