您好,登錄后才能下訂單哦!
本文實例講述了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程序設計有所幫助。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。