DNS域名轮询业务监控
2021/7/18 6:06:18
本文主要是介绍DNS域名轮询业务监控,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
阅读目录(Content)
- 一、项目介绍
- 二、思路
- 三、编写程序
一、项目介绍
大部分的DNS解析都是一个域名对应一个IP地址,但是通过DNS轮询技术可以做到一个域名对应多个IP,从而实现最简单且高效的负载均衡,不过此方法最大的弊端是目标主机不可用时无法被自动剔除,因此做好业务主机的服务可用监控至关重要。此项目通过分析当前域名的解析IP,再结合服务端口探测来实现自动监控,在域名解析中添加,删除IP时,无须对监控脚本进行更改。
回到顶部(go to top)二、思路
- 实现域名的解析,获取域名所有的A记录解析IP列表
- 对IP列表进行HTTP级别的探测
三、编写程序
通过dns.resolver,query()方法获取业务域名A记录信息,查询出所有IP地址列表,再使用httplib模块的request方法以get方式请求监控页面,监控业务所有服务的IP是否服务正常。
#!/usr/bin env python import dns.resolver import http.client ip_list=[] #定义域名IP列表变量 app_domain="baidu.com" #定义业务域名 def get_iplist(domain=""): #域名解析函数,解析成功IP将被迫追加到iplist try: A = dns.resolver.query(domain,'A') #解析A记录类型 except Exception as e: print("dns resolver error:"+str(e)) return None for i in A.response.answer: for j in i.items: ip_list.append(j.address) #追加到iplist return True def checkip(ip): check_url=ip + ":80" get_content="" code=None conn=http.client.HTTPConnection(check_url,timeout=5) #创建http连接对象,定义http连接超时时间(5秒) try: conn.request("GET","/",headers={"Host": app_domain}) #发起URL请求,添加http连接对象 r=conn.getresponse() get_content=r.read(15) #获取URL页面前15的字符,以便做可用性校验 code=r.code #获取状态码 finally: if get_content=="<!DOCTYPE HTML>": #获取URL页面的内容一般是事先定义好的,比如"HTTP2000"等 print(ip + " [OK]") elif code in [200,301,302]: #正常状态码 print(ip + " [OK]") else: print(ip + " [Error]") #此处可放告警程序,可以是邮件、短信通知 if __name__ == '__main__': if get_iplist(app_domain) and len(ip_list) > 0: #条件:域名解析正确至少返回一个IP for ip in ip_list: checkip(ip) else: print('dns resolver error.') # run /usr/local/bin/python3.6 /Users/xcn/PycharmProjects/自动化运维/IPy实用的IP地址处理模块/案例1.py 123.125.115.110 [OK] 220.181.57.216 [OK]分类
#!/usr/bin env python import dns.resolver import http.client ip_list=[] #定义域名IP列表变量 app_domain="baidu.com" #定义业务域名 def get_iplist(domain=""): #域名解析函数,解析成功IP将被迫追加到iplist try: A = dns.resolver.query(domain,'A') #解析A记录类型 except Exception as e: print("dns resolver error:"+str(e)) return None for i in A.response.answer: for j in i.items: ip_list.append(j.address) #追加到iplist return True def checkip(ip): check_url=ip + ":80" get_content="" code=None conn=http.client.HTTPConnection(check_url,timeout=5) #创建http连接对象,定义http连接超时时间(5秒) try: conn.request("GET","/",headers={"Host": app_domain}) #发起URL请求,添加http连接对象 r=conn.getresponse() get_content=r.read(15) #获取URL页面前15的字符,以便做可用性校验 code=r.code #获取状态码 finally: if get_content=="<!DOCTYPE HTML>": #获取URL页面的内容一般是事先定义好的,比如"HTTP2000"等 print(ip + " [OK]") elif code in [200,301,302]: #正常状态码 print(ip + " [OK]") else: print(ip + " [Error]") #此处可放告警程序,可以是邮件、短信通知 if __name__ == '__main__': if get_iplist(app_domain) and len(ip_list) > 0: #条件:域名解析正确至少返回一个IP for ip in ip_list: checkip(ip) else: print('dns resolver error.') # run /usr/local/bin/python3.6 /Users/xcn/PycharmProjects/自动化运维/IPy实用的IP地址处理模块/案例1.py 123.125.115.110 [OK] 220.181.57.216 [OK]
这篇关于DNS域名轮询业务监控的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Mybatis官方生成器资料详解与应用教程
- 2024-11-26Mybatis一级缓存资料详解与实战教程
- 2024-11-26Mybatis一级缓存资料详解:新手快速入门
- 2024-11-26SpringBoot3+JDK17搭建后端资料详尽教程
- 2024-11-26Springboot单体架构搭建资料:新手入门教程
- 2024-11-26Springboot单体架构搭建资料详解与实战教程
- 2024-11-26Springboot框架资料:新手入门教程
- 2024-11-26Springboot企业级开发资料入门教程
- 2024-11-26SpringBoot企业级开发资料详解与实战教程
- 2024-11-26Springboot微服务资料:新手入门全攻略