轮循方式_自动化运维之dns域名轮循监控

今天我们来看一下如何利用python的DNS模块来做一个简单的DNS域名轮循业务监控

DNS轮循技术可以实现一个域名对应多个IP,从而实现最简单且高效的负载均衡。不过这个技术最大的缺点在于当目标主机不可用时,无法被自动删除。本程序通过dns.resolver.query()方法获取业务域名A记录信息,查询出所有IP地址,再使用request()方法以GET方式请求页面,监控业务所有服务器的IP是否正常

代码如下:

import dns.resolver

import os

import http.client

iplist = []

testdomain = 'www.baidu.com' #定义业务域名

def get_iplist(domain = ""):

try:

A = dns.resolver.query(domain,'A')

except Exception as e:

print ("dns解析错误,错误为:"+str(e))

return

for i in A.response.answer:

for j in i.items:

iplist.append(j.address)#追加到iplist

return True

def checkip(ip):

checkurl = ip +":80"

getcontent = ""

http.client.socket.setdefaulttimeout(5) #定义http连接超时时间(5秒)

conn = http.client.HTTPConnection(checkurl) #创建http连接对象

try:

conn.request("GET", "/",headers = {"Host": testdomain}) #发起URL请求,添加host主机头

r=conn.getresponse()

getcontent =r.read(15) #获取URL页面前15个字符,以便做可用性校验

# print(getcontent) # 输出的是b''。需要用bytes转换下

finally:

if getcontent==bytes("", 'utf-8'): #监控URL页的内容一般是事先定义好的,比如"HTTP200"等

print (ip+" [OK]")

else:

print (ip+" [Error]" ) #此处可放告警程序,可以是邮件、短信通知

if __name__=="__main__":

if get_iplist(testdomain) and len(iplist)>0: #条件:域名解析正确且至少返回一个IP

for ip in iplist:

checkip(ip)

else:

print ("dns resolver error.")

我们以某度为例,进行dns服务器轮循,得到的结果如下图:

ef4643fbc80605450099a91a3e56cb00.png

可以看出,解析出两个IP地址,并且服务正常。

如果本文对您有帮助,请关注并点赞,感谢您的观看,如有问题请私信或留言。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值