本文實例講述了Python實現監控Nginx配置文件的不同并發送郵件報警功能。分享給大家供大家參考,具體如下:
因為項目中經常涉及到多個Nginx之間的配置文件更改,可能回導致最后Nginx之間的配置文件有所不同,這樣會對項目產生影響,最典型的就是可能當訪問域名解析到其中一臺Nginx的時候,可能是正常的,當域名解析到另外一臺Nginx的時候,由于配置文件的不同,導致訪問出錯之類的,影響體驗,所以用python寫了一個監控配置文件不同的腳本,如果發現不同,就報警,并且以HTML的形式發送郵件指出具體的文件不同地方。
下面是代碼:
#!/usr/bin/python2.7# -*- encoding: utf-8 -*-import difflib ##用于文件比較的庫import sysimport smtplibimport getpassfrom os.path import getsizefrom 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文件與目錄操作技巧匯總》
新聞熱點
疑難解答