Proxmox에 NUT 설정
Source: Dev.to
1. UPS 설정
1.1 UPS 연결
UPS가 네트워크에 연결되어 있는지 확인하십시오. 이 예시에서는 APC SRT3000XLI 3000VA 230V Online UPS에 NMC (Network Management Control) 모듈이 장착된 모델을 사용합니다. 전체 튜토리얼은 여기에서 확인할 수 있습니다.
1.2 시간대
- Configuration > General > Date/Time > Mode 메뉴를 엽니다.
- NTP Pool →
https://www.ntppool.org/en/zone/id를 선택합니다.

1.3 SNMPv3
-
SNMPv3를 활성화합니다: Configuration → Network → SNMPv3 > Access, Enable 체크박스를 선택합니다.

-
사용자 프로필을 생성합니다: Configuration → Network → SNMPv3 > User Profile. 기본 제공되는 네 가지 프로필 중 하나를 선택합니다.

1.4 저전압 배터리 지연
Configuration > Shutdown → Low Battery Duration 에서 지연 시간을 20 초 로 설정합니다.

2. Setup di Proxmox Host
2.1 Installasi paket NUT
apt update
apt install -y snmp nut nut-snmp
2.2 Konfigurasi mode NUT
Edit file /etc/nut/nut.conf dan ubah baris MODE menjadi:
MODE=standalone
2.3 Konfigurasi UPS (ups.conf)
nano /etc/nut/ups.conf
Tambahkan (atau sesuaikan) blok berikut dengan user profile yang sudah dibuat pada UPS:
[apcsrt]
driver = snmp-ups
port = 10.0.3.136 # IP UPS
snmp_version = v3
secLevel = authPriv
secName = apc_agent3
authProtocol = SHA
authPassword = farmcenter1009
privProtocol = AES
privPassword = farmcenter1009
2.4 Buat user NUT (upsd.users)
nano /etc/nut/upsd.users
Tambahkan di bagian paling bawah:
[monuser]
password = passwordbebas
upsmon primary
Ctrl+W를 눌러 검색하고,Ctrl+V를 눌러 붙여넣기(에디터가nano인 경우)합니다.
2.5 Konfigurasi monitor (upsmon.conf)
nano /etc/nut/upsmon.conf
Modifikasi bagian NOTIFYCMD dan NOTIFYFLAG:
# Example:
# NOTIFYCMD /usr/bin/notifyme
+NOTIFYCMD /usr/local/bin/nut-notif.sh
NOTIFYFLAG ONBATT EXEC
NOTIFYFLAG LOWBATT EXEC
NOTIFYFLAG ONLINE EXEC
Di bagian paling bawah, tambahkan baris MONITOR:
MONITOR apcsrt@localhost 1 monuser passwordbebas primary
Pastikan password yang dipakai sama dengan yang didefinisikan di /etc/nut/upsd.users.
2.6 Restart service NUT
systemctl restart nut-driver nut-server nut-monitor
2.7 Verifikasi koneksi ke UPS
upsc apcsrt@localhost
Untuk menampilkan parameter penting:
upsc apcsrt@localhost | egrep "battery.charge|battery.runtime|ups.status|battery.runtime.low|battery.runtime"
Jika output menampilkan nilai‑nilai tersebut, maka NUT sudah berhasil terhubung ke UPS.
2.8 Skrip notifikasi (/usr/local/bin/nut-notif.sh)
Buat file /usr/local/bin/nut-notif.sh (pastikan memiliki izin eksekusi) dan isi dengan skrip yang mengirimkan pesan ke Telegram. Contoh sederhana:
#!/bin/bash
# nut-notif.sh – kirim notifikasi UPS ke Telegram
# ==== CONFIGURATION ====
TOKEN="YOUR_TELEGRAM_BOT_TOKEN"
CHAT_ID="YOUR_TELEGRAM_CHAT_ID"
# =======================
EVENT=$1 # ONBATT, LOWBATT, ONLINE, dll.
MESSAGE="⚡ UPS ${EVENT} pada $(date '+%Y-%m-%d %H:%M:%S')"
curl -s -X POST "https://api.telegram.org/bot${TOKEN}/sendMessage" \
-d chat_id="${CHAT_ID}" \
-d text="${MESSAGE}" >/dev/null
chmod +x /usr/local/bin/nut-notif.sh
YOUR_TELEGRAM_BOT_TOKEN와YOUR_TELEGRAM_CHAT_ID를 실제 값으로 교체하십시오.
3. 결론
위 단계들을 따르면 Proxmox는:
- NUT를 통해 UPS 상태를 실시간으로 모니터링합니다.
- 상태 변화(ON BATT, LOW BATT, ONLINE)가 발생하면 Telegram으로 알림을 보냅니다.
- UPS가 Low Battery 상태가 되면 자동으로 종료합니다.
이 튜토리얼이 도움이 되길 바랍니다! 질문이나 문제가 있으면 댓글을 남기시거나 Telegram으로 연락 주세요. 🚀
UPS 알림을 Telegram으로 보내는 Bash 스크립트
다음은 BotFather에서 만든 봇을 통해 UPS 상태(ON BATTERY, LOW BATTERY, ONLINE) 알림을 Telegram으로 전송할 수 있는 Bash 스크립트 예시입니다.
#!/bin/bash
# ------------------------------------------------------------------
# Setup variabel
# ------------------------------------------------------------------
TOKEN="6495733192:AAEiztfp_b6JoZB7uUWhpZV89KbpVQou_34"
CHAT_ID="-1001768856329"
TOPIC_ID="53038"
EVENT="$NOTIFYTYPE"
DATE=$(date '+%Y-%m-%d %H:%M:%S')
# ------------------------------------------------------------------
# Fungsi untuk mengirim pesan ke Telegram
# ------------------------------------------------------------------
send() {
curl -s -X POST "https://api.telegram.org/bot${TOKEN}/sendMessage" \
-d chat_id="${CHAT_ID}" \
-d message_thread_id="${TOPIC_ID}" \
-d parse_mode=HTML \
--data-urlencode text="$1"
}
# ------------------------------------------------------------------
# Buat trigger EVENT dari upsmon.conf
# ------------------------------------------------------------------
case "$EVENT" in
ONBATT)
MSG=$(printf "UPS ON BATTERY \n\n%s" "$DATE")
;;
LOWBATT)
MSG=$(printf "UPS LOW BATTERY \n\n%s\nProd server Graceful Shutdown" "$DATE")
;;
ONLINE)
MSG=$(printf "UPS ONLINE \n\n%s" "$DATE")
;;
*)
exit 0
;;
esac
# ------------------------------------------------------------------
# Panggil fungsi dengan parameter $MSG
# ------------------------------------------------------------------
send "$MSG"
참고:
녹색으로 표시된 부분(변수TOKEN)은 BotFather Telegram에서 받은 토큰입니다. 토큰이 올바른지 확인하고 봇이 설정되어 있는지 확인하세요.
스크립트 테스트 방법
위 스크립트를 실행할 때 테스트하려는 이벤트에 맞게 환경 변수 NOTIFYTYPE을 설정합니다.
NOTIFYTYPE=ONLINE UPSNAME=apcsrt@localhost /usr/local/bin/nut-notif.sh
NOTIFYTYPE=ONBATT UPSNAME=apcsrt@localhost /usr/local/bin/nut-notif.sh
NOTIFYTYPE=LOWBATT UPSNAME=apcsrt@localhost /usr/local/bin/nut-notif.sh
모든 설정이 올바르게 구성되면, 각 이벤트에 정의된 텍스트에 따라 Telegram으로 메시지를 받게 됩니다.
고급 테스트
실제 테스트를 위해 UPS 전원을 뽑고 UPS가 Low Battery 모드에 들어갈 때까지 기다립니다. 설정이 올바르면 서버가 NUT(Network UPS Tools)에서 설정한 자동 종료 명령을 실행합니다.
시도해 보세요, 도움이 되길 바랍니다!