모니터링¶
메트릭은 Beszel, 로그는 VictoriaLogs가 담당하며 둘 다 yggdrasil에서
실행됩니다. Uptime Kuma는 공개 엔드포인트 체크를 수행하고 상태 페이지를
제공합니다.
구성 요소¶
| 모듈 | 역할 | 바인딩 |
|---|---|---|
services/beszel/hub.nix |
Beszel 허브: 메트릭 UI, 이력, 알림 | 0.0.0.0:8090 (신뢰 인터페이스 경유 tailnet 전용) |
services/beszel/agent.nix |
Beszel 에이전트: 호스트별 메트릭 소스 (전 호스트 공통) | 허브로 나가는 WebSocket |
services/victorialogs.nix |
VictoriaLogs 로그 저장소 + 조회 UI, 14d 보존 |
:9428 (신뢰 인터페이스 경유 tailnet 전용) |
services/log-shipper.nix |
journald → VictoriaLogs 전송 (전 호스트 공통) | vlagent :9429 (신뢰 인터페이스 경유 tailnet 도달 가능, localhost로 입력받음) |
services/uptime-kuma.nix |
공개 엔드포인트 체크 + 상태 페이지 | 127.0.0.1:3001 |
메트릭 흐름¶
각 호스트의 Beszel 에이전트가 tailnet을 통해 허브로 먼저 접속합니다
(WebSocket). 수집용 인바운드 포트가 필요 없습니다. 에이전트는
secrets/beszel.yaml의 허브 공개 키와 universal token으로 스스로 등록하며
(SYSTEM_NAME은 호스트네임), CPU·메모리·디스크·네트워크·로드·온도·systemd
서비스 상태를 보고합니다. Podman 컨테이너 통계는 수집되지 않습니다:
에이전트가 midgard의 Podman docker 호환
소켓(virtualisation.podman.dockerSocket.enable)을 필요로 하는데, 현재
활성화되어 있지 않습니다.
beszel-agent (yggdrasil) ──┐
beszel-agent (midgard) ──┼── WebSocket ──> beszel-hub :8090 (yggdrasil)
beszel-agent (alfheim) ──┘
등록에는 universal token 활성화가 필요
에이전트 자동 등록은 허브의 universal token이 활성화된 동안에만
가능합니다. secrets/beszel.yaml에 토큰을 넣은 뒤
GET /api/beszel/universal-token?token=<값>&enable=1(인증 필요)로 한 번
활성화합니다. 등록된 에이전트는 허브 DB에 fingerprint가 남아 토큰 없이
재접속합니다.
알림¶
알림 임계값(상태, CPU, 메모리, 디스크, 로드, 온도, 대역폭)과 이메일 전송은
저장소가 아니라 Beszel UI(Settings → Notifications, shoutrrr URL)에서
설정합니다. 이 설정은 /var/lib/beszel-hub 아래 허브 데이터베이스에
저장되는, 선언형이 아닌 몇 안 되는 상태입니다.
로그 흐름¶
journald -> systemd-journal-upload -> vlagent :9429 (로컬 버퍼)
-> yggdrasil의 VictoriaLogs :9428 (/internal/insert)
systemd-journal-upload가 각 호스트의 저널을 읽습니다. 콜드 부트 시 로컬 리스너와 경합하지 않도록vlagent뒤로 순서를 강제했습니다.vlagent는 디스크에 버퍼링하고 재시도하므로 허브 재시작(예: yggdrasil 배포) 중에도 로그가 유실되지 않습니다.- 보존 기간은
14d입니다. journald 필드(_HOSTNAME,_SYSTEMD_UNIT,PRIORITY등)가 VictoriaLogs에 그대로 매핑되어 LogsQL로 조회할 수 있습니다.
접근 방법¶
tailnet에 연결된 클라이언트에서:
https://beszel.ridewithmin.com # 메트릭 + 알림
https://logs.ridewithmin.com # 로그 검색 (VictoriaLogs 웹 UI)
두 라우트 모두 Caddy에서 tailnet 대역으로 제한됩니다. tailnet 직접 접근도
가능합니다 (yggdrasil.tail6fc192.ts.net:8090, :9428/select/vmui/).
점검¶
# yggdrasil에서
systemctl is-active beszel-hub victorialogs
curl -fsS http://127.0.0.1:8090/api/health
curl -fsS http://127.0.0.1:9428/ping
# 모든 호스트에서
systemctl is-active beszel-agent vlagent systemd-journal-upload
tailnet 클라이언트에서 최근 1시간 호스트별 로그 수를 빠르게 확인:
curl -s http://yggdrasil.tail6fc192.ts.net:9428/select/logsql/query \
--data-urlencode 'query=_time:1h | stats by (_HOSTNAME) count() logs'