개요
현재 홈서버에서 오래된 디스크를 통해서 서비스를 운용하고 있는데, 디스크 모니터링에 대한 필요성이 느껴져서 고민하다가 아래와 같이 Proxmox의 기본 알림시스템을 Discord로 변경하여 이상치 발생 시 편하게 알림을 받을 수 있도록 구성하였습니다.
1. Proxmox 알림 시스템
Proxmox VE는 다양한 시스템 이벤트에 대한 통합 알림(Notification) 시스템을 제공합니다. 백업 완료, VM 상태 변화, 시스템 경고 등 다양한 이벤트를 여러 채널로 전송할 수 있습니다.
1.1 지원하는 알림 타겟
Proxmox는 다음과 같은 알림 방법을 지원합니다.
- Sendmail: 시스템 메일 (Postfix 사용)
- SMTP: 직접 메일 서버 연결
- Gotify: 자체 호스팅 푸시 알림 서버
- Webhook: HTTP 요청 (Discord, Slack 등)
1.2 Notification Matcher
Matcher는 특정 이벤트를 특정 타겟으로 라우팅하는 규칙입니다. 예를 들어,
- 백업 성공 → Discord
- 디스크 경고 → Discord + Email
- 모든 알림 → Discord (통합 관리)
이번 글에서는 Webhook(Discord)를 사용하여 모든 시스템 알림을 Discord로 받도록 설정했습니다.
2. smartd(smartmontools)
2.1 smartmontools란?
smartmontools는 디스크의 SMART(Self-Monitoring, Analysis and Reporting Technology) 데이터를 주기적으로 모니터링 할 수 있는 도구입니다.
2.2 SMART가 감지하는 문제들
smartd는 다음과 같은 디스크 문제를 자동으로 감지합니다.
- 물리적 손상
- Reallocated Sectors (재할당된 섹터)
- Current Pending Sector (대기 중인 불량 섹터)
- Offline Uncorrectable (복구 불가능한 섹터)
- 성능 저하
- Spin Retry Count (회전 재시도)
- Seek Error Rate (탐색 오류율)
- 온도 이상
- 급격한 온도 변화
- 임계 온도 초과
- Self-test 실패
- Short test (짧은 테스트, 2분)
- Long test (긴 테스트, 수 시간)
3. Discord Webhook 설정
Step 1: 개인 Discord 서버 생성
Discord에서 나만의 알림 서버를 만듭니다
- Discord 앱 또는 웹 열기
- 왼쪽 서버 목록에서 "+" 버튼 클릭
- "직접 만들기" 선택
- "나와 친구들을 위한 서버" 선택
- 서버 이름 입력 (예:
Proxmox Alerts) - 서버 생성 완료
Step 2: Webhook URL 생성
- 서버 설정 (톱니바퀴 아이콘) → 연동 → 웹후크
- 새 웹후크 클릭
- 이름:
SMART Monitor(원하는 이름) - 채널:
#general또는 원하는 채널 - 웹후크 URL 복사
- 형태:
https://discord.com/api/webhooks/abcdefgh_token_here
- 형태:
4. Proxmox Notification 설정
Step 1: Webhook 타겟 생성
- Proxmox GUI → Datacenter → Notifications → Add → Webhook
- 다음 내용 입력
기본 정보:
- ID:
discord-alerts - Comment:
Discord alerts
Method/URL:
- Method:
POST - URL:
https://discord.com/api/webhooks/{{ secrets.token }}
Headers:
- Name:
Content-Type - Value:
application/json
Body:
{
"content": "``` {{ escape message }}```"
}
Secrets:
- Name:
token - Value:
abcdefgh_your_token_here(Webhook URL에서/api/webhooks/뒷부분)
Step 2: Matcher 설정
- Datacenter → Notifications → Matchers → Modify

최종 설정 예시
root@pve:~# cat /etc/pve/notifications.cfg
sendmail: mail-to-root
comment Send mails to root@pam's email address
mailto-user root@pam
webhook: discord-alerts
body ewogICJjb250ZW50IjogImBgYCB7eyBlc2NhcGUgbWVzc2FnZSB9fWBgYCIKfQ==
comment Discord alerts
header name=Content-Type,value=YXBwbGljYXRpb24vanNvbg==
method post
url https://discord.com/api/webhooks/{{ secrets.token }}
matcher: default-matcher
comment Route all notifications to root
mode all
target discord-alerts
이렇게 하면 알림이 메일과 Discord 둘 다로 전송됩니다.
Step 3: 테스트
Datacenter → Notifications → discord-alerts → Test 버튼 클릭
Discord에 알림이 오면 성공입니다
5. smartd 설정
Step 1: 설정 파일 편집
vim /etc/smartd.conf
기존 내용을 주석 처리(#)하고 다음 내용 추가:
# Proxmox SMART 모니터링 설정
# 모든 디스크 자동 검색 및 모니터링
# -a: 모든 SMART 속성 모니터링
# -o on: 오프라인 데이터 수집 활성화
# -S on: 속성 자동 저장
# -n standby,q: 절전 모드 디스크는 깨우지 않음
# -s (S/../.././02|L/../../6/03): 매일 02시 짧은 테스트, 매주 토요일 03시 긴 테스트
# -W 5,40,50: 온도 모니터링 (차이 5°C, 경고 40°C, 위험 50°C)
# -m root: root에게 알림 전송
DEVICESCAN -d auto -a -o on -S on -n standby,q -s (S/../.././02|L/../../6/03) -W 5,40,50 -m root
Step 2: 디스크별 개별 설정 (선택사항)
디스크 종류에 따라 다른 설정을 원한다면
# HDD - 낮은 온도 임계값
/dev/sda -a -o on -S on -n standby,q \
-s (S/../.././02|L/../../6/03) \
-W 5,40,45 \
-m root
/dev/sdb -a -o on -S on -n standby,q \
-s (S/../.././02|L/../../6/03) \
-W 5,35,40 \
-m root
# NVMe - 높은 온도 허용
/dev/nvme0n1 -a -o on -S on -n standby,q \
-s (S/../.././02|L/../../6/03) \
-W 5,50,60 \
-m root
Step 3: smartd 재시작
# 설정 파일 문법 검증
smartd -q onecheck
# 서비스 재시작
systemctl restart smartd
# 상태 확인
systemctl status smartd
6. 작동 테스트
온도 임계값 테스트
간단하게 온도 임계값을 수정하여 알림을 테스트하는 방법입니다.
# 현재 온도 확인
smartctl -A /dev/sda | grep Temperature
예: 현재 온도가 27°C라면
# smartd.conf를 임시로 수정
nano /etc/smartd.conf
온도를 현재보다 낮게 설정:
# 테스트용: 25도 이상이면 경고
DEVICESCAN -a -o on -S on -n standby,q \
-s (S/../.././02|L/../../6/03) \
-W 2,20,25 \
-m root
# smartd 재시작
systemctl restart smartd
# 로그 확인 (몇 분 내로 온도 경고 발생)
journalctl -u smartd -f
Discord에 알림이 오면 테스트 성공!
테스트가 끝나면 반드시 원래 설정으로 복구!