正常情况下一个IP对应一个域名,但是可以通过dns轮训的方式将一个域名对应多个ip,这样就可以达到一种负载均衡的效果,那么当用户访问网站的 时候,有可能被解析到不同的ip上去,如果这个ip的服务器出现异常,那么此时这部分用户访问的页面就是错误的,甚至是无法访问。为了避免这种情况的发 生,所以我们需要监控这些ip节点,好了开始上干货,将脚本加入crontab中即可,就可以实时监控。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | [root@search zhaodong]# cat dns_monitor.py #!/usr/bin/env python #coding=utf8 #Author zhaodong #使用pydns模块解析域名,将解析之后的A记录存储在iplist列表中,然后通过httplib模块访问iplist中的数据,来判断响应码是否是200,以此实现dns域名轮询的监控 import dns.resolver import os import httplib import smtplib from email.MIMEText import MIMEText from email.Header import Header #设置收件人邮箱,改成你自己的邮箱 mailto_list=['zhaodong@163.tv'] #下面这些设置改成你自己的信息 ######################################### mail_host="smtp.163.com" #设置服务器 mail_user="zhaodong" #用户名 mail_pass="123456" #密码 mail_postfix="163.com" #发件箱的后缀 ########################################## #定义dns解析ip列表 iplist=[] #定义域名列表 #定义成你公司的域名 dlist=['tshare365.com','baidu.com'] ###################################### def send_mail(to_list,sub,content): me="DNS轮询故障"+"<"+mail_user+"@"+mail_postfix+">" msg = MIMEText(content,_subtype='plain',_charset='utf_8') msg['Subject'] = sub msg['From'] = me msg['To'] = ";".join(to_list) try: server = smtplib.SMTP() server.connect(mail_host) server.login(mail_user,mail_pass) server.sendmail(me, to_list, msg.as_string()) server.close() return True except Exception, e: print str(e) return False def Dns(domain): A = dns.resolver.query(domain, 'A') for i in A.response.answer: for p in i: iplist.append(p.address) def Checkip(ip): try: httpClient = httplib.HTTPConnection(ip, 80, timeout=30) #这里设置的是根目录,需要将/改成你监控页面的访问路径 httpClient.request('GET', '/') #response是HTTPResponse对象 response = httpClient.getresponse() #获取响应码和状态 print response.status print response.reason except Exception, e: print e finally: #判断响应码是否是200, if response.status==200: print ip+"[ok]" else: #响应码不是200就调用send_mail函数发送邮件报警 send_mail(mailto_list,"DNS轮询发现故障节点",ip) print ip+"[Error]" if httpClient: httpClient.close() if __name__ =="__main__": #如果有多个域名就在定义一个域名列表 循环遍历即可 for d in dlist: #print d Dns(d) for i in iplist: Checkip(i) |
本博客至此介绍,如有问题请留言!
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞0
添加新评论0 条评论