Homelab #9 Glances 설치 실패기 />
HOMELAB

Homelab #9 Glances 설치 실패기

Thất Nghiệp Thất Nghiệp
Oct 13, 2025 1 min read 0 조회
블로그로 돌아가기

네트워크 트래픽과 CPU/메모리 등 시스템 지표를 모니터링할 무언가가 필요했다. Glances와 Prometheus 중 고민했는데, 단순함 때문에 Glances를 선택했다.

문제와 해결

문제 1: Wireguard가 모든 트래픽을 라우팅해서 Cloudflared 사용 불가

Tailscale이나 Wireguard 내부에서 Cloudflared tunnel을 쓰는 방법이 있다. 하지만 Windows Server에 cloudflared를 직접 설치하면, 트래픽이 전부 Wireguard 서버(VPS)로 라우팅돼서 터널이 제대로 동작하지 않는다.

그래서 해결책은 “Wireguard 내부에 cloudflared tunnel”을 두는 것. NAT를 통해 10.66.66.66/24(서버)에서 Wireguard로 포워딩하고, 다시 cloudflared로 외부로 노출한다. 이러면 해결.

문제 2: Glances에 인증 추가

Glances 기본 설치는 0.0.0.0에 바인딩된다. localhost:61208, Wireguard IP 10.66.66.66:61208으로도 접근 가능했다. 여기서 NAT 아이디어가 시작됐다.

먼저 VPS의 WAN IP로 NAT를 걸고, ufw allow 61208/tcp로 열어 접근했다. 즉, WANVPS:61208로 Glances 접근 가능.

그렇게 되면 cloudflared로 외부 공개가 가능하지만, 도메인만 알면 누구나 들어올 수 있다. IP 스캔되는 것과 다를 바 없다.

gethomepage의 Glances 위젯에는 username/password 파라미터가 있다. 즉, Glances에 기본 인증 기능이 있다. 그래서 이걸 활용하기로 했다.

문제는 Glances에서 username과 password를 동시에 넘기는 방식이 애매했다.

처음엔 이렇게 시도:

glances -w --bind 10.66.66.66 --port 61208 --disable-autodiscover --username --password

이렇게 초기 설정:

glances -w --bind 10.66.66.66 --port 61208 --disable-autodiscover --username=admin --password

그런데 username=admin이 그대로 username이 되어버린다.

glances -w --bind 10.66.66.66 --port 61208 --disable-autodiscover -u=admin --password

이렇게 하면 admin이 정상적으로 username이 된다. 이후 한 번 비밀번호 설정하면 저장되고, 다시 실행할 때는 같은 커맨드로 된다.

Glances 설정 완료!

하지만 Prometheus와 Glances 중 무엇을 쓸지는 여전히 고민이었다.

Glances 위젯은 info/cpu/memory/disk/network 같은 항목만 보여준다. 그런데 UI 방향성과 맞지 않았다. info로 표시하면 이런 식:

문제 2: Glances에 인증 추가 - Glances 위젯은 info/cpu/memory/disk/network 같은 항목만 보여준다

메모리가 %로 나오는 게 싫었다.

memory만 쓰면 이렇게 나온다.

문제 2: Glances에 인증 추가 - memory만 쓰면 이렇게 나온다

하지만 위젯 하나를 통째로 차지한다. 내 방향성과 맞지 않는다.

문제 2: Glances에 인증 추가 - 하지만 위젯 하나를 통째로 차지한다

여전히 고민 중…

일단 Glances로 가보기로 했다.

문제 3: .env 파일과 Docker env 선언

https://github.com/gethomepage/homepage/discussions/4886 이 이슈에서 해결했다.

gethomepage에서 env 변수를 쓰는 방식은 "{{VAR}}"이지 ${}가 아니다. GPT가 알려준 건 틀렸다.

형님이 준 샘플도 {{VAR}}만 쓰고 쌍따옴표는 없었다.

문제 3: .env 파일과 Docker env 선언 - 형님이 준 샘플도 {{VAR}}만 쓰고 쌍따옴표는 없었다

문법 오류일 뿐이라 깊게는 안 파고들었다.

문제 4: Glances vs Prometheus

Gethomepage는 내가 원하는 Glances metric 타입을 지원하지 않는다. 그래서 대안이 필요했다.

방법은 2가지: (1) Fork해서 직접 지원 추가 (2) Prometheus로 Query. 결국 2번을 택할 듯하다. Prometheus 공부에도 도움이 된다.

문제 5: 포트 포워딩과 MASQUERADE

모든 노드 트래픽이 VPN으로 강제 라우팅되니 시스템이 분산된 것처럼 보인다. Prometheus를 위해 포트 포워딩을 열어야 한다. 이전에는 Glances를 Cloudflared로 노출했는데, Python 기반이라 성능 한계가 명확했다. 느려지고, 웹서버 타임아웃이 생겨 데이터가 끊겼다. 그래서 Golang으로 작성된 Windows Exporter(Prometheus)를 썼다. 지속 실행에 자원이 덜 든다.

Prometheus의 장점은 데이터 센터 전체 데이터를 통합해 볼 수 있다는 점이다.

문제 6: Glances가 일정 시간 후 크래시

이유를 정확히 모르겠다. Glances API와 WebUI가 모두 응답하지 않는다. 리소스가 부족해서인 듯하다.
그래서 결국 Glances는 포기했다.

이 글 공유하기

Twitter LinkedIn
Thất Nghiệp

Thất Nghiệp 작성

깔끔한 코드, 창의적인 자유, 완벽한 개발 환경을 추구하는 개발자. 하나의 컴포넌트씩 디지털 공간을 만들어가고 있습니다.

Comments

Join the conversation

Leave a comment

Won't be published

이런 글도 있어요