UPS setting
UPS란?
UPS는 Uninterruptible Power Supply(무정전 전원 장치)의 약자로, 갑작스러운 순간 정전이나 긴 정전, 전력이 불안정한 상황에 연결된 장치에 일정시간 동안 안정된 전력을 계속 공급할 수 있는 장치이고, 고급형의 경우 외부 전력을 양질의 전력으로 바꿔주는 기능도 합니다. (DC로 변환한 후 다시 순수 sine파 AC로 재변환)
24시간 동작하는 서버 등 중요한 장비의 오작동을 방지하고 안전한 종료를 보장하는 기기입니다.
| 유형 | 변환 방식 | 양질 전력 제공 여부 |
| 오프라인 | 직통 + 정전 시 변환 | 제한적 |
| 라인 인터랙티브 | 부분 조정 + 변환 | 중간 |
| 온라인 | 항상 이중 변환 (AC-DC-AC) | 우수 |
UPS 운영 전략
만약 가지고 있는 기기가 UPS와 서버 1대로만 이루어져 있다면, ups에서 제공하는 usb cable과 전원 케이블을 서버와 직통으로 연결해서 관리해도 됩니다. 보통 시놀로지, unraid 등의 유명 운영체제는 기본적으로 ups agent가 미리 내장되어 설정할 수 있습니다.
다만, ups에 서버가 여러대 연결될 경우엔, usb cable에 연결된 장치는 보호받을 수 있지만 정전 정보를 받을 수 없는 나머지 기기들은 배터리가 다 소진될때까지 동작하다가 갑자기 꺼져버리게 되어 의미가 없습니다.
이런 경우 대안은 NUT를 운영하는 것입니다. ups의 usb 케이블은 NUT master에서 받아서 전원을 관리하고, 유사 시 정전 정보를 브로드캐스팅하며 각 서버의 NUT slave에서 이 정보를 받아 안전하게 서버를 종료합니다.
NUT는 Network UPS tools의 약자이며 ups 뿐만 아니라 PDU, 태양광 장치 등의 전력 기기의 모니터링을 위한 소프트웨어 모음입니다. 서드파티에서 관리하는 만큼 최신형 기기나 해당 ups가 네트워크 관련 특화로 별도 드라이버를 제공하지 않는 경우 NUT에서 모니터링이 어려운 경우도 있습니다. 여담으로 ups 상태를 모니터링하는 dashboard docker app으로 PeaNUT이 있습니다.
라즈베리파이 서버
우선 ups 정보를 24시간 감시할 저젼력 서버를 준비합니다. 24시간 감시를 해야하므로 항상 켜져 있어야 하지만, 시스템 자원은 아주 적게 소모하기 때문에 라즈베리파이 서버가 가장 좋은 대안이긴 합니다. 하지만 필요에 따라서 docker를 운영할 수 있는 어떤 서버도 문제 없습니다.
우선 ups의 usb 케이블을 연결한 후 rpi의 터미널에서 다음 명령으로 출력을 확인합니다.
lsusb | grep -i ups # 연결된 장치에서 ups를 포함하는 장치 확인
잘 연결되어 있는 상태라면 다음과 비슷한 응답이 돌아옵니다.
여기서는 vender id 051d와 product id 0003이 중요합니다. 다음으로 docker compose 파일을 작성합니다.
services:
nut-upsd:
image: instantlinux/nut-upsd:latest
container_name: nut-upsd
restart: unless-stopped
ports:
- "3493:3493"
environment:
- TZ=Asia/Seoul
- API_USER=upsmon
- API_PASSWORD=upsmon # need to change if server expose
- DRIVER=usbhid-ups
- GROUP=nut
- NAME=ups
- POLLINTERVAL=15
- PORT=auto
- SERVER=master # master mode
- VENDORID=051d # lsusb
- DESCRIPTION=APC Smart-UPS SMT750RMI2UC
devices:
- /dev/bus/usb:/dev/bus/usb
privileged: true
volumes:
- nut-config:/etc/nut
healthcheck:
test: ["CMD", "upsc", "ups@localhost"]
interval: 30s
timeout: 10s
retries: 3
peanut:
image: brandawg93/peanut:latest
container_name: PeaNUT
restart: unless-stopped
depends_on:
- nut-upsd
environment:
WEB_PORT: 8080
ports:
- "8080:8080" # Access the dashboard at http://localhost:8080
volumes:
- /path/to/config:/config
volumes:
nut-config:
위 설정에서는 간단한 배터리 대시보드인 peanut 서비스까지 통합했습니다.
보통 포트는 일반적으로 3493번을 이용합니다. docker-compose 파일을 작성한 후 docker 를 동작시키면 다음과 같은 응답을 받을 수 있습니다.
load가 표시되지 않는 경우
APC ups의 경우 기본적으로 modbus가 비활성화되어 있고 이것 때문에 upsd의 출력 중에 load가 노출되지 않는 경우가 있습니다. 그래서 nut-upsd -> peanut -> homepage dashboard에서 load가 NaN으로 표시되는 경우가 있습니다.
https://forums.unraid.net/topic/74208-apc-smartups-setup/#comment-736429
이때엔 APC UPS 자체의 설정에서 modbus를 활성화하면 된다고 합니다.
- 화면에 표시되는 메뉴를 통해 UPS의 고급 설정 옵션을 활성화합니다.
- 설정 옵션을 열고 ModBus를 찾을 때까지 아래로 스크롤합니다.
- ModBus를 활성화로 변경하십시오. 모든 APC UPS 장치에서 ModBus는 기본적으로 비활성화되어 있습니다.





