ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Selenium Chrome driver 자동 설정하기
    Python 2024. 3. 11. 08:35
    반응형

    1. 파이썬을 이용한 웹사이트 모니터링

    홈페이지와 같은 웹사이트를 운영하다 보면 웹사이트의 접속 시간과 서비스 다운 여부를 모니터링해야 할 필요가 있다. 이때 파이썬을 사용한다면 굳이 직접 접속하지 않고도 쉽게 웹사이트의 상태를 확인하고, 접속 지연 시간을 측정할 수 있다. 웹사이트 접속이 지연되거나 접속에 실패할 경우에 대한 정보도 자동으로 확인할 수 있어 웹 사이트 접속 상태 모니터링에 들어가는 시간과 노력을 아낄 수 있다.

     

    2. Requests 모듈

    파이썬의 'requests' 모듈은 웹사이트 모니터링에 사용되는 매우 유용한 라이브러리이다. 이 모듈을 사용하면 HTTP 또는 HTTPS 요청을 쉽게 보낼 수 있어 웹사이트의 상태를 확인하고, 접속 지연 시간을 측정할 수 있다. 웹사이트 접속 상태를 확인하기 위해서는 HTTP 상태 코드를 검사해야 하는데, 'requests' 모듈은 이를 쉽게 확인 할 수 있다. 접속 지연 시간을 측정하기 위해서는 요청을 보낸 시점과 응답을 받은 시점의 시간 차를 계산하면 된다.

     

    3. Code Example

    먼저 간단하게 'requests' 모듈을 사용하여 모니터링 대상이 되는 웹사이트의 서비스가 정상적으로 제공되는지 확인을 하는 코드를 만들어 보겠다. 이 코드는 대상 웹사이트의 URL로 GET 요청을 보내 응답코드가 200일 경우, 즉 정상적으로 서비스가 제공되고 있는지 여부를 판별해 준다. 함수명은 'website_health_check'로 대상 url을 인자값으로 받아와 검사하도록 한다.

    import requests
    
    def website_health_check(url):
        try:
            response = requests.get(url)
            if response.status_code == 200:
                return True
            else:
                return False
        except requests.exceptions.RequestException as e:
            return False
    
    url = "https://www.example.com"
    
    if website_health_check(url):
        print(f"Website {url} is up and running")
    else:
        print(f"Website {url} is down")

    다음으로 위 코드에 접속 지연시간을 측정하여 60초가 넘을 경우에 request timeout으로 처리하는 함수를 추가로 구현해 주겠다. 함수의 이름은 'websitre_access_delay'로 url와 timeout 값 (default 60초)를 받아와 처리하도록 구현한다.

    import requests
    import time
    
    def website_health_check(url):
        try:
            response = requests.get(url)
            if response.status_code == 200:
                return True
            else:
                return False
        except requests.exceptions.RequestException as e:
            return False
    
    def website_access_delay(url, timeout):
        start_time = time.time()
        while time.time() - start_time < timeout:
            if website_health_check(url):
                end_time = time.time()
                return end_time - start_time
            time.sleep(1)
        return None
    
    url = "https://www.example.com"
    timeout = 60
    
    access_delay = website_access_delay(url, timeout)
    if access_delay:
        print(f"Website {url} became accessible after {access_delay} seconds")
    else:
        print(f"Website {url} didn't become accessible within {timeout} seconds")

    다음으로 앞서 구현한 'website_health_check' 함수는 404 에러와 같이 정상접속을 못할 경우에는 상태코드를 확인 할 수 없는 문제점이 있다. 이 부분을 조금 개선해 아래와 같이 수정해 준다.

    import requests
    
    def website_health_check(url):
        try:
            response = requests.get(url)
            if response.status_code == 200:
                return True
            else:
                return response.status_code
        except requests.exceptions.RequestException as e:
            return False
    
    url = "https://www.example.com"
    
    status = website_health_check(url)
    if status == True:
        print(f"Website {url} is up and running")
    else:
        print(f"Website {url} is down. Response code: {status}")

    이제 위에 작성했던 코드들을 모두 병합하여 정리하도록 한다. 웹사이트 모니터링을 하기 위한 파이썬 코드는 다음 세 가지 상태를 모니터링한다.

    • 웹사이트 정상접속 (Status 200)
    • 웹사이트 다운 (EX> Status 404, 503 등..)
    • Request timeout (60초)
    import requests
    import time
    
    def website_health_check(url):
        try:
            response = requests.get(url)
            if response.status_code == 200:
                return True
            else:
                return response.status_code
        except requests.exceptions.RequestException as e:
            return False
    
    def website_access_delay(url, timeout):
        start_time = time.time()
        while time.time() - start_time < timeout:
            status = website_health_check(url)
            if status == True:
                end_time = time.time()
                return (True, end_time - start_time)
            time.sleep(1)
        return (False, None)
    
    url = "https://www.example.com"
    timeout = 60
    
    status, delay = website_access_delay(url, timeout)
    if status == True:
        print(f"Website {url} is up and running, became accessible after {delay} seconds")
    elif delay == None:
        print(f"Website {url} did not become accessible within {timeout} seconds")
    else:
        print(f"Website {url} is down, response code: {delay}")

    4. 마치며

    위와 같이 웹사이트 모니터링에 Python의 Requests 모듈을 사용하는 방법을 다루어 보았다. 설명했듯이 위 코드는 HTTP 상태 코드와 웹사이트 접속 지연 시간을 확인하는 코드를 결합하여 웹사이트의 상태를 모니터링하기 위한 코드이다. 웹사이트의 상태는 접속 가능, 접속 불가, 접속 시간 초과 세 가지로 구분한다. 위코드에 정상이 아닐 경우 이메일이나 텍스트를 발송하는 기능을 추가하고, 주기적으로 코드가 실행되도록 Batch 나 Cron으로 등록해 두면 자동으로 웹사이트를 24시간 모니터링하는데 활용할 수 있다.

    반응형

    댓글

Designed by Tistory.