Please indicate the source of Reprint: http://blog.csdn.net/l1028386804/article/details/78965865
Most of DNS resolution is a domain name corresponding to an IP address, but through DNS polling technology, a domain name corresponding to multiple IPS can be achieved, so as to achieve the simplest and most efficient load balancing. However, the biggest drawback of this scheme is that the target host cannot be automatically removed when it is not available, so it is very important to monitor the service availability of the business host. This example realizes automatic monitoring by analyzing the resolution IP of current domain name and combining with service port detection. When adding or deleting IP in domain name resolution, there is no need to modify the monitoring monitor.
We are mainly divided into the following two steps to realize this example:
1) Realize domain name resolution, obtain all records of domain name resolution IP list
2) HTTP level detection of IP list
The specific code is as follows:
We can put this Python script into the crontab execution plan, and combine with the alarm program, which can basically meet the business monitoring based on domain name polling.# -*- coding:UTF-8 -*- ''' Created on 2018 January 3, 2010 @author: liuyazhuang ''' import dns.resolver import httplib #Define domain name IP list variable iplist = [] #Define business domain name appdomain = "Your domain name" #Domain name resolution function. The resolved IP address will be appended to the iplist def get_iplist(domain = ""): try: A = dns.resolver.query(domain, 'A') except Exception, e: print "dns resolver error: " + str(e) return for i in A.response.answer: for j in i.items: #Append IP to list iplist.append(j.address) return True #Check whether IP can connect def checkip(ip): checkurl = ip+":80" getcontent = "" #Define http connection timeout 5 seconds httplib.socket.setdefaulttimeout(5) #Create http connection object conn = httplib.HTTPConnection(checkurl) try: #Initiate URL request and add host host header conn.request("GET", "/", headers = {"Host" : appdomain}) r = conn.getresponse() getcontent = r.read(15) finally: #The content of monitoring URL page is generally defined in advance, such as "HTTP 200", etc print getcontent if getcontent == "<!DOCTYPE html>": print ip + " [OK]" else: #Alarm program can be put here, which can be email or SMS notification print ip + " [ERROR]" if __name__ == "__main__": #Condition: domain name resolves correctly and returns at least one IP if get_iplist(appdomain) and len(iplist) > 0: for ip in iplist: checkip(ip) else: print "dns resolver error."