一次意外的斷電就足以造成嚴重的系統損害,因此建立完善的 UPS 監控機制變得格外重要。今天玄貓要分享如何運用樹莓派搭配 Network UPS Tools (NUT) 開發一套專業的 UPS 監控系統。
為何需要 UPS 監控系統?
在實際營運環境中,斷電往往來得措手不及。若沒有適當的監控機制,系統可能在電力耗盡前無法正常關機,導致資料損失或硬體受損。透過 NUT 監控系統,我們可以:
- 即時掌握 UPS 電池狀態
- 在電力不足時自動觸發伺服器安全關機
- 集中管理多台 UPS 裝置
- 建立完整的電力事件記錄
NUT 系統架構說明
NUT 採用主從式架構,包含以下核心元件:
- NUT 伺服器:負責與 UPS 裝置直接溝通
- NUT 客戶端:連線至 NUT 伺服器取得 UPS 狀態
- 監控介面:提供 UPS 狀態查詢與管理功能
樹莓派 NUT 伺服器建置步驟
環境準備
首先需要準備以下裝置:
- 樹莓派(建議使用 Pi 4 或更新版本)
- microSD 卡(建議 16GB 以上)
- USB 連線線(連線 UPS)
- 乙太網路線
系統安裝與基礎設定
- 安裝 NUT 套件:
sudo apt install -y nut
- 掃描並識別 UPS 裝置:
sudo nut-scanner -U
- 設定 UPS 設定檔:
sudo nano /etc/nut/ups.conf
[server-room-ups]
driver = nutdrv_qx
product = UPS
desc = "機房主要 UPS 裝置"
port = auto
vendorid = 0665
productid = 5161
bus = 001
內容解密
讓玄貓為各位解說上述設定的重要引數:
[server-room-ups]
:代表 UPS 的識別名稱,我們可以自訂一個好記的名字driver
:指定使用的驅動程式,這裡使用通用的nutdrv_qx
product
:UPS 產品描述desc
:裝置說明,方便管理者識別port
:設定為auto
可自動偵測連線埠vendorid
與productid
:UPS 的硬體識別碼bus
:USB 匯流排編號
這些參陣列合確保系統能正確識別並通訊與特定的 UPS 裝置。在實務上,我建議為每台 UPS 設定獨特的識別名稱,並在描述欄位詳細記錄裝置位置與用途,這樣在擴充系統時會更容易管理。
NUT 伺服器進階設定
在設定完基本的 NUT 伺服器後,我們需要進行一些進階設定,以確保系統能安全與有效地運作。以下是關鍵的設定步驟:
設定 UPS 監控使用者
首先,我們需要編輯 upsd.users
檔案來定義可以存取 UPS 的使用者:
[admin]
password = your_admin_password
actions = set
actions = fsd
instcmds = all
upsmon primary
[monitor]
password = your_monitor_password
upsmon secondary
這個設定檔中:
- admin 使用者擁有完整的管理許可權,可以執行所有指令
- monitor 使用者只具有基本的監控許可權,適合給一般使用者使用
- 密碼應使用強度足夠的組合,避免使用簡單密碼
設定網路監聽設定
編輯 upsd.conf
檔案來設定網路監聽:
LISTEN 0.0.0.0 3493
這個設定允許 NUT 伺服器接受來自任何 IP 位址的連線。在正式環境中,建議限制特定 IP 範圍:
# 只允許內部網路連線
LISTEN 192.168.1.0/24 3493
設定 UPS 監控引數
編輯 upsmon.conf
檔案來調整監控引數:
# 主要 UPS 監控設定
MONITOR ups@localhost 1 admin your_admin_password primary
# 設定關機延遲時間(秒)
FINALDELAY 180
# 設定電池電量警告閾值
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
這些引數的說明:
- FINALDELAY:系統關機前的等待時間
- MINSUPPLIES:最少需要幾個 UPS 供電
- SHUTDOWNCMD:當需要關機時執行的指令
啟用服務自動啟動
設定完成後,需要確保相關服務會在系統啟動時自動執行:
sudo systemctl enable nut-server
sudo systemctl enable nut-monitor
sudo systemctl start nut-server
sudo systemctl start nut-monitor
驗證設定
完成所有設定後,可以使用以下指令檢查 UPS 狀態:
# 檢查 UPS 狀態
upsc ups@localhost
# 檢查服務狀態
systemctl status nut-server
systemctl status nut-monitor
若要測試通知功能,可以手動斷開 UPS 電源,觀察系統是否正確傳送警告。但在測試前,請確保所有重要服務都已做好備份。
安全性考量
網路安全:
- 設定防火牆只允許必要的 IP 存取
- 使用強密碼
- 定期更新系統和 NUT 套件
監控告警:
- 設定電池電量低於特定值時傳送警告
- 設定多重通知管道(如電子郵件、簡訊)
- 定期測試告警系統
備份設定:
- 定期備份所有 NUT 設定檔
- 記錄所有設定變更
- 建立設定回復程式
這些進階設定能確保 UPS 監控系統在緊急情況下正常運作,有效保護您的裝置安全。定期檢查和維護這些設定,將有助於預防潛在問題的發生。
在建置智慧家庭或伺服器環境時,UPS(不斷電系統)的監控管理至關重要。玄貓在多年的系統建置經驗中,發現將 UPS 整合到 Home Assistant 不僅能提供即時監控,更能實作智慧化的電源管理。讓我們探討如何實作這套解決方案。
Home Assistant 與 NUT 整合設定
在 Home Assistant 中整合 NUT(Network UPS Tools)相當直觀。首先需要在 Home Assistant 的整合頁面中加入 NUT 整合元件。系統會自動識別網路中的 NUT Pi 裝置,只需設定 observer
使用者名稱和密碼即可完成基本設定。
建立監控面板
以下是一個精簡但實用的 UPS 監控面板設定範例:
type: vertical-stack
title: 機房 UPS 監控
cards:
- type: history-graph
entities:
- name: 系統狀態
entity: sensor.server_room_rack_status
hours_to_show: 4
- type: gauge
entity: sensor.server_room_rack_battery_charge
name: 電池電量
severity:
green: 50
yellow: 20
red: 0
這個面板包含兩個主要元件:
- 歷史顯示最近 4 小時的 UPS 狀態變化
- 電量計:以視覺化方式呈現目前電池電量,並透過顏色區分不同電量等級
使用 Docker 佈署 NUT Web 介面
除了 Home Assistant 整合外,我們還可以使用 Docker 佈署一個獨立的 Web 監控介面。以下是佈署指令:
docker run \
-e UPSD_ADDR=10.0.2.10 \
-e UPSD_USER=observer \
-e UPSD_PASS=您的密碼 \
-p 9000:9000 \
ghcr.io/superioone/nut_webgui:latest
NUT 使用者端節點設定
為確保系統在斷電時能夠安全關機,需要在其他伺服器上設定 NUT 使用者端。以下是設定步驟:
安裝與設定流程
- 安裝 NUT 使用者端套件:
sudo apt install nut-client
- 測試與伺服器的連線:
upsc server-room-rack@伺服器IP
- 設定 UPS 監控設定:
編輯
/etc/nut/upsmon.conf
,加入:
MONITOR server-room-rack@伺服器IP 1 observer 密碼 secondary
- 修改運作模式:
編輯
/etc/nut/nut.conf
,設定:
MODE=netclient
- 啟用服務:
sudo systemctl restart nut-client
sudo systemctl enable nut-client
系統監控與日誌
要監控 NUT 系統的運作狀況,可以使用以下指令檢視日誌:
在伺服器端:
journalctl -f -u nut-server
在使用者端:
journalctl -f -u nut-monitor
這套完整的 UPS 監控方案不僅提供了即時的狀態監控,更確保了在斷電情況下系統能夠安全關機。透過 Home Assistant 的整合,我們可以在統一的介面中監控和管理 UPS,大幅提升了系統的可靠性與管理效率。在實際佈署過程中,建議定期測試斷電情境,確保所有節點都能正確回應電源事件。
在多年管理大型資料中心的經驗中,穩定的電源管理系統對維持服務的持續運作至關重要。今天玄貓要分享如何進行 NUT(Network UPS Tools)的進階設定與測試,確保您的 UPS 監控系統運作正常。
UPS 指令操作與監控
基礎指令操作
在 NUT 系統中,我們可以使用以下指令檢視和控制 UPS:
# 列出 UPS 支援的指令
upscmd -l server-room-rack
# 執行快速電池測試(需要管理員密碼)
upscmd -u admin server-room-rack test.battery.start.quick
Debian 12 監控問題與解決方案
在最近的專案中,玄貓發現 Debian 12 的 nut-client
套件存在一個值得注意的問題:當執行 UPS 自我測試時,系統會設定 ‘CAL’(校準)標誌,此時系統會忽略所有重要的 UPS 電池警示。
這個問題的臨時解決方案是:
- 定期重啟 nut-client 服務
- 使用 cron 排程執行:
sudo systemctl restart nut-client
NUT 系統測試策略
經過多次佈署經驗,玄貓建議採用三層式測試策略,確保 NUT 系統的可靠性。
第一層:除錯測試模式
這是最安全的測試方式,不會影響實際系統運作:
# 啟用測試模式
# 修改 /etc/nut/upsmon.conf
DEBUG_MIN = 1
第二層:模擬斷電測試
這種測試可以驗證系統的反應機制:
# 觸發 FSD(強制系統關機)事件
upsmon -c fsd
此指令會模擬 UPS 處於「電池供電與電量低」的狀態,觸發所有連線系統的關機程式。
第三層:實際斷電測試
這是最完整的測試方式,建議在系統維護時段進行:
- 拔除 UPS 電源
- 使用以下指令監控 UPS 狀態:
# 監控 UPS 狀態
upsc server-room-rack
# 重要引數說明
battery.charge # 電池電量百分比
battery.voltage # 電池電壓
ups.load # UPS 負載
ups.status # UPS 狀態(OL=正常供電,OB=電池供電)
進階設定建議
根據玄貓的實務經驗,對於高負載伺服器,建議調整以下設定:
- 提前關機時間:不要等到電池完全耗盡才關機
- 負載監控:根據實際負載調整關機觸發條件
- 自動化佈署:使用 Ansible 等工具統一管理設定
最後,系統將在電池電量降至設定閾值或剩餘時間不足時,自動觸發關機程式。這種預防性的設定可以有效避免資料損失,確保系統安全關機。
在多年的維運經驗中,玄貓發現適當的設定和定期測試是確保 UPS 系統可靠性的關鍵。建議至少每季進行一次完整的測試流程,並保持監控系統的更新。透過這些措施,我們可以建立一個更穩固的電源保護機制,為關鍵系統提供更好的保障。
在維護大型基礎設施時,不間斷電源系統(UPS)的管理至關重要。多年來在建置各種規模的資料中心,玄貓深刻體會到若沒有妥善的 UPS 管理機制,一次意外斷電就可能造成嚴重的系統損害。今天將分享如何透過 NUT(Network UPS Tools)Client 的自動化佈署,建立可靠的電源管理系統。
UPS 管理自動化的重要性
在現代資料中心環境中,手動設定 UPS 管理已不符合效率需求。透過自動化佈署 NUT Client,不僅可以大幅減少人為錯誤,還能確保所有系統都有一致的電源保護機制。
NUT Client 佈署架構設計
在規劃 NUT Client 佈署時,需要考慮幾個關鍵要素:
- 中央管理伺服器與客戶端的通訊機制
- 斷電時的自動關機流程
- 系統監控與警示設定
- 許可權管理與安全性設定
Ansible 角色設定重點
建立 NUT Client 的 Ansible 角色時,需要注意以下幾個關鍵設定:
- name: 安裝 NUT Client 套件
apt:
name: nut-client
state: present
when: ansible_os_family == "Debian"
- name: 設定 NUT Client 設定檔
template:
src: upsmon.conf.j2
dest: /etc/nut/upsmon.conf
mode: '0640'
- 第一個任務使用 apt 模組安裝 nut-client 套件,但僅在 Debian 系列作業系統執行
- 第二個任務將設定範本佈署到正確位置,並設定適當的檔案許可權
設定範本最佳化設計
在建立 upsmon.conf 範本時,需要考慮各種環境需求:
MONITOR ups@master 1 monuser secret master
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower
- MONITOR 定義了 UPS 監控的基本引數,包含 UPS 識別名稱、權重和認證資訊
- MINSUPPLIES 指定最小需要的 UPS 數量
- SHUTDOWNCMD 設定斷電時的關機指令
- POLLFREQ 和 POLLFREQALERT 定義了正常和警示狀態下的輪詢頻率
安全性考量與最佳實踐
在佈署 NUT Client 時,安全性是不容忽視的環節:
- name: 設定 NUT Client 存取許可權
file:
path: /etc/nut/upsmon.conf
owner: root
group: nut
mode: '0640'
- name: 確保 NUT 服務啟用
service:
name: nut-client
state: started
enabled: yes
- 確保設定檔案只能被適當的使用者和群組存取
- 設定服務自動啟動,確保系統重開機後能自動運作
監控與警示機制
為了確保系統能及時反應電源異常,需要建立完善的監控機制:
- name: 設定監控警示
template:
src: notifycmd.j2
dest: /etc/nut/notifycmd
mode: '0755'
owner: root
group: root
- 建立客製化的警示指令碼
- 設定適當的執行許可權
- 確保警示能即時通知相關人員
佈署流程自動化
完整的佈署流程應包含以下步驟:
- name: 前置檢查
assert:
that:
- nut_server is defined
- nut_password is defined
fail_msg: "缺少必要的設定引數"
- name: 佈署 NUT Client
include_tasks: deploy.yml
- name: 驗證佈署
include_tasks: verify.yml
- 在佈署前進行必要的引數檢查
- 使用模組化的任務檔案組織佈署流程
- 加入佈署後的驗證機制
在多年的系統維運經驗中,玄貓發現自動化佈署不僅能提升效率,更能確保系統的可靠性。透過精心設計的 Ansible 角色,結合適當的監控機制,能夠建立一個穩固的 UPS 管理環境。在實際佈署時,建議先在測試環境進行完整的驗證,確保所有元件都能正常運作,再逐步推展到生產環境。
記住,良好的電源管理機制是確保系統穩定運作的根本。透過自動化工具的協助,不僅能降低管理成本,更能提供更可靠的服務品質。持續最佳化和調整設定,因應不同環境的需求,才能建立真正堅實的基礎設施。