Python 서버 다운타임 모니터링 봇 구축: Slack Webhook 자동화
[Productivity] Python 서버 다운타임 모니터링: Slack Webhook 자동화
"어제 밤새도록 이벤트 트래픽을 처리하던 서버가 새벽 3시에 뻗었는데, 아침 9시 출근해서 고객 CS가 쏟아질 때까지 아무도 그 사실을 모르고 있었습니다."
서비스를 운영하는 개발팀과 인프라 담당자에게 이보다 끔찍한 악몽은 없습니다. AWS CloudWatch나 Datadog 같은 훌륭한 엔터프라이즈 모니터링 도구들이 있지만, 세팅이 복잡하고 유지 비용이 발생하기 때문에 작은 사이드 프로젝트나 스타트업 환경에서는 도입을 망설이게 됩니다.
생산성의 핵심은 무거운 시스템이 아니라, '문제 상황이 발생했을 때 인간이 가장 먼저 인지할 수 있도록 데이터를 밀어주는(Push) 파이프라인'을 구축하는 것입니다. 본 가이드에서는 어떠한 유료 툴도 사용하지 않고, Python 스크립트 단 20줄과 Slack Webhook을 결합하여 실시간 헬스체크 알림망을 구축하는 초경량 자동화 아키텍처를 단호하게 제시합니다.
📌 이 글의 핵심 포인트
- 인지적 지연 방어: 에러를 찾아보는 것이 아니라, 에러가 나를 찾아오게 만드는 Webhook의 본질
- Slack 연동: 슬랙 Incoming Webhooks 앱을 통한 메신저 API 통로 개척
- 파이썬 자동화:
requests모듈을 활용한 핑(Ping) 테스트 및 리눅스 Cron 작업 스케줄링
1단계: 슬랙(Slack) 인커밍 웹훅(Incoming Webhook) 생성
에러 메시지를 수신할 슬랙 채널을 하나 파고, 해당 채널 설정에서 앱 추가(Add apps) 버튼을 누릅니다. Incoming WebHooks를 검색하여 추가한 뒤, 시스템이 뱉어주는 고유한 Webhook URL 주소를 복사해 둡니다. (이 주소가 유출되면 아무나 슬랙에 스팸을 보낼 수 있으므로 보안에 유의하십시오.)
2단계: 완벽한 트러블슈팅 - 초경량 Python 헬스체크 봇
모니터링 스크립트는 죽어버릴 수 있는 대상 서버가 아니라, 대상 서버와 완전히 물리적으로 분리된 외부의 작은 인스턴스(혹은 라즈베리파이 등)에서 돌아가야 합니다. monitor.py 파일을 생성하고 아래 아키텍처를 주입하십시오.
import requests
import json
import datetime
# 모니터링할 타겟 서버 주소 및 슬랙 웹훅 주소
TARGET_URL = "https://www.your-production-server.com"
SLACK_WEBHOOK_URL = "https://hooks.slack.com/services/T000.../B000.../XXXX"
def check_server_status():
try:
# 서버에 GET 요청을 보내고 5초 이상 응답이 없으면 에러로 간주
response = requests.get(TARGET_URL, timeout=5)
# 200번대 정상 상태 코드가 아니면 서버가 터진 것으로 판단
if response.status_code != 200:
send_slack_alert(f"⚠️ 경고: 서버 응답 코드 {response.status_code}")
except requests.exceptions.RequestException as e:
# 아예 접속 자체가 안 되는 다운타임 상태
send_slack_alert(f"🚨 긴급: 서버가 다운되었습니다! \n에러 내용: {e}")
def send_slack_alert(message):
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
payload = {
"text": f"[{now}] {message}"
}
# 슬랙 웹훅으로 POST 요청을 쏘아 메시지 전송
requests.post(
SLACK_WEBHOOK_URL,
data=json.dumps(payload),
headers={'Content-Type': 'application/json'}
)
if __name__ == "__main__":
check_server_status()
3단계: 영구적 자동화 - 리눅스 Crontab 등록
스크립트를 매번 손으로 실행할 수는 없습니다. 리눅스 서버에 접속하여 crontab -e 명령어를 치고, 스크립트가 5분마다 한 번씩 자동으로 실행되도록 스케줄러를 등록합니다.
# 매 5분마다 파이썬 모니터링 스크립트 실행 (백그라운드)
*/5 * * * * /usr/bin/python3 /path/to/your/monitor.py
이제 메인 서버가 뻗는 순간, 길어도 5분 이내에 당신의 핸드폰 슬랙 앱으로 강렬한 진동과 함께 긴급 알림이 꽂히게 됩니다. 고객보다 먼저 장애를 인지하는 골든타임을 확보한 것입니다.
🙋♂️ 자주 묻는 질문 (FAQ)
Q. 서버가 뻗었다가 복구되었을 때도 알림을 받을 수 있나요?
A. 네, 스크립트 내부에 SQLite나 로컬 파일로 이전 상태(State)를 임시 저장하는 로직을 추가하면 됩니다. '이전 상태가 DOWN이었는데 현재 UP'이라면 복구 알림을 보내도록 코드를 업그레이드할 수 있습니다.
💡 핵심 정리 및 마무리
개발자의 진정한 생산성은 코드를 짜는 속도가 아니라, 휴먼 에러와 물리적 장애에 대응하는 프로세스를 자동화하는 데서 나옵니다. 툴의 화려함에 얽매이지 마십시오. 파이썬과 웹훅이 만들어내는 단 20줄의 직관적인 파이프라인이 당신의 워라밸과 서비스의 신뢰도를 동시에 구원할 것입니다.
댓글
댓글 쓰기