DEV Community

Fega Suseno
Fega Suseno

Posted on

Setup NUT on Proxmox

Pada postingan ini, kita akan mencoba melakukan konfigurasi dan pengaturan NUT (Network UPS Tools) pada Proxmox. Tujuannya cukup sederhana, yaitu untuk melakukan monitoring status UPS, apakah dalam kondisi Online, On Battery, atau Low Battery.

Alurnya adalah: ketika UPS berada pada salah satu kondisi tersebut, sistem akan mengirimkan notifikasi melalui Telegram ke Administrator dan auto action shutdown, sehingga dapat segera dilakukan pengecekan dan tindakan lebih lanjut.

Setup di UPS

Langkah pertama pastikan UPS sudah terkoneksi dengan Jaringan. Pada kasus ini kita pakai UPS APC SRT3000XLI 3000VA 230V Online UPS dengan tambahan modul NMC (Network Management Control) yang terpasang. Untuk tutorialnya bisa di cek disni

Berikutnya pastikan untuk mengkonfigurasi Timezone.
Caranya pergi ke menu
Configuration > General > Date/Time > Mode

Set ke NTP Pool https://www.ntppool.org/en/zone/id

Jangan lupa juga untuk setting snmpv3, kita perlu enable dan membuat user, caranya pergi ke
Configuration->Network->SNMPv3>Access lalu centang enable.


Untuk membuat user access snmpnya ada di menu
Configuration>Network>SNMPv3>User Profile
Defaultnya ada 4 user profile, kita pilih salah satu saja

Pastikan jug auntuk enable Access Controlnya pada bagian
Configuration>Network>SNMPv3>Access Control

Jangan lupa juga untuk set delay jadi 20, konfignya ada pada Configuration>Shutdown lalu pilih Low Battery Duration

Restart network config agar semua perubahan reload
Control>Network>Reset/Reboot

Setup di Proxmox Host

Kita mulai install tools untuk requirementnya, installkan NUT dan konek ke UPS

apt install snmp nut nut-snmp -y
Enter fullscreen mode Exit fullscreen mode

Setelah terinstall lalu ganti mode

nano /etc/nut/nut.conf
Enter fullscreen mode Exit fullscreen mode

Ubah bagian mode ke standalone

MODE=standalone
Enter fullscreen mode Exit fullscreen mode

Konfigurasi UPS, gunakan perintah berikut

nano /etc/nut/ups.conf
Enter fullscreen mode Exit fullscreen mode

Tambahkan script berikut, sesuiakan ini dengan user profile yang sudah dibuat sebelumnya.

[apcsrt]
    driver = snmp-ups
    port = 10.0.3.136
    snmp_version = v3
    secLevel = authPriv
    secName = apc_agent3
    authProtocol = SHA
    authPassword = farmcenter1009
    privProtocol = AES
    privPassword = farmcenter1009
Enter fullscreen mode Exit fullscreen mode

Buat juga user untuk NUT, konfig ada pada bagian berikut

nano /etc/nut/upsd.users
Enter fullscreen mode Exit fullscreen mode

Tambahkan script berikut di bagian paling bawah, ctrl+w lalu ctrl+v.

[monuser]
       password  = passwordbebas
       upsmon primary
Enter fullscreen mode Exit fullscreen mode

Konfigurasi monitor untuk eksekusi shutdown server, modifikasi file berikut

nano /etc/nut/upsmon.conf
Enter fullscreen mode Exit fullscreen mode

Pada bagian dibawah modifikasi seperti berikut

# Example:
# NOTIFYCMD /usr/bin/notifyme
+NOTIFYCMD /usr/local/bin/nut-notif.sh

NOTIFYFLAG ONBATT EXEC
NOTIFYFLAG LOWBATT EXEC
NOTIFYFLAG ONLINE EXEC
Enter fullscreen mode Exit fullscreen mode

Kemudian pada bagian paling bawah tambahkan baris ini

MONITOR apcsrt@localhost 1 monuser passwordbebas primary
Enter fullscreen mode Exit fullscreen mode

sesuaikan dengan password yang di buat di file /etc/nut/upsd.users

Restart semua servicenya

systemctl restart nut-server nut-monitor
Enter fullscreen mode Exit fullscreen mode

Untuk mengecek apakah NUT server sudah konek dengan UPS jalankan perintah berikut

upsc apcsrt@localhost
Enter fullscreen mode Exit fullscreen mode
upsc apcsrt@localhost | egrep "battery.charge|battery.runtime|ups.status|battery.runtime.low|battery.runtime"
Enter fullscreen mode Exit fullscreen mode

harusnya terbaca parameter ups nya

lalu untuk /usr/local/bin/nut-notif.sh

isi kan script bash berikut ini

#!/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')

# Buat fungsi untuk kirim 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 triger 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 dan parameter dari $MSG
send "$MSG"
Enter fullscreen mode Exit fullscreen mode

Perlu di perhatikan pada bagian yg diberi warna hijau adalah token yg di dapat dari telegram bot, saya asumsikan sudah mensetting di botfather telegram masing-masing.

Untuk uji cobanya script di atas gunakan ini

NOTIFYTYPE=ONLINE UPSNAME=apcsrt@localhost /usr/local/bin/nut-notif.sh
Enter fullscreen mode Exit fullscreen mode
NOTIFYTYPE=ONBATT UPSNAME=apcsrt@localhost /usr/local/bin/nut-notif.sh
Enter fullscreen mode Exit fullscreen mode
NOTIFYTYPE=LOWBATT UPSNAME=apcsrt@localhost /usr/local/bin/nut-notif.sh
Enter fullscreen mode Exit fullscreen mode

Jika sesuai harusnya akan muncul pesan di telegram sesuai pesan yg kita buat. Kemudaian untuk uji coba tingkat lanjut bisa dengan mencabut power UPS dan tunggu sampai masuk mode Low Batt, jika konfig sesuai harusnya server otomatis mengeksekusi shutdown.

Selamat mencoba, semoga bermanfaat.

Top comments (0)