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 ...
随机推荐
- js中的typeof和instanceof和===
typeof: 用于判断number/string/boolean/underfined类型/function 不能判断:null和object ,不能区分object和Array instanceo ...
- 在web工程中设置首页的页面
有些时候删除了系统自带的index.jsp删除后会出现如下图错误 解决办法,新创建一个以你自己命名的jsp文件,然后在对该web工程的WEB-INF 目录下的web.xml进行添加加上下面的注释所带的 ...
- 计蒜客 数字解码 dp
思路:dp(i)表示前i个字符的解码方案种数.进行状态转移时需要仔细思考,分情况讨论: 设第i个字符和第i-1个字符组成的数为x. 1.如果x根本不可能出现说明不是合理的编码,直接使dp(i)为0,例 ...
- Tcpdump安装使用
本来想安装wireshark yum install wireshark 命令行下使用,包含抓包的基本功能 yum install wireshark-gnome 提供wireshark(UI)工 ...
- ubuntu配置
首先就是Ubuntu的更新源问题,需要更改,否则更新不了. 其次就是Securecrt的远程登陆问题,windows主机和ubuntu虚拟机如果能通信,要求在同一网段上,而ubuntu是动态加载,需要 ...
- Linux(二)命令
Linux命令一.命令基本格式 命令行头部显示字符意义 [root@localhost ~] # root 用户名 localhost 主机名 ~ 当前目录 ~表示home目录 # 用户权限,#表示超 ...
- FusionCharts封装-Category
Categories.java: /** * @Title:Categories.java * @Package:com.fusionchart.model * @Description:Fusion ...
- 安装Apache提示APR not found的解决办法
不知道为什么在安装apache2.2.22版本的时候没有任何问题,直接使用命令 ./configure --prefix=/home/www/www_test/software/apache-2.2. ...
- 【linux】php安装 出现Sorry, I cannot run apxs. ***错误解决方法
首先, 通过错误提示, 我们得知"I cannot run apxs". 我一直以为是apxs安装有问题, 但找了很久仍未得到合理的解释和解决方法. 于是我直接运行"/u ...
- HighCharts中的Ajax请求的2D折线图
HighCharts中的Ajax请求的2D折线图 设计源码: <!DOCTYPE html> <html> <head> <meta charset=&quo ...