Proxmox에 NUT 설정

발행: (2026년 2월 9일 오후 04:21 GMT+9)
6 분 소요
원문: Dev.to

Source: Dev.to

1. UPS 설정

1.1 UPS 연결

UPS가 네트워크에 연결되어 있는지 확인하십시오. 이 예시에서는 APC SRT3000XLI 3000VA 230V Online UPSNMC (Network Management Control) 모듈이 장착된 모델을 사용합니다. 전체 튜토리얼은 여기에서 확인할 수 있습니다.

1.2 시간대

  1. Configuration > General > Date/Time > Mode 메뉴를 엽니다.
  2. NTP Poolhttps://www.ntppool.org/en/zone/id 를 선택합니다.

시간대 설정

1.3 SNMPv3

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

    SNMPv3 활성화

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

    SNMPv3 사용자 프로필

1.4 저전압 배터리 지연

Configuration > ShutdownLow 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_TOKENYOUR_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)에서 설정한 자동 종료 명령을 실행합니다.

시도해 보세요, 도움이 되길 바랍니다!

0 조회
Back to Blog

관련 글

더 보기 »

노트북 GPU의 숨겨진 힘을 풀어내기

개요 대부분의 최신 노트북은 강력한 GPU를 탑재하고 있지만, 이를 충분히 활용하지 못하는 경우가 많습니다. 소프트웨어 엔지니어로서 로컬 LLM을 실행하든, 데이터 사이언티스트이든...