
1. 도입 및 배경 (Why?) 💡
서버 운영자에게 가장 공포스러운 순간은 언제일까요? 😱 바로 내가 잠든 사이, 혹은 즐거운 외출 중에 서버가 조용히 죽어버리는 상황입니다.
뒤늦게 접속했을 때 이미 몇 시간 전부터 서비스가 중단되어 있었다면, 그동안의 방문자 유입 손실과 수익 하락은 뼈아픈 결과로 돌아옵니다.
수익형 블로그나 자동화 에이전트를 운영한다면 더욱 그렇습니다. "에이전트가 글을 쓰다 멈췄는지?", "DB 연결이 끊겼는지?" 실시간으로 아는 것이 곧 돈입니다. 💸
오늘은 전 세계 개발자들이 가장 선호하는 협업 툴인 **슬랙(Slack)**을 활용해, 내 서버의 상태를 스마트폰으로 즉시 받아보는 시스템을 구축해 보겠습니다.
2. 알림 시스템 구조 (What?) 🏗️
전체적인 흐름은 매우 직관적입니다. 리눅스 서버에서 돌아가는 파이썬 스크립트가 감시자 역할을 하다가, 문제가 생기면 슬랙의 API(Webhook)를 통해 메시지를 던지는 구조입니다.
[ 감시 대상 ] [ 감시자 ] [ 전달자 ] [ 수신자 ]
Server / DB ------> Python Script ------> Slack API ------> Smartphone
(상태 체크) (에러 탐지) (Webhook) (실시간 푸시)
이 구조의 장점은 별도의 서버 구축 없이 슬랙이 제공하는 고성능 인프라를 그대로 이용한다는 점입니다. 우리는 그저 '주소' 하나만 잘 따오면 됩니다.
3. 사전 준비: 슬랙 앱 및 Webhook 생성 🛠️
본격적인 코딩에 앞서, 알림을 받아볼 '방'을 만들고 권한을 얻어야 합니다.
Step 1: 슬랙 앱 만들기
- Slack API 사이트에 접속합니다.
- Create New App 클릭 → **From scratch**를 선택하세요.
- 앱 이름은 Server-Alert-Bot 정도로 정하고 관리할 워크스페이스를 선택합니다.
Step 2: Incoming Webhooks 활성화
- 왼쪽 메뉴에서 **Incoming Webhooks**를 클릭하세요.
- Off 상태를 **On**으로 바꿉니다.
- 하단의 **Add New Webhook to Workspace**를 눌러 알림을 받을 채널(#general 등)을 지정합니다.
⚠️ 중요: 생성된 Webhook URL을 메모장에 복사해두세요! 이 URL은 우리 서버가 슬랙에 메시지를 보낼 때 사용하는 '비밀 주소'입니다.
. . .
4. 핵심 작업: 파이썬 알림 모듈 작성 🐍
이제 리눅스 서버로 돌아와 코드를 작성할 차례입니다. 초보자도 바로 복사해서 쓸 수 있도록 범용적인 **'알림 모듈'**을 만들어보겠습니다.
■ 4-1. 필수 라이브러리 설치
파이썬에서 웹 데이터를 보내기 위해 requests 라이브러리가 필요합니다.
# 리눅스 터미널에서 입력
sudo apt update
sudo apt install python3-pip -y
pip3 install requests
■ 4-2. 슬랙 알림 모듈 (slack_bot.py)
어느 프로그램에서든 불러다 쓸 수 있도록 함수 형태로 만드는 것이 고수의 방식입니다.
import requests
import json
import datetime
# [보안 주의] 이 URL은 절대 외부에 노출하지 마세요!
SLACK_WEBHOOK_URL = "https://hooks.slack.com/services/TXXX/BXXX/XXXX"
def send_slack_message(title, message, color="#eb4034"):
"""
슬랙으로 깔끔한 카드 형태의 알림을 전송합니다.
:param title: 알림 제목
:param message: 상세 내용
:param color: 사이드바 색상 (에러: 빨강(#eb4034), 성공: 초록(#36a64f))
"""
payload = {
"attachments": [
{
"color": color,
"pretext": f"🚀 *Server Status Report*",
"fields": [
{
"title": title,
"value": message,
"short": False
}
],
"footer": f"Linux Monitor | {datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"
}
]
}
try:
response = requests.post(
SLACK_WEBHOOK_URL,
data=json.dumps(payload),
headers={'Content-Type': 'application/json'}
)
if response.status_code != 200:
print(f"전송 실패: {response.status_code}")
except Exception as e:
print(f"오류 발생: {str(e)}")
# 테스트 실행 (파일을 직접 실행할 때만 동작)
if __name__ == "__main__":
send_slack_message("✅ 시스템 가동", "서버 모니터링 모듈이 정상 시작되었습니다.")
5. 실전 응용: 디스크 용량 감시하기 📊
이제 위 모듈을 활용해 **'디스크 사용량'**을 24시간 감시해 보겠습니다.
■ check_disk.py 작성
import shutil
from slack_bot import send_slack_message
# 1. 디스크 사용량 체크 (루트 경로 '/')
total, used, free = shutil.disk_usage("/")
used_percent = (used / total) * 100
print(f"현재 사용률: {used_percent:.2f}%")
# 2. 임계치(90%) 초과 시 알림 발송
if used_percent > 90:
msg = f"‼️ 경고: 서버 디스크 사용량이 {used_percent:.2f}%입니다! 로그 정리가 필요합니다."
send_slack_message("🚨 Disk Full Warning", msg, "#eb4034")
이렇게 만든 스크립트를 리눅스 **crontab**에 등록하면, 여러분이 잠든 사이에도 서버가 스스로 건강 상태를 체크하고 보고하게 됩니다. 🤖
6. 트러블슈팅: 당신이 겪을 에러 2가지 🛠️
Q1. No module named 'requests' 에러가 나요!
- 해결: 파이썬 버전이 섞여 있을 때 발생합니다. python3 -m pip install requests 명령어로 설치해 보세요.
Q2. 슬랙에 메시지가 안 와요!
- 해결: Webhook URL이 정확한지 확인하고, 서버에서 외부(인터넷)로 나가는 포트가 방화벽에 막혀있지 않은지 체크하세요.
7. 마무리 및 태그 🏷️
서버 가동률 99.9%는 거창한 도구가 만드는 것이 아닙니다. 이런 작은 알림 시스템 하나가 모여 견고한 서비스를 만듭니다.
'Server Story....' 카테고리의 다른 글
| 도커(Docker)로 파이썬 에이전트 24시간 무중단 가동하기 (0) | 2026.04.03 |
|---|---|
| 파이썬으로 MSSQL 데이터 추출 및 자동 전처리 가이드 (0) | 2026.04.02 |
| Windows Server 2022: MSSQL 외부 접속 설정 및 필수 보안 강화 (0) | 2026.04.02 |
| 리눅스 서버 용량 확장: NFS 연결과 /etc/fstab 자동 마운트 완벽 가이드 (0) | 2026.04.01 |
| 리눅스 서버의 숨은 해결사: Logrotate로 디스크 풀(Full) 완벽 방지하기 (0) | 2026.04.01 |