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域名轮询业务监控的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide
- 2025-01-11不得不了解的高效AI办公工具API
- 2025-01-102025 蛇年,J 人直播带货内容审核团队必备的办公软件有哪 6 款?
- 2025-01-10高效运营背后的支柱:文档管理优化指南
- 2025-01-10年末压力山大?试试优化你的文档管理
- 2025-01-10跨部门协作中的进度追踪重要性解析
- 2025-01-10总结 JavaScript 中的变体函数调用方式
- 2025-01-10HR团队如何通过数据驱动提升管理效率?6个策略
- 2025-01-10WBS实战指南:如何一步步构建高效项目管理框架?