네트워크 트래픽과 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로 표시하면 이런 식:

메모리가 %로 나오는 게 싫었다.
memory만 쓰면 이렇게 나온다.

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

여전히 고민 중…
일단 Glances로 가보기로 했다.
문제 3: .env 파일과 Docker env 선언
https://github.com/gethomepage/homepage/discussions/4886 이 이슈에서 해결했다.
gethomepage에서 env 변수를 쓰는 방식은 "{{VAR}}"이지 ${}가 아니다. GPT가 알려준 건 틀렸다.
형님이 준 샘플도 {{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는 포기했다.
Comments
Join the conversation
Leave a comment
No comments yet
Be the first to share your thoughts!