CPU·메모리·디스크·네트워크를 컨테이너 단위로 기록하고 임계치를 넘으면 알림을 보낸다.
http://192.168.0.240:8095NPM 장애 때 "새벽 4시에 메모리가 부족했나?"를 확인할 방법이 없었다.
free -h 는 현재만 보여주고, Uptime Kuma는 살았나 죽었나만 안다.
과거 시점의 자원 상태를 볼 수단이 없었다. → 트러블슈팅 기록
RAM 80MB 정도로 Netdata·Grafana보다 훨씬 가볍다.
허브(웹 UI) + 에이전트(수집) 두 개. 에이전트가 허브로 나가서 붙는 방식(TOKEN)이라
인바운드 포트를 열 필요가 없다. 45876 포트가 닫혀 있어도 정상이다.
services:
beszel:
image: henrygd/beszel:latest
container_name: beszel
restart: unless-stopped
ports:
- "8095:8090"
volumes:
- beszel_data:/beszel_data
beszel-agent:
image: henrygd/beszel-agent:latest
container_name: beszel-agent
restart: unless-stopped
network_mode: host
volumes:
- beszel_agent_data:/var/lib/beszel-agent
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
LISTEN: 45876
KEY: "ssh-ed25519 AAAA..."
TOKEN: <허브에서 발급>
HUB_URL: http://192.168.0.240:8095
volumes:
beszel_data:
beszel_agent_data:
/var/run/docker.sock이 없으면 컨테이너별 통계가 안 나온다. 이게 핵심 기능이므로 필수.
에이전트에 넣을 KEY·TOKEN은 허브를 띄운 뒤에야 생성된다.
http://192.168.0.240:8095 → 관리자 계정 생성+ 추가 시스템 →
| 항목 | 값 |
|---|---|
| 이름 | NAS |
| 호스트/IP | 192.168.0.240 ← localhost 아님 |
| 포트 | 45876 |
| 표시 키 / 토큰 | 복사 |
처음에 8090으로 배포했는데 IT Tools가 이미 쓰고 있어서 IT Tools 화면이 떴다.
"계정 생성 화면이 없다"고 한참 헤맴. → 배포 전 포트 확인 필수.
Beszel이 제공하는 compose에 ./beszel_agent_data 가 들어 있어 배포 실패.
Bind mount failed: '/data/compose/13/beszel_agent_data' does not exist
→ 네임드 볼륨으로 변경.
Failed to load public keys: illegal base64 data at input byte 68
- KEY='ssh-ed25519 AAAA...' # ❌ 따옴표가 값의 일부가 됨
- "KEY=ssh-ed25519 AAAA..." # ✅
맵 형식(KEY: "값")으로 쓰면 이 실수가 구조적으로 불가능하다.
→ 시놀로지 도커 함정
설정 → 알림 에 shoutrrr URL 등록 (Watchtower와 같은 형식):
telegram://<봇토큰>@telegram?chats=<채팅ID>
discord://<웹훅토큰>@<웹훅ID>
⚠️ 디스코드 웹훅 URL을 그대로 넣으면
locating service for URL오류가 난다.
https://discord.com/api/webhooks/{ID}/{토큰}→discord://{토큰}@{ID}(순서가 바뀐다)
| 항목 | 임계값 | 지속시간 |
|---|---|---|
| 시스템 오프라인 | — | 즉시 |
| 메모리 | 85% | 10분 |
| 디스크 | 85% | 30분 |
| CPU | 90% | 15분 |
| 온도 | 60°C | 10분 |
지속시간이 중요하다. Jellyfin 트랜스코딩이나 Paperless OCR 중에는 CPU가 잠깐 100%까지
간다 — 정상이다. 스파이크마다 알림이 오면 며칠 만에 무시하게 된다.
대역폭·배터리 알림은 NAS에서 의미가 없으니 끈다.
중복이 아니라 보완이다.