반응형
1. 서론: "서버가 죽었는데 왜 아무도 모르죠?"
서버 관리자에게 가장 끔찍한 상황은 고객으로부터 "사이트가 안 들어가져요"라는 전화를 받는 것입니다. 관리는 사람이 직접 하는 것이 아니라, 시스템이 스스로 보고하게 만들어야 합니다.
지난 포스팅에서 우리는 파이썬으로 서버 상태를 체크하는 기초 로직을 배웠습니다. 오늘은 한 발 더 나아가, 서버에 이상이 생겼을 때 내 스마트폰의 슬랙(Slack) 앱으로 즉시 "장애 발생!" 메시지를 보내는 자동화 시스템을 구축해 보겠습니다.
2. 왜 슬랙(Slack)인가?
많은 메신저 중 슬랙을 선택하는 이유는 명확합니다.
- API 친화적: 'Incoming Webhooks'라는 기능을 통해 복잡한 인증 없이 URL 하나만으로 메시지를 보낼 수 있습니다.
- 채널 관리: 팀원들과 장애 상황을 실시간으로 공유하고 히스토리를 관리하기에 최적입니다.
- 무료: 개인 프로젝트나 소규모 팀 단계에서는 비용 부담 없이 강력한 알림 기능을 사용할 수 있습니다.
3. 사전 준비: 슬랙 Webhook URL 발급받기
코드를 짜기 전에 슬랙에서 메시지를 받아줄 '통로'를 만들어야 합니다.
- 슬랙 워크스페이스에 접속하여 알림을 받을 채널을 만듭니다. (예: #server-status)
- Slack API 홈페이지에서 **[Create New App]**을 클릭합니다.
- [Incoming Webhooks] 메뉴를 선택하고 'On'으로 활성화합니다.
- 하단의 **[Add New Webhook to Workspace]**를 눌러 채널을 지정하고, 생성된 Webhook URL을 복사해 둡니다.
4. 실전 파이썬 스크립트: 서버 체크 및 슬랙 전송
이제 파이썬이 서버를 감시하다가, 문제가 생기면 슬랙으로 메시지를 쏘는 전체 코드를 작성해 보겠습니다.
Python
import requests
import time
from datetime import datetime
# 1. 환경 설정
SLACK_WEBHOOK_URL = "https://hooks.slack.com/services/XXXX/XXXX/XXXX" # 본인의 URL 입력
TARGET_URL = "http://localhost" # 모니터링할 내 서버 주소
def send_slack_notification(message):
"""슬랙 채널로 메시지를 전송하는 함수"""
payload = {"text": message}
try:
response = requests.post(SLACK_WEBHOOK_URL, json=payload)
if response.status_code == 200:
print("✅ 슬랙 알림 전송 완료")
else:
print(f"❌ 슬랙 전송 실패 (코드: {response.status_code})")
except Exception as e:
print(f"🚨 슬랙 통신 오류: {e}")
def check_server():
"""서버 상태를 체크하고 장애 시 알림을 보내는 함수"""
now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
try:
# 서버에 접속 시도 (타임아웃 5초)
response = requests.get(TARGET_URL, timeout=5)
if response.status_code == 200:
print(f"[{now}] 서버 정상 작동 중...")
else:
msg = f"⚠️ [서버 경고] {now}\n상태 코드: {response.status_code}\n확인이 필요합니다!"
send_slack_notification(msg)
except Exception as e:
# 접속 실패(서버 다운) 시 슬랙 전송
msg = f"🚨 [서버 다운 발생!] {now}\n오류 내용: {e}\n즉시 점검하세요!"
send_slack_notification(msg)
print(f"[{now}] 장애 발생! 슬랙으로 알림을 보냈습니다.")
if __name__ == "__main__":
print("🚀 서버 감시 스케줄러를 시작합니다...")
# 무한 루프를 돌며 1분마다 체크 (테스트 시에는 시간을 조절하세요)
while True:
check_server()
time.sleep(60) # 60초 대기
5. 코드 상세 해설 (전문성 강화 포인트)
- requests.post(json=payload): 슬랙 API는 JSON 형식을 요구합니다. 파이썬의 딕셔너리를 자동으로 JSON으로 변환하여 본문에 담아 보냅니다.
- try-except 예외 처리: 서버가 완전히 꺼져 있을 경우 requests.get은 에러를 발생시킵니다. 이 에러를 잡아내어 슬랙 메시지로 변환하는 것이 이 시스템의 핵심입니다.
- while True & time.sleep: 스크립트가 한 번 실행되고 끝나는 것이 아니라, 백그라운드에서 계속 돌며 감시하도록 구현했습니다.
6. 서버 관리자의 실무 적용 팁
이 시스템을 실제 윈도우 서버에서 더 안정적으로 운영하려면 다음을 고려하세요.
- 백그라운드 실행: 파워쉘 창을 닫아도 계속 돌아가도록 윈도우 스케줄러(Task Scheduler)에 등록하세요.
- 로그 기록: print 대신 logging 라이브러리를 사용해 텍스트 파일로 기록을 남기면 사후 분석에 큰 도움이 됩니다.
- 응답 속도 체크: 단순 가동 여부뿐 아니라, 응답 속도가 3초 이상 길어지면 "지연 발생" 알림을 보내도록 업그레이드할 수 있습니다.
7. 마치며: 자동화로 얻는 여유
이제 여러분은 서버가 죽을까 봐 24시간 불안해하지 않아도 됩니다. 문제가 생기면 주머니 속의 스마트폰이 가장 먼저 알려줄 테니까요.
파이썬을 활용한 인프라 자동화는 업무 효율을 극대화해 주는 가장 강력한 도구입니다. 다음 포스팅에서는 서버의 누적 가동률을 데이터베이스(DB)에 저장하고 시각화하는 방법에 대해 다뤄보겠습니다.
반응형
'Server Story....' 카테고리의 다른 글
| Linux 입성: Ubuntu Server 24.04 LTS 설치 및 초기 SSH 설정 (0) | 2026.03.30 |
|---|---|
| [Windows Server 2022] MSSQL Express 설치 및 파이썬 연동을 위한 외부 접속 설정 가이드 (0) | 2026.03.29 |
| [Python] 내 웹 서버는 안전할까? 파이썬으로 만드는 실시간 서버 상태 모니터링 도구 (0) | 2026.03.28 |
| [Python] 내 웹 서버는 안전할까? 파이썬으로 만드는 실시간 서버 상태 모니터링 도구 (0) | 2026.03.28 |
| [Windows Server] IIS 웹 서버 설치 및 기본 페이지 구동하기 (0) | 2026.03.28 |