• DNS域名轮询业务监控


    一、项目介绍

    大部分的DNS解析都是一个域名对应一个IP地址,但是通过DNS轮询技术可以做到一个域名对应多个IP,从而实现最简单且高效的负载均衡,不过此方法最大的弊端是目标主机不可用时无法被自动剔除,因此做好业务主机的服务可用监控至关重要。此项目通过分析当前域名的解析IP,再结合服务端口探测来实现自动监控,在域名解析中添加,删除IP时,无须对监控脚本进行更改。

    二、思路

    1. 实现域名的解析,获取域名所有的A记录解析IP列表
    2. 对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]
    
     
  • 相关阅读:
    Linux如何查找大文件或目录总结
    Linux下动态调整LVM文件系统大小
    ios学习路线图
    js模块,类,继承,命名空间,私有属性等相关概念梳理
    <代码大全2>记录
    2017读书计划
    Spring声明式事务
    Spring-Aop
    Spring静态工厂和扫描器
    Spring-IOC
  • 原文地址:https://www.cnblogs.com/xiongwei/p/15025709.html
Copyright © 2020-2023  润新知