python DNS域名轮询业务监控
应用场景:
目前DNS支持一个域名对应多个IP的解析,优势是可以起到负载均衡的作用,最大的问题是目标主机不可用时无法自动剔除,因此必须在自己的业务端写好监控与发现,怎么样来做这样的监控,以python为例,使用的是dnspython模块,通过dnspython模块解析出域名的A记录 IP地址,然后使用http 80端口探测该IP是否正常
1 安装
pip dnspython
2 代码展示:
#!/usr/bin/env python
#_*_coding:utf-8 _*_
#__author__:Davidlua import dns.resolver
import os
import httplib iplist = [] #定义域名IP列表变量
appdomain = "www.baidu.com" #定义目标域名 def get_iplist(domain=""):
"""域名解析函数,解析成功IP追加到iplist"""
try:
A = dns.resolver.query(domain,'A') #解析A记录
except Exception,e:
print "dns resolver error:" +str(e)
return
for i in A.response.answer: #使用responese.answer方法
for j in i.items:
iplist.append(j) #追加到iplist
return True def checkip(ip):
oip = ('%s') % ip #将解析的Ip转为字符串格式,以便跟:80端口合并
checkurl = oip+":80"
getcontent = ""
httplib.socket.setdefaulttimeout(5) #定义http链接超时时间
conn=httplib.HTTPConnection(checkurl) #创建http链接对象 try:
conn.request('GET',"/",headers={"Host":appdomain}) #发起url请求,添加host主机
r = conn.getresponse()
getcontent = r.read(15) #只获取url页面的15个字符,用来做可用性校验
finally:
if getcontent == "<!DOCTYPE html>": #监控url页面的类型要先查清楚,在做对比,这里<!DOCTYPE html>要大写,也可以对比http状态码
print oip+" [ok]"
else:
print oip+" [error]" #这里可以放置告警程序,比如发短信,邮件等 if __name__ == "__main__":
if get_iplist(appdomain) and len(iplist) > 0: #域名解析正确,且不少于1个IP
for ip in iplist:
checkip(ip)
else:
print "dns resolver error."
3 结果展示
C:\Python27\python.exe D:/python/github/miniwanmonitor/domen.py
www.a.shifen.com. [ok]
14.215.177.38 [ok]
14.215.177.39 [ok]
dns resolver error.
Process finished with exit code 0
python DNS域名轮询业务监控的更多相关文章
- python 定时器,轮询定时器
首先想要实现的效果是:每隔1段时间,就去调用1个接口确认结果,直到接口返回的结果为true,停止调用 所以这里会用到python的定时器 先来了解最简单的定时器: python 定时器默认定时器只执行 ...
- linux实现DNS轮询实现负载平衡
DNS 轮询机制会受到多方面的影响,如:A记录的TTL时间长短的影响:别的 DNS 服务器 Cache 的影响:windows 客户端也有一个DNS Cache.这些都会影响 DNS 轮询的效果.因此 ...
- 用fiddler测试ip轮询
测试业务: 服务端根据域名配置了三台服务器ip,测试ip轮询的逻辑 测试方法: 使用fiddler配置hosts即可 1.1.1.1 第一台ip 1.1.1.1 第二台ip 1.1.1.1 第三台ip ...
- Nginx反向代理+DNS轮询+IIS7.5 千万PV 百万IP 双线 网站架构案例
原文地址:http://www.jb51.net/article/31844.htm Nginx ("engine x") 是一个高性能的 HTTP 和反向代理服务器,也是一个 ...
- Linux-LVS为何不能完全替代DNS轮询
转自:链接 上一篇文章“一分钟了解负载均衡的一切”引起了不少同学的关注,评论中大家争论的比较多的一个技术点是接入层负载均衡技术,部分同学持这样的观点: 1)nginx前端加入lvs和keepalive ...
- 系统架构之负载均衡【F5\nginx\LVS\DNS轮询\】
在做系统架构规划的时候,负载均衡,HA(高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点,当活动节点出现故障的时候,由备用节点接管)都是经常需要考虑的 ...
- 【58沈剑架构系列】lvs为何不能完全替代DNS轮询
上一篇文章“一分钟了解负载均衡的一切”引起了不少同学的关注,评论中大家争论的比较多的一个技术点是接入层负载均衡技术,部分同学持这样的观点: 1)nginx前端加入lvs和keepalived可以替代“ ...
- 【转载】lvs为何不能完全替代DNS轮询
上一篇文章"一分钟了解负载均衡的一切"引起了不少同学的关注,评论中大家争论的比较多的一个技术点是接入层负载均衡技术,部分同学持这样的观点: 1)nginx前端加入lvs和keepa ...
- lvs为何不能完全替代DNS轮询--转
原文地址:http://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=2651959595&idx=1&sn=5f0633afd2 ...
随机推荐
- JAVA浮点数计算精度损失底层原理与解决方案
浮点数会有精度损失这个在上大学的时候就已经被告知,但是至今完全没有想明白其中的原由,老师讲的时候也是一笔带过的,自己也没有好好琢磨.终于在工作的时候碰到了,于是google了一番. 问题: 对两个do ...
- 初识vue——语法初解
这次我们按照官网上的教程对vue的语法进行一个初步的了解: 一.声明式渲染 Vue.js的核心是一个允许采用简洁的模板语法来声明式的将数据渲染仅DOM的系统: 1.我们在HelloWorld里面输入下 ...
- 为什么要使用Docker?
作为一种新兴的虚拟化方式,Docker跟传统的虚拟化方式相比具有众多的优势. 更高效的利用系统资源 由于容器不需要进行硬件虚拟及运行完整操作系统等额外开销,Docker对系统资源的利用率更高.无论是应 ...
- RegExp正则表达式规则以及常用正则表达式
html,body { font-family: "SF UI Display", ".PingFang SC", "PingFang SC" ...
- 2017CCPC 网络选拔赛1003 Ramsey定理
Ramsey定理 任意6个人中,一定有三个人互为朋友,或者互相不是朋友. 证明 这里我就不证明了.下面链接有证明 鸽巢原理 Ramsey定理 AC代码 #include <stdio.h> ...
- Android中Activity被系统会收前页面信息保存
1.重写onSaveInstanceState方法 protected void onSaveInstanceState(Bundle outState) { super.onSaveInstance ...
- 注意Vietnamese_CI_AS排序规则下的特殊字符大小敏感问题
注意Vietnamese_CI_AS排序规则下的特殊字符大小敏感问题 最近,在SQL Server中遇到了Vietnamese_CI_AS排序规则的特殊字符的大小写敏感问题,是的,你没有看错,这句 ...
- SAS︱数据索引、数据集常用操作(set、where、merge、append)
代码部分大多来源于姚志勇老师的<SAS编程与数据挖掘商业案例>. 每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ ------------ ...
- FusionCharts封装-dataset和categories
Chart.java: /** * @Title:Chart.java * @Package:com.fusionchart.model * @Description:FusionCharts 封装d ...
- dojo实现省份地市级联报错(二)