본문 바로가기
카테고리 없음

파이썬으로 웹사이트 상태 모니터링 자동화하기

by 혜택보관소 2024. 11. 25.

웹사이트 상태를 모니터링하는 것은 서비스의 가용성과 안정성을 유지하는 데 매우 중요합니다.

파이썬의 requestsschedule 모듈을 사용하면 간단한 상태 모니터링 시스템을 구축할 수 있습니다.

이번 글에서는 웹사이트 상태를 확인하고 문제 발생 시 이메일로 알림을 보내는 자동화 시스템을 구현하는 방법을 알아보겠습니다.

파이썬 웹사이트 상태 모니터링

웹사이트 상태 모니터링의 필요성

웹사이트가 다운되거나 응답 속도가 느려지면 비즈니스에 큰 영향을 미칠 수 있습니다.

정기적으로 웹사이트의 상태를 확인하고, 문제가 발생하면 즉시 알림을 받을 수 있는 시스템을 구축하면 이러한 위험을 줄일 수 있습니다.

모니터링을 위한 라이브러리 설치

다음 명령어로 필요한 파이썬 라이브러리를 설치합니다:

pip install requests schedule smtplib

requests: HTTP 요청을 보내고 응답을 확인하기 위해 사용.
schedule: 일정한 간격으로 작업을 실행하기 위해 사용.
smtplib: 이메일 알림을 보내기 위해 사용.

웹사이트 상태 확인

requests 모듈을 사용하여 웹사이트의 HTTP 상태 코드를 확인할 수 있습니다.

예제: 웹사이트 상태 확인

import requests

def check_website_status(url):
    try:
        response = requests.get(url, timeout=5)
        if response.status_code == 200:
            print(f"{url} is up and running.")
        else:
            print(f"{url} returned status code: {response.status_code}")
    except requests.exceptions.RequestException as e:
        print(f"Error accessing {url}: {e}")

# 웹사이트 상태 확인
check_website_status("https://example.com")

위 코드에서는 requests.get()를 사용해 웹사이트에 요청을 보내고, 상태 코드를 기반으로 사이트 상태를 출력합니다.

이메일 알림 시스템 구현

문제가 발생했을 때 이메일을 통해 알림을 받으려면 smtplib를 사용합니다.

예제: 이메일 알림 보내기

import smtplib
from email.mime.text import MIMEText

def send_email_alert(subject, body, recipient_email):
    sender_email = "your_email@gmail.com"
    sender_password = "your_password"  # Gmail 앱 비밀번호 사용
    smtp_server = "smtp.gmail.com"
    smtp_port = 587

    # 이메일 구성
    msg = MIMEText(body)
    msg["Subject"] = subject
    msg["From"] = sender_email
    msg["To"] = recipient_email

    # 이메일 전송
    with smtplib.SMTP(smtp_server, smtp_port) as server:
        server.starttls()
        server.login(sender_email, sender_password)
        server.sendmail(sender_email, recipient_email, msg.as_string())

    print("알림 이메일이 전송되었습니다.")

# 이메일 알림 테스트
send_email_alert(
    subject="웹사이트 상태 알림",
    body="https://example.com이 응답하지 않습니다.",
    recipient_email="recipient@example.com"
)

위 코드는 SMTP 서버를 사용하여 이메일을 보내는 간단한 알림 시스템을 구현합니다.

모니터링과 알림 통합

웹사이트 상태를 정기적으로 확인하고, 문제가 발생하면 이메일 알림을 보내는 프로그램을 작성해보겠습니다.

예제: 모니터링 및 알림 시스템

import requests
import smtplib
from email.mime.text import MIMEText
import time

# 이메일 알림 함수
def send_email_alert(subject, body, recipient_email):
    sender_email = "your_email@gmail.com"
    sender_password = "your_password"
    smtp_server = "smtp.gmail.com"
    smtp_port = 587

    msg = MIMEText(body)
    msg["Subject"] = subject
    msg["From"] = sender_email
    msg["To"] = recipient_email

    with smtplib.SMTP(smtp_server, smtp_port) as server:
        server.starttls()
        server.login(sender_email, sender_password)
        server.sendmail(sender_email, recipient_email, msg.as_string())

# 웹사이트 상태 확인 함수
def check_website_status(url):
    try:
        response = requests.get(url, timeout=5)
        if response.status_code != 200:
            send_email_alert(
                subject="웹사이트 상태 이상",
                body=f"{url}이 상태 코드 {response.status_code}를 반환했습니다.",
                recipient_email="recipient@example.com"
            )
    except requests.exceptions.RequestException as e:
        send_email_alert(
            subject="웹사이트 접속 실패",
            body=f"{url}에 접속할 수 없습니다. 오류: {e}",
            recipient_email="recipient@example.com"
        )

# 주기적으로 상태 확인
def monitor_website():
    url = "https://example.com"
    while True:
        check_website_status(url)
        time.sleep(60)  # 60초마다 상태 확인

monitor_website()

위 코드는 지정된 URL을 60초 간격으로 확인하며, 상태 이상이 발생하면 이메일 알림을 보냅니다.

schedule을 사용한 정기 실행

schedule 모듈을 사용하면 주기적으로 상태 확인 작업을 실행할 수 있습니다.

예제: schedule로 상태 확인

import schedule

# 주기적으로 실행할 작업 정의
schedule.every(1).minutes.do(lambda: check_website_status("https://example.com"))

while True:
    schedule.run_pending()
    time.sleep(1)

위 코드는 schedule 모듈을 사용해 1분마다 상태 확인 작업을 실행합니다.

전체 예제: 웹사이트 모니터링 시스템

아래는 모든 기능을 통합한 전체 예제입니다.

import requests
import smtplib
from email.mime.text import MIMEText
import schedule
import time

# 이메일 알림 함수
def send_email_alert(subject, body, recipient_email):
    sender_email = "your_email@gmail.com"
    sender_password = "your_password"
    smtp_server = "smtp.gmail.com"
    smtp_port = 587

    msg = MIMEText(body)
    msg["Subject"] = subject
    msg["From"] = sender_email
    msg["To"] = recipient_email

    with smtplib.SMTP(smtp_server, smtp_port) as server:
        server.starttls()
        server.login(sender_email, sender_password)
        server.sendmail(sender_email, recipient_email, msg.as_string())

# 웹사이트 상태 확인 함수
def check_website_status(url):
    try:
        response = requests.get(url, timeout=5)
        if response.status_code != 200:
            send_email_alert(
                subject="웹사이트 상태 이상",
                body=f"{url}이 상태 코드 {response.status_code}를 반환했습니다.",
                recipient_email="recipient@example.com"
            )
    except requests.exceptions.RequestException as e:
        send_email_alert(
            subject="웹사이트 접속 실패",
            body=f"{url}에 접속할 수 없습니다. 오류: {e}",
            recipient_email="recipient@example.com"
        )

# 스케줄 설정
schedule.every(1).minutes.do(lambda: check_website_status("https://example.com"))

# 실행 루프
while True:
    schedule.run_pending()
    time.sleep(1)

마무리

이번 글에서는 파이썬을 사용해 웹사이트 상태를 모니터링하고, 문제가 발생하면 이메일 알림을 보내는 자동화 시스템을 구현하는 방법을 살펴보았습니다.

이 시스템은 서비스의 안정성을 유지하는 데 큰 도움이 됩니다.

 

실습을 통해 자신만의 모니터링 프로그램을 만들어보세요!