웹사이트 상태를 모니터링하는 것은 서비스의 가용성과 안정성을 유지하는 데 매우 중요합니다.
파이썬의 requests와 schedule 모듈을 사용하면 간단한 상태 모니터링 시스템을 구축할 수 있습니다.
이번 글에서는 웹사이트 상태를 확인하고 문제 발생 시 이메일로 알림을 보내는 자동화 시스템을 구현하는 방법을 알아보겠습니다.
웹사이트 상태 모니터링의 필요성
웹사이트가 다운되거나 응답 속도가 느려지면 비즈니스에 큰 영향을 미칠 수 있습니다.
정기적으로 웹사이트의 상태를 확인하고, 문제가 발생하면 즉시 알림을 받을 수 있는 시스템을 구축하면 이러한 위험을 줄일 수 있습니다.
모니터링을 위한 라이브러리 설치
다음 명령어로 필요한 파이썬 라이브러리를 설치합니다:
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)
마무리
이번 글에서는 파이썬을 사용해 웹사이트 상태를 모니터링하고, 문제가 발생하면 이메일 알림을 보내는 자동화 시스템을 구현하는 방법을 살펴보았습니다.
이 시스템은 서비스의 안정성을 유지하는 데 큰 도움이 됩니다.
실습을 통해 자신만의 모니터링 프로그램을 만들어보세요!